完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 问题: 该问题由某客户提出,发生在 6 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 上发出最后一个字节时,已进入了STOP 模式。检查其软件中,从 USART3 发送报文的代码,表(三)所示: 对其进行修改,将 USART_FLAG_TXE 替换为 USART_FLAG_TC,如表(四)所示: 重新编译、执行。使用示波器观察 STM32 从 USART3 发出的最后一个报文与 PB7 上的信号的相位关系。结果表明,在 PB7 翻转之前,报文的内容已全部发出,见图(三): 去掉程序中加入的调试代码,恢复进入 STOP 模式的功能,重新测试。STM32 在进入 STOP 模式之前,发出的最后一个报文是完整的。 结论: 错误使用 USART_FLAG_TXE 作为判断数据在 USART 上发送完成的依据,而导致最后一个字节的数据未及发出即进入了 STOP 模式。 处理: 将 USART_FLAG_TXE 换成 USART_FLAG_TC,作为判定数据在 USART 上发送完的依据。 建议: 在 STM32 状态寄存器 USART_SR 中有两个标志位是和数据发送的完成情况相关的: 1. TXE 发送缓冲区空标志 2. TC 发送完成标志 这两个标志的区别在于:它们分别表示数据在发送过程中,在两个不同的阶段中的完成情况。TXE 表示数据被从发送缓冲区中取走,转移到的移位寄存器中,此时发送缓冲是空的,可以向其中补充新的数据了。而 TC 则表示最后放入发送缓冲区的数据已经完成了从移位寄存器向发送信号线 Tx 上的转移。所以,判定数据最终发送完成的标志是 TC,而不是 TXE。 ` 本帖被以下淘专辑推荐:
|
|
相关推荐
|
|
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
515 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
515 浏览 0 评论
780 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1360 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
572 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11755 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 20:14 , Processed in 0.758993 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号