完善资料让更多小伙伴认识你,还能领取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也应该有一些东西
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1246 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1179 浏览 3 评论
2259 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1345 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1767 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 04:40 , Processed in 0.812317 second(s), Total 90, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号