https://blog.csdn.net/xiaolong11 ... e/details/116707684 可以看看这个 我觉得遇到问题你一个一个排除,,先看看硬件的连接和蓝牙模块是否有问题,, 再去看你的程序,,我觉得问题在于你的程序。。 |
会不会是串口1时钟频率太高,单片机接收补刀手机发来的数据,有没有这种可能? |
shumivan 发表于 2021-7-16 17:11 蓝牙的校验位这些设置是默认出厂设置,代码的是8位数据位,1位停止位,均无误 |
1105730718 发表于 2021-7-16 14:20 非常感谢大佬回复,对于你的疑问,我解释一下: (1)代码项目是手机app发送一个字符,单片机返回给手机该字符 (2)这个代码是用洋桃电子的例程修改的,在我不连接蓝牙模块时,单片机是可以在串口助手上返回数据,乱码是发生在连接蓝牙后。。。 (3)蓝牙和单片机的rx,tx交叉连接,应该没问题 (4)蓝牙模块要求5V供电,单片机是连接数据线供电 (5)经过多天的调试,发现在有些时候,蓝牙和单片机可以正常传输数据;但在大部分时候是乱码 |
1.首先你的串口不只是有比特率,还有校验位,停止位,都确定无误; |
大概看了下,提出几个疑问: 1,这个代码项目是要用单片机做桥梁,实现串口助手和手机蓝牙助手的通信吗? 2,如果要实现双向通信,蓝牙模块和电脑串口助手得各自分别占用一个串口,我看你代码只开了串口1,只能是单向通信:即PA9接蓝牙PA10接USB-TTL,实现电脑发,单片机收,并转发给蓝牙模块(也就是转发给手机);二是反过来接,传输方向相反。 3,串口中断服务函数中没进行中断标志位的清除,会造成程序死在中断。 结论:你的(2)图电脑发送a之后,进入中断并且无法退出,则不停执行printf(“%c”,receivedata);所以a之后会有乱码, 那是接收寄存器里的随机数据。至于蓝牙发送后电脑收到????,大概率是接线错误,收到了非显示字符,串口软件自动填充成了?。 如果数据线都接的正常, 建议检查下供电。单片机3.3还真不一定行。 |
适得府君书 发表于 2021-7-16 08:56 单片机程序波特率为4800,蓝牙我用USB-TTL测试后,也是4800 |
devcang 发表于 2021-7-16 09:55 手机端。。可以设置波特率吗? |
蓝牙模块,本身要设置波特率的。 四者的波特率,都要对应的 手机端 ------ 蓝牙模块 ----- 单片机 -------- 电脑端 |
蓝牙和单片机都是串口通讯的话没啥时序对不对的问题。只有波特率对不对。串口通讯出现乱码很大可能是波特率不对。蓝牙模块的波特率。单片机的波特率。 |