本博客参考教程:
https://atomgit.com/OpenAtomFoundation/TobudOS/blob/master/doc/TobudOS_EVB_AIoT_STM32_Guide.md
介绍一下EVB_AIoT开发板
这个开发板是由TobudOS开源社区联合意法半导体、南京厚德物联网设计的一款高性能IoT开发平台,主控芯片是STM32H750XBH6。
开发板特性
内置 TobudOS 开源物联网操作系统
意法半导体高性能处理器,最高主频 480M
1M RAM; 256Mbits SDRAM; 128K 片上Flash;64MB qspi flash 128MB spi flash
板载 Type-C 接口 Stlink V2 仿真器
板载 PCIE 接口,可扩展 4G 类物联网模组
板载物联网俱乐部 WAN Interface 接口,可支持 NB-IoT、WiFi、4G cat1、LoRa 等模组
板载物联网俱乐部 E53 Interface 接口,可扩展全系 E53 传感器;
板载标准 24P DVP 摄像头接口,可支持最高 500 万像素摄像头;
板载 RGB 显示接口,可转换 HDMI 输出;
板载高性能音频解码芯片,可做语音识别测试;
预留 SD 卡、用户按键、SPI Flash
调试 ARM Cortex M 核还需要仿真器,EVB_AIoT_STM32自带 Stlink V2 仿真器,如果您的开发板或者芯片模组没有板载仿真器,就需要连接外置的仿真器,如 J-Link、U-Link 之类的。
编译环境的准备
用在Keil上的支持包
下载地址:https://www.keil.arm.com/packs/stm32h7xx_dfp-keil/boards/
准备移植的裸机工程
使用 ST 官方的 STM32CubeMX 软件来自动化生成 MDK 裸机工程
配置一个LED灯跟一个打印的串口
裸机代码:
/* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_TogglePin(USER_LED_GPIO_Port, USER_LED_Pin);HAL_Delay(1000);}
这样 EVB_AIoT_ATM32开发板的裸机工程生成完成,该工程可直接编译并烧写在板子上运行。
移植 TobudOS 的源码
tos_cpu.c 是 TobudOS 的 CPU 适配文件,包括堆栈初始化,中断适配等,如果您的芯片是 ARM Cortex M 核,该文件可以不做改动,M0、M3、M4、M7 是通用的,其他 IP 核需要重新适配;
port_s.S 文件是 TobudOS 的任务调度汇编代码,主要做弹栈压栈等处理的,port_c.c 适配 systick 等,这两个文件 每个 IP 核和编译器都是不一样的,如果您的芯片是 ARM Cortex M 核,我们都已经适配好,比如现在我们移植的芯片是 STM32H750,是 ARM Cortex M7核,使用的编译器是 KEIL,所以我们选择 arch\arm\arm-v7m\cortex-m7\armcc 下的适配代码,如果你的开发板是 STM32F429IG,M4 核,编译器是 GCC,则可以选择 arch\arm\arm-v7m\cortex-m4\gcc 目录下的适配文件。
最终的目的是把需要的C文件添加进去,把需要的依赖头文件路径包含
源文件
头文件包含
如果编译出错 修改config文件 或者就用之前自带的不修改
串口重定向要勾选微库
编写两个测试任务
#define TASK1_STK_SIZE 1024
k_task_t task1;
uint8_t task1_stk[TASK1_STK_SIZE];#define TASK2_STK_SIZE 1024
k_task_t task2;
uint8_t task2_stk[TASK2_STK_SIZE];void task1_entry(void *arg)
{while(1) {printf("TASK1 测试...\r\n");tos_task_delay(2000);}
}void task2_entry(void *arg)
{while(1) {printf("TASK2 初出茅庐的小李...\r\n");HAL_GPIO_TogglePin(USER_LED_GPIO_Port, USER_LED_Pin);tos_task_delay(1000);}
}
编译测试
有个BUG
串口5使用的PB5 PB13 不是PB6
默认生成的是PB6…