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

本博客参考教程:

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…

相关推荐

最近更新

  1. SQL Server设置端口:跨平台指南

    2023-12-10 05:38:02       0 阅读
  2. 指定版本ceph-common安装

    2023-12-10 05:38:02       0 阅读
  3. 中科海讯 C++初级研发工程师笔试题目

    2023-12-10 05:38:02       0 阅读
  4. vue3的常用 Composition API有哪些?

    2023-12-10 05:38:02       1 阅读
  5. Linux系统基础命令行指令——Ubuntu

    2023-12-10 05:38:02       0 阅读
  6. 【Android高级UI】计算不规则图形面积

    2023-12-10 05:38:02       0 阅读
  7. Python库 - PyMC3

    2023-12-10 05:38:02       0 阅读
  8. C语言中关键字

    2023-12-10 05:38:02       0 阅读
  9. ios CCPlistFileWritter.m

    2023-12-10 05:38:02       0 阅读
  10. C#实现Winform程序右下角弹窗消息提示

    2023-12-10 05:38:02       0 阅读

热门阅读

  1. 在 MySQL 中创建用户和分配权限

    2023-12-10 05:38:02       37 阅读
  2. 力扣:197. 上升的温度(Python3)

    2023-12-10 05:38:02       40 阅读
  3. 网络规划的组成

    2023-12-10 05:38:02       29 阅读
  4. [LeetCode] 15. 三数之和

    2023-12-10 05:38:02       43 阅读
  5. 如何安装和使用three.js

    2023-12-10 05:38:02       32 阅读
  6. Git:版本控制的艺术与实践

    2023-12-10 05:38:02       42 阅读
  7. RUST博客帖子编辑示例

    2023-12-10 05:38:02       33 阅读
  8. MySQL库与表的备份

    2023-12-10 05:38:02       43 阅读
  9. HJ94 记票统计

    2023-12-10 05:38:02       44 阅读
  10. nvue页面用法uniapp

    2023-12-10 05:38:02       44 阅读
  11. Qt OpenCV 学习(文章链接汇总)

    2023-12-10 05:38:02       48 阅读
  12. 谈一谈Linux下的进程和线程

    2023-12-10 05:38:02       43 阅读