首页 > 代码库 > 串口发送带有使能引脚的注意事项
串口发送带有使能引脚的注意事项
多字节串口发送时,为提高发送速度,我们一般会去检测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的发送完成中断里也要加检测串口发送完成的语句。
串口发送带有使能引脚的注意事项
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。