初级会员

- 积分
- 174
- 金钱
- 174
- 注册时间
- 2018-2-24
- 在线时间
- 44 小时
|
最近在做一个毕业设计级别的项目,对于一个菜鸟来说就是为了学习的。它是下位机采集陀螺仪的角度数据,通过蓝牙模块发送给上位机。然后上位机接收到数据以后,除了显示在LCD上以外,还有对数据进行判断处理,满足条件再执行其它程序。我遇到的问题是上位机通过串口接收到蓝牙的数据后,直接赋值给一个变量,然后对变量进行处理:acc=(uint8_t*)USART3_RX_BUF,这样做发现数据有问题,导致后面的程序无法正常工作,我是知道USART3_RX_BUF是一个数组而非变量的。
百度,以及和朋友讨论发现,下位机通过串口printf打印的数据,其实是ASCII形式的,如图1。像我这样的新手容易直接拿来用,忽略了ASCII和十进制数据之间的转换。论坛内有人提出过这个问题,见贴:http://www.openedv.com/posts/list/33279.htm,但是这样用的前提是数据发送的格式要清楚,然后通过拆分数组USART3_RX_BUF[],对每一位进行数据格式转换再合并为想要的数据。这是必不可少的步骤,串口通信得到的数据是不能直接接收就用的。
我的办法是这样:首先,发送的数据要规范格式,避免接收到的数据小数点左右移动,给LCD显示、数据格式转换带来麻烦。比如要发送的数据有正负,数据在0~几百范围内,那么下位机发送格式最好是:printf("%+06.1f",aa); 这样的数据第一位USART3_RX_BUF[0]一定是符号,USART3_RX_BUF[1]一定对应百位(高位补零),小数点也固定了,下位机接收数据时,就方便处理了。
|
-
1,串口接收数据
|