打印
[STM32F1]

STM32103 USART DMA发送完成判断方法

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

使用特权

评论回复
评论
wangjiahao88 2018-12-6 13:54 回复TA
@秋枫ing :这个是 485 pin 控制脚的切换! 
秋枫ing 2018-11-30 10:37 回复TA
Usart2_TR_Sw(RS485_RX); 楼主,这个函数是干什么的啊 
5
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          再次发送
                        }

使用特权

评论回复
6
東南博士| | 2018-11-27 12:55 | 只看该作者
dma只是把数据送到了usart的dr,dr还要转移到sr。dr到sr的过程产生txe来触发dma,sr到端口输出完才产生tc

使用特权

评论回复
7
wangjiahao88|  楼主 | 2018-11-28 12:29 | 只看该作者
这个方法很不错!

使用特权

评论回复
8
heimaojingzhang| | 2018-12-3 13:39 | 只看该作者
非常感谢分享啊

使用特权

评论回复
9
keaibukelian| | 2018-12-3 13:45 | 只看该作者
长知识了 呵呵呵

使用特权

评论回复
10
paotangsan| | 2018-12-3 14:00 | 只看该作者
长知识了  没用过dma呢还

使用特权

评论回复
11
wakayi| | 2018-12-3 14:07 | 只看该作者
长知识 了 省的傻等了

使用特权

评论回复
12
xiaoqizi| | 2018-12-3 15:27 | 只看该作者
不错 感谢分享啊

使用特权

评论回复
13
wangjiahao88|  楼主 | 2018-12-6 13:44 | 只看该作者
这个 也是很多人对数据手册 理解不透的原因!

使用特权

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

本版积分规则

473

主题

7517

帖子

30

粉丝