-Lxy
Introduction
第十六届智能车竞赛取消了对K60芯片的使用,大量芯片论斤卖,发挥一下芯片的余热,基于上一次的UART串口通信内容,制作一辆遥控车。
硬件结构
智能车硬件
车上的板子就是实验室流传下来的板子,大致功能就是给电机、芯片供电以及接收UART串口信号实现单片机之间的双向通信。
遥控器硬件
遥控器是自己用洞洞板做的,飞了很多线。芯片用的是K60,供电用的是3.7V锂电池经过稳压芯片稳压后供电。
制作的模型仿照PS手柄,有侧边按键以及遥感,但是是非常的粗制滥造。
摇杆相当于电位器,要求是5V供电,但是单片机ADC信号采集只有3.3V,因此采用3.3V供电即可。另加入无线通信模块即可通过代码来实现单片机之间的通信。
代码部分
发送代码
代码发送很简单,只要调用山外库的uart_putchar函数就可以发送一个字节的数据了,但是一个字节是远远不够用的,因此可以把数据拆分成多个字节进行使用。如果一次发送多个字节的数据,因为发送端单片机是在一直发送,所以接收端就要识别数据的头和尾,因此接受代码就显得尤为重要。
接收代码
接受代码使用的是UART串口中断,因为uart_getchar函数如果没有接收到数据就会处于等待状态,单片机程序就会卡住。放到中断后,有数据到来时才执行这个函数,就不会导致程序的卡死。
众所周知,想要识别真正的数据,数据就要有头和尾。
方案一
一开始我使用了原子哥的STM32中UART串口通信实验的代码,但是接收到的数据效果十分不好,经过计算发现经常丢失一个字节,于是我就换了一种思路。
方案二
我在发送的数据的头部加入了两个八位校验码,也就是符号 {
和符号 【 ,因为如果只有一位,那么符号的ASCII码有可能和数据相同造成干扰,但是两位检验码出错的概率就会变小。当然,也可以找那些在数据范围以外的字符组合作为校验码,这样就会大大减小出错的概率。
注意事项
在实验中还发现OLED显示函数所占用的时间还是很大的,不能放到串口中断中,否则会造成程序的卡死。