软件框架
本次项目使用RT_Thread,使用的是Nano,因为RTThread里面的组件太多了,好多东西使用不到,所以简单使用一个Nano+控制台就行。
1、硬件驱动
简单说一下,TIMER对应的是屏幕的背光控制,使用的是TIMER的PWM。
USB是作为代替串口的调试工具,如果使用串口转USB,势必要增加一个芯片,板子空间实在有限,就是用了USB作为调试口。后续作为程序升级的下载口。当然如果只是调试也可以使用Jlink内部的资源配合官方工具调试。
其余的应该都一目了然了。
使用的是cubemx 生产的硬件驱动。
2、功能模块
- COMMUNICATE主要是是蓝牙、六轴、气压计的驱动程序
- USB_DEBUG模块主要是用的是ST官方的ST_USBD_LIB库
- TIMER主要是封装了一些PWM的操作函数
- STROAGE主要是flash的一些驱动函数
- SCREEN使用的LVGL
- KEYBOARD使用的是MultiButton
GUI方面使用的是LVGL,UP主使用的版本号是6.1.2。正点原子的教程教的是6.0.2,我从官方下载的是7.0.0.刚开始移植的时候没注意看,吃了一个小亏。
按键使用了开源的稍微做了一点修改,将长按一直触发加了一个间隔时间。
3、业务逻辑
这一层东西要稍微多一点,将他们分开来一个个的说。
3.1、USB_DEBUG
要使用USB的CDC类作为前期的简单调试工作,就需要将USB的收发替换到RTT的控制台底层实现函数,在RTT官方给的是UART实现的控制台,所以需要自己来实现这些东西。在具体实现中,大致分为了两个任务来做,一收一发。
3.2、PW02
PW02是一个体积很小的蓝牙模块,使用AT协议,UART通信.命令都比较简单,使用了两个任务来做,一发一收。
3.3、SENSOR
传感器目前使用的是软件IIC,还有一些问题,等到大体软件功能做完后,下版将修改为硬件PCB,传感器主要分为两个,六轴和气压计,两个SENSOR分别使用两个任务来 控制,且两个任务互斥。
3.4、STROAGE
存储单独使用一个任务,在没有收到其他任务消息时,该任务处于挂起模式。
3.5、SCREEN
屏幕主要分为两个任务,一个是lvgl官方规定的周期任务lv_task_handler,另外一个是作为接受按键消息的任务,在接受按键消息任务中作出对应消息的动作。
3.6、KEYBOARD
按键任务,和用户交互的任务,根据不同的按键动作发送不同的消息发送给其他任务。
任务间的通信方式基本采用信号量和消息队列。这里的任务对应的是RTT里面的线程概念。