搞HAL库有一段时间了,一直没有发现他搞锁机制有什么用,更重要的是这个锁机制是不支持RTOS,所以起不到应有的作用。
__HAL_UNLOCK
__HAL_LOCK
还有这个状态判断
DMA_Handle.State = HAL_DMA_STATE_READY
这两个机制,除了坑还是坑。
用户自己写的话,要将这两个解除,比如DMA的正常模式,如果多次调用函数HAL_DMA_Start_IT,就要尤其注意。
进入中断后,务必手动解锁并设置状态。以前就说过一次,这个锁机制处理的欠妥,开锁和解锁完全在两个不同的函数,使用非常不方便。
void DMA1_Stream1_IRQHandler(void)
{
/* 传输完成中断 */
if((DMA1->LISR & DMA_FLAG_TCIF1_5) != RESET)
{
__HAL_UNLOCK(&DMA_Handle);
DMA_Handle.State = HAL_DMA_STATE_READY;
/* 清除标志 */
DMA1->LIFCR = DMA_FLAG_TCIF1_5;
}
} |