WeAct - STM32H750VB 移植RT-thread
环境准备
RTT 源码获取
Keil 工程
- 正常运行的裸机工程
- 或者可以选择 RTT 源码中的 BSP下已经适配的 工程
参考资料
RT-Thread 文档中心
移植工程搭建
RTT 源码
- RTT源码放置项目合适位置

- 删除仓库的 git文件
- 删除BSP下不需要的,此处保留stm32 ,只保留以下几个文件夹

4.删减libraries 文件,删除多余的HAL文件夹(保留HAL_Drivers/STM32H7xx_HAL
)

5.拷贝BSP下的 demo中的 board文件夹/ rtconfig.h
到自己 keil 工程目录

6.以上步骤完成 rtt 的准备
Keil 工程修改
- 添加RTT 所需.c 文件

2.添加头文件路径

部分文件修改
stm32h7xx_it.c 修改
- 注释所有中断服务函数,RTT
context_rvds.S
该文件中已经完成的中断服务函数的实现,否则会导致重定义,并注释stm32h7xx_it.h 中断服务函数
board.c 修改
- 将裸机工程下的,系统时钟初始化移植到
board.c
中 - 留意是否是运行在程序是否是跑在 外部flash(如果是,则需保证时钟初始化和 boot中的初始化一致)

board.h 修改
#define STM32_FLASH_START_ADRESS ((uint32_t)0x90000000)
#define STM32_FLASH_SIZE (16 * 1024 * 1024)
#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE))
#define STM32_SRAM_SIZE (512)
#define STM32_SRAM_END (0x24000000 + STM32_SRAM_SIZE * 1024)

rtconfig.h 修改
- 空闲任务堆栈大小修改,测试发现默认 256 容易爆栈
#define IDLE_THREAD_STACK_SIZE 1024
- 日志串口默认名,须留意一下,是否是自己想使用的串口号
#define RT_CONSOLE_DEVICE_NAME "uart4"
- 日志串口的使用,留意最后外设的配置宏,自己的工程默认是用的是UART4,则设置对应的 宏
#define BSP_USING_UART
#define BSP_USING_UART4
stm32h7xx_hal_msp.c 修改
- demo 工程只是用了 UART,则修改串口的 初始化即可。
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(huart->Instance==UART4)
{
__HAL_RCC_UART4_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(UART4_IRQn);
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{
if(huart->Instance==UART4)
{
__HAL_RCC_UART4_CLK_DISABLE();
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1);
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0);
HAL_NVIC_DisableIRQ(UART4_IRQn);
}
}
main.c 修改
int main(void)
{
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
while (1)
{
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
编译烧录

注意事项
- 空闲任务堆栈大小 需要调整
- 确认时钟初始化是否是一致(运行在 flash 的时候,留意之)
- 修改设备大内存使用
- stm32h7xx_hal_msp.c 需要实现一些 外设相关的引脚初始化