打印

将HAL库的中断改成寄存器方式时,特别注意HAL库锁机制和状态设置这两个大坑

[复制链接]
221|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
搞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;
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

457

主题

483

帖子

1

粉丝