完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
有人可以解释为什么我只能收到带有USART中断的13个字符吗?我使用' n'来检测字符串的结尾。
|
|
相关推荐
9个回答
|
|
|
如果您在没有CR或较小的块的情况下发送它会发生什么?
|
|
|
|
|
|
你说你检查n但是你的代码正在检查r哪个是13并且你只处理13个字节,但是为什么strlen给出超过13个并且用它们发送一些0x00字节(<0>) - 你得到的消息是传输消息的长度,只是最后3个字节的内容是错误的。
|
|
|
|
|
|
如果我发送较小的块(少于14),一切正常。如果我发送没有CR,它根本不会出现。
|
|
|
|
|
|
我的意思是,如果你发送12345678然后发送12345678 + CR会出现什么。
|
|
|
|
|
|
我发现了问题。在void USART2_receive(void const * argument)函数中,我将延迟从50增加到100,然后一切正常。正如@MITURAJ所提到的,这可能是由缓冲区溢出引起的。
|
|
|
|
|
|
延迟的目的是什么,为什么增加它会解决问题?
|
|
|
|
|
|
发现你需要更长的延迟应该让你知道你没有等待Tx实际完成。HAL_UART_Transmit_IT使用中断发送字节(它是非阻塞的)。你基本上是在传输完成之前告诉它传输,等待一点,然后再将数据塞进缓冲区!
相反,我建议你监视回调到HAL_UART_TxCpltCallback,一旦发生这种情况就设置一些标志。在USART2_receive函数中,在要求它再次发送之前等待标志设置。记得在等待它再次设置之前清除标志 |
|
|
|
|
|
谢谢您的详细解释,因为我是初级开发人员,所以我们应该实施这些更改。也许有任何我可以遵循此功能的例子?
|
|
|
|
|
|
非常简单,就像HAL_UART_RxCpltCallback函数一样。CubeMx可能会为您生成TxCpltCallback函数,您只需填写它即可。看一下STM32示例,非阻塞UART也应该有一些东西
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 12:53 , Processed in 0.569347 second(s), Total 56, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
436