初出茅庐的小李博客之TobudOS移植到EVB_AIoT开发板

2023-12-13 05:52:44

本博客参考教程:

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…

文章来源:https://blog.csdn.net/weixin_43176183/article/details/134900058
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。