IC代烧网


首页 -- IC代烧-- IC编程器-- 适配器座子-- 仿真器-- 相关知识解答 --关于我们
 
IC代烧网 >> 适配器座子 >> 当前位置

UART 发送数据丢失最后一个字节

问题:
该问题由某客户提出,发生在 STM32F103VCT6 器件上。据其工程师讲述:在其产品的设计中要使用 STM32 的 STOP 低功耗模式。而在使 STM32 进入 STOP 模式之前,需要对整个系统做一些设置工作, 其中一项工作是通过 USART3 向某个功能模组发送一个命令报文。在实测中发现,该报文没有发全, 总是缺少最后一个字节。
调研:
使用示波器观察 STM32 在进入 STOP 模式前从 USART3 发出的最后一个报文,确认的确缺 少正常报文的最后一个字节。编写测试程序,每一秒钟从 USART3 发送一次该报文。借助 windows 的超级终端接收,经长时间观察,未见异常。修改其软件,将进入 STOP 模 式的代码用 while(1)替代
重新编译、执行。使用示波器观察,程序在执行到 while(1)之前,STM32 从 USART3 发 出的最后一个报文。结果显示,该报文是完整的修改代码,在 while(1)语句之前加一行对 GPIO 翻转的代码,重新编译、执行。使用示波器观察,STM32 从 USART3 发出的最后一个报文与 PB7 上的信号的相位关 系。结果表明,报文的最后一个字节发出之前,PB7 已翻转,重新编译、执行。使用示波器观察 STM32 从 USART3 发出的最后一个报文与 PB7 上的信号的相位关 系。结果表明,在 PB7 翻转之前,报文的内容已全部发出,去掉程序中加入的调试代码,恢复进入 STOP 模式的功能,重新测试。STM32 在进入 STOP 模式之前, 发出的最后一个报文是完整的。
结论:
错误使用 USART_FLAG_TXE 作为判断数据在 USART 上发送完成的依据,而导致最后一个字节的数据未及发出即进入了 STOP 模式。
处理:
将 USART_FLAG_TXE 换成 USART_FLAG_TC,作为判定数据在 USART 上发送完的依据。
返回顶部


2013-2015 IC代烧网 All Rights Reserved.
如有任何问题和建议请联系:498187676@qq.com

深圳市星光芯电子有限公司 版权所有
深圳市龙岗区南湾街道平吉大道1号建昇大厦B栋1618(李朗软件园对面)
联系人:周工  手机:13713820066


站点地图

粤ICP备12084176号