打印

盆栽助手制作之——基于HAL库的Gokit固件移植

[复制链接]
1707|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 逍遥李 于 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)




相关帖子

沙发
逍遥李|  楼主 | 2016-6-7 19:58 | 只看该作者
有什么疑问,欢迎跟帖讨论……

使用特权

评论回复
板凳
山狼啸月| | 2016-6-24 10:47 | 只看该作者
CobeMX怎么使用

使用特权

评论回复
地板
逍遥李|  楼主 | 2016-6-24 13:00 | 只看该作者

三两句话说不清楚的,论坛很多教程,找个基础的试下就明白了

使用特权

评论回复
5
xz472796| | 2016-11-23 22:42 | 只看该作者
逍遥李 发表于 2016-6-7 19:58
有什么疑问,欢迎跟帖讨论……

您好,请问您这篇“盆栽助手制作系列”的第三部分原理图与实物测试,您完成了吗
抱歉,找了一下似乎没有找到,请教您一下,8266与stm32是怎样连接的呢
谢谢!

使用特权

评论回复
6
逍遥李|  楼主 | 2016-11-24 10:15 | 只看该作者
xz472796 发表于 2016-11-23 22:42
您好,请问您这篇“盆栽助手制作系列”的第三部分原理图与实物测试,您完成了吗
抱歉,找了一下似乎没有 ...

用的串口3,接线交叉连接就可以,地线接一起,

使用特权

评论回复
7
宇容创行| | 2016-11-26 17:10 | 只看该作者
有意思

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1315

帖子

32

粉丝