../ 返回上级目录🔙
基于Zephyr的RTOS移植和SoC升级
背景
我有一款基于STM32F103C8T6的开发版,大概是2015年买的;板上资源如下:
- MCU: STM32F103C8T6 (64KB Flash, 20KB SRAM)
- 8MHz晶振和32.768KHz晶振
- 24C02 I2C EEPROM(256 bytes, 板子的硬件序列号、MAC地址等)
- W5500以太网芯片和25MHz晶振
- DHT11温湿度传感器
- BH1750光照传感器
- 1个用户按键
- 1个复位按键
- 1个用户LED (Blue)和1个电源LED (Red)
- 1个宏发继电器
- 1个JTAG/SWD接口
- 其他接口2.4间距排针(UART1和GPTIO、NRF24L01+的SPI接口等)

当时只是裸跑的厂家程序,板子是一个叫做Hikit的小公司设计的(型号为SC1,现在这个公司已经倒闭了),然后就没再管它了。最近想起这个板子,就想把它刷成Zephyr RTOS,顺便也升级一下SoC。
由于原来的固件是基于STD库的,不太利于RTOS的移植,此外,STM32F103C8T6的Flash只有64KB,运行Zephyr RTOS有点吃力,所以我决定把SoC换成STM32L562CEU6, 该SoC引脚封装和STM32F103C8T6基本一致,Flash有512KB,并且具有256KB的SRAM,运行Zephyr RTOS富足很多。
步骤
从淘宝上采购了两片MCU,别问为啥只有两片,因为太TM贵了(65软妹币一片😑)
- 焊接,忘记拍照了(略),用风枪先把103吹下来,补点锡膏和助焊剂再把旧的焊上去。
- 拉取最新的Zephyr repository到本地,新建一个Zephyr的App。
- 根据图纸修改Zephyr的DT文件,该文件在位于新建的App目录下和CMake那些放一块(Device Tree),主要是以下配置:
- 根节点为SoC型号,这会将SoC相关的头文件和库包含进去
- RCC初始化代码,这里需要声系统时钟源,HSI/HSE以及频率和PLL配置
- Serial console log初始化,HSART1初始化配置,代码中log函数的输出可以打印到串口,方便调试需要。
- LED、按键、继电器、DHT11初始化
- RTC初始化。
- I2C初始化,需要在I2C的节点下再声明设备节点,比如I2C1总线上挂了24C02就需要将该型号加入I2C1节点下;另外将BH1750挂在I2C2下。
- SPI和W5500初始化
- 修改内核配置,因为要执行多个thread,需要修改栈大小。
更新中。。。