本博客參考教程:
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…