模拟无线透传的STM32的24L01无线模块与串口USART通信

模拟无线透传通信方式,PC的com6接USB-24L01模块,PC的com5通过USB电缆接开发板的USART1接口。开发板接24L01模块。

单片机主程序查询无线是否有数据,有则通过串口发送。然后判断32个字节数据接收完成标志,标志有效则进行无线转发。短暂100ms延时后返回循环上述容。

接收32个字节采用接收中断。接收一个字节进入回调函数,进行数据存储,指针调整,数据长度判断和32字节标志设置,最后是开接收中断。

PC端运行2个串口调试助手,分别打开com5,com6.。根据数据协议手动发送无线数据(com6的24L01)或有线数据(com5的USB电缆)。单步运行,现象符合预期。

改成自动定时发送数据,无线发送的接收没有问题,但是有线的串口发送的时候PC的USB无线接收端收不到数据。设置断点后发现没有进入串口中断。

这是什么道理?

以下是网友在openedv论坛的回复。HAL_UART_Receive_IT() 的参数size只能为1吗?-OpenEdv-开源电子网

qq1198228505:就是要等到接受了10个数据之后才会中断,每次中断记得重新设置HAL_UART_Receive_IT,设置为1有个很烦的bug就是数据量大了,必定丢数据

------这样是应该有用的。

jermy_z:HAL库一直在禁止中断开启中断,不丢数据才有鬼

------原来如此,这是HAL库自己折腾自己呢。

wklhwkl:HAL_UART_Receive_IT

------这个要求比较高,动手修改库函数了。

感谢三位的指点,我修改了size,回调函数中再次使能。回调函数中设置断点后,均能看到发送的数据。

故此我在回调函数中设置标志,主程序中设置标志并处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值