简单的想法
想做一个手环,首先先定义一下该手环的功能,然后根据定义的功能去做出来一个或者几个实现方案,然后根据实际情况去选择使用哪一个方案。
作为一个手环,最基本的功能要求如下。
- 看时间
- 可充电使用
上述两点是最基本的需求了,然后现在市面上大多数手环除去上述功能都还有如下功能。
- 闹钟
- 记录运动数据
- 记录睡眠数据
- 心率检测
还有一些特殊功能,比如我很喜欢的小米手环4的NFC功能,屏幕壁纸可由用户自定义等等。
我在此只是为了学习LVGL才去做的一个小东西,所以也不想搞那么复杂,大致打算只做以下几个功能。
- 看时间
- 闹钟
- 简单的运动检测
- 用户通过手机或者按键进行简单的交互
1、硬件框图
根据需求大致定下了如下的硬件框图。
其中,MCU使用的是STM32F411,六轴是ST的LSM6D,蓝牙使用的是PW02模块,FLASH使用的是P25Q32H(USON8_3x2mm).
本来MCU是打算使用L452的,但是立创没有货,且这种UFQFPN48封装的芯片要使用风枪焊接,手边缺少工具,只能换成立创给贴的F411了。
这里面LSM6DS和P25Q32H都是第一次使用,也花费了一些时间去查阅资料。
其中,P25Q32H几乎可以完全套用W25Q128的驱动,只需要注意一下两者容量区别就行。
LSM6DS则移植了ST的官方库,底层自己重写就行(只使用了简单的读取6轴数据)。
还有屏幕,使用卖家提供的驱动程序总是概率性的复位后屏幕点不亮,后来将屏幕的初始化程序替换为UP主开源代码中的初始化程序,解决该问题,原因是卖家提供的F1,F4等DEMO程序中的MCU主频是72或者168,但是我使用的是F411,主频设定在了96M,然后导致SPI的时钟频率有误差。
至此,硬件最基本的驱动方面基本解决掉,没有遇到太大的难题。但是只是最基本的功能,在LSM6DS中还有一些内嵌的功能,比如计步及掉落检测等等。因为这些功能的使用涉及到ST的MEMS库,我还没看过,且现阶段的硬件基本满足使用要求了,毕竟主要目的在于使用LVGL,所以关于这些会预留好接口,写好上层应用逻辑后,再掉头回来处理这些驱动。