码迷,mamicode.com
首页 > 其他好文 > 详细

串口发送带有使能引脚的注意事项

时间:2017-04-14 15:42:52      阅读:566      评论:0      收藏:0      [点我收藏+]

标签:语句   status   速度   存在   register   shift   while   bsp   get   

多字节串口发送时,为提高发送速度,我们一般会去检测TXE: Transmit data register empty,当该位置1时,即发送下一个字符。

  for(i=0;i<len;i++)
  {
    USART_SendData(USART1,str[i]);
      while((USART_GetFlagStatus(USART1,USART_FLAG_TXE))==RESET);
  }

但是当存在读写使能端口时,最后一个while检测完毕即关闭使能端口,这样会存在最后一个数据在移位寄存器内但并没有发送出去的情况。

TXE置位仅表示the content of the USARTx_TDR register has been transferred into the shift register,所以为确保最后一个字符可以顺利发送,代码修正为

  for(i=0;i<len;i++)
  {
    USART_SendData(USART1,str[i]);
      while((USART_GetFlagStatus(USART1,USART_FLAG_TXE))==RESET);
  }
  while((USART_GetFlagStatus(USART1,USART_FLAG_TC))==RESET){};

最后再检测一次是否发送完成。

同样对于使用DMA发送也是如此,DMA的发送完成中断仅表示DMA已将数据全部搬运完毕,但不以为着数据从串口的移位寄存器中发送完毕,所以在DMA的发送完成中断里也要加检测串口发送完成的语句。

串口发送带有使能引脚的注意事项

标签:语句   status   速度   存在   register   shift   while   bsp   get   

原文地址:http://www.cnblogs.com/zhanghankui/p/6709146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!