[其他]

HC32F460_DDL_Rev3.2.0中DMA函数存在问题

[复制链接]
429|3
手机看帖
扫描二维码
随时随地手机跟帖
Alohaq|  楼主 | 2024-1-19 16:19 | 显示全部楼层 |阅读模式
本帖最后由 Alohaq 于 2024-2-4 14:17 编辑

若在DMA_ChCmd使用中有中断触发,导致第二次DMA_ChCmd触发,则会直接返回LL_ERR; 假如我用的两个DMA单元,则会导致被中断触发的DMA单元被正在使能的DMA单元使能失败,如DMA1正在通道使能,这时外部中断触发,去使能DMA2的通道,结果DMA2使能失败,直接导致传输失败,所以需要分开,设为DMA_ChCmd_1和DMA_ChCmd_2

int32_t DMA_ChCmd(CM_DMA_TypeDef *DMAx, uint8_t u8Ch, en_functional_state_t enNewState)
{
    static __IO uint8_t u8DmaChEnState = DMA_IDLE;
    ```

    ```
    if (DMA_IDLE == u8DmaChEnState) {
       ```
       return LL_OK;
    }
        return LL_ERR;
}






使用特权

评论回复
elephant00| | 2024-1-31 10:01 | 显示全部楼层
一般是DMA初始化、数据传输等问题

使用特权

评论回复
jinyuhang123456| | 2024-1-31 14:14 | 显示全部楼层
意思是这个函数要写两遍?还是说,函数内容里面要将两个DMA分开?

使用特权

评论回复
Alohaq|  楼主 | 2024-2-4 14:21 | 显示全部楼层
jinyuhang123456 发表于 2024-1-31 14:14
意思是这个函数要写两遍?还是说,函数内容里面要将两个DMA分开?

就是我用了两个DMA单元,库函数里只有一个DMA_ChCmd,假设正在使能DMA2的通道,恰好外部中断来了,触发DMA1的传输,那么这时候使能DMA1的通道,也需要用到DMA_ChCmd,这里直接返回Err,按理DMA1和2两者之间的通道使能不会冲突,这个函数里没处理好导致两者冲突了,我单独为两个DMA搞了使能通道函数,分别为DMA_ChCmd_1和DMA_ChCmd_2,就不会引起冲突了

使用特权

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

本版积分规则

6

主题

33

帖子

0

粉丝