本帖最后由 逍遥李 于 2016-6-7 19:57 编辑
本部分为盆栽助手制作过程中 第2部分:基于HAL库的Gokit固件移植
HAL库是ST公司近年新推出的一套非常简洁易用的库,本部分基于stm32f103c8t6,使用HAL库实现MCU与机智云WiFi模组的通信,移植的关键部分就在于协议的移植,移植后使用按帧将接收到的数据指令写入到环形缓冲区。
1、项目组成:本项目使用了freertos,一共创建了4个任务,其中GizwitsTask用于机智云指令解析和传感器数据上报,也就是对应原代码里面main函数中while(1){ }里面的代码;
除cubeMX生成的代码外,还应该包含有机智云通信协议代码,放在“Protocol”文件夹下:
2、代码移植
因为使用的是“MCU+WIFI模组”的方式,WiFi模组没有变,代码的移植就是通信协议的移植,在通信协议中主要的部分就是“数据接收”和“数据发送”这两个部分的移植,数据的解析保持不变。
2.1 数据接收代码移植
数据接收就是指把WiFi模组发送的信息存入环形数据缓冲区“RingBuffer”里面,这里移植后使用的是按帧写入缓存,而不是按字节,核心代码在如下:
其中rx_dat是增加的一级缓存,当串口有数据到来时先存入rx_dat[x],x用于记录数据长度,这里事先开启有串口空闲中断,从而实现了按帧处理接收数据,当空闲中断产生时可以认为一帧数据接收完毕,此时判断ringbuf可写区域长度是否大于缓存数据长度,只有当可写区域足够时才将整帧数据写入,从而保证整帧数据的完整。
在usart.c中记得开启空闲中断:
2.2 数据发送代码的移植
这里很简单,只需要把函数“Pro_UART_SendBuf”中对应串口发送的代码替换一下就可以了,但是有一点需要注意的是:不要使用中断方式发送。如下:
至此移植基本结束了,直接编译的话会有很多头文件、变量引用相关错误,把该引用的变量引用一下,头文件包含进去即可,代码如下:
MyFlowerAssV1.9.part01.rar
(4.5 MB)
MyFlowerAssV1.9.part02.rar
(3.07 MB)
|