[STM32F1] STM32103 USART DMA发送完成判断方法

[复制链接]
3523|14
 楼主| wangjiahao88 发表于 2018-11-27 12:52 | 显示全部楼层 |阅读模式
STM32103 USART DMA发送完成判断方法
 楼主| wangjiahao88 发表于 2018-11-27 12:52 | 显示全部楼层
USART在DMA模式下,进DMA发送完成中断后发现数据其实USART那边还没有真正的完成发送。
然后在中断里面改了下,先把DMA禁止掉,然后等待TC置位,TC置位就可以确认所有数据已经送出。
void DMA1_Channel7_IRQHandler(void)
{
    if(SET==DMA_GetITStatus(DMA1_IT_TC7))
    {
        DMA_ClearITPendingBit(DMA1_IT_TC7);
        DMA_Cmd(DMA_USART2_TX, DISABLE);
        DMA_USART2_TX->CNDTR = 0;
        while(RESET == USART_GetFlagStatus(USART2,USART_FLAG_TC))
            {
            USART_ClearFlag(USART2,USART_FLAG_TC);
            }
        Usart2_TR_Sw(RS485_RX);
        return ;
    }
}
 楼主| wangjiahao88 发表于 2018-11-27 12:53 | 显示全部楼层
 楼主| wangjiahao88 发表于 2018-11-27 12:53 | 显示全部楼层
void DMA1_Channel7_IRQHandler(void)
{
    if(SET==DMA_GetITStatus(DMA1_IT_TC7))
    {
        DMA_ClearITPendingBit(DMA1_IT_TC7);
        DMA_Cmd(DMA_USART2_TX, DISABLE);
        DMA_USART2_TX->CNDTR = 0;
        while(RESET == USART_GetFlagStatus(USART2,USART_FLAG_TC))
            {
            ;
            }
        USART_ClearFlag(USART2,USART_FLAG_TC);
        Usart2_TR_Sw(RS485_RX);
        return ;
    }
}

评论

@秋枫ing :这个是 485 pin 控制脚的切换!  发表于 2018-12-6 13:54
Usart2_TR_Sw(RS485_RX); 楼主,这个函数是干什么的啊  发表于 2018-11-30 10:37
 楼主| wangjiahao88 发表于 2018-11-27 12:54 | 显示全部楼层
                        if(DMA_GetCurrDataCounter(DMA1_Channel4)==0) //返回当前DMA通道x剩余的待传输数据数目
                        {
                                /* 关闭DMA传输 */
                                DMA_Cmd(DMA1_Channel7, DISABLE);
                                
                                DMA1_Channel7->CNDTR =  USART2_tx_buf_size_DEF;   //重新设定传输数据个数  
                                
                                DMA_Cmd(USART2_Tx_DMA_Channel_DEF, ENABLE);         //使能DMA channel x          再次发送
                        }
東南博士 发表于 2018-11-27 12:55 | 显示全部楼层
dma只是把数据送到了usart的dr,dr还要转移到sr。dr到sr的过程产生txe来触发dma,sr到端口输出完才产生tc
 楼主| wangjiahao88 发表于 2018-11-28 12:29 | 显示全部楼层
这个方法很不错!
heimaojingzhang 发表于 2018-12-3 13:39 | 显示全部楼层
非常感谢分享啊
keaibukelian 发表于 2018-12-3 13:45 | 显示全部楼层
长知识了 呵呵呵
paotangsan 发表于 2018-12-3 14:00 | 显示全部楼层
长知识了  没用过dma呢还
wakayi 发表于 2018-12-3 14:07 | 显示全部楼层
长知识 了 省的傻等了
xiaoqizi 发表于 2018-12-3 15:27 | 显示全部楼层
不错 感谢分享啊
 楼主| wangjiahao88 发表于 2018-12-6 13:44 | 显示全部楼层
这个 也是很多人对数据手册 理解不透的原因!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

500

主题

7585

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部