1.开发板 STM32F107VC
2.移植rt-thread 根据自己的开发板情况定制BSP
rt-thread版本:4.02 源码获取方式 git 克隆
git clone https://gitee.com/rtthread/rt-thread.git
最基本移植:LED4 -------------------PB0 LED5------------------------------PB1 ,LED低电平被点亮,系统启动后LED4 LED5交叉闪烁。
UART1作为shell串口输出系统调试信息,发送shell命令。 PA9 PA10
STM32F107VC 外置竞争25M 初始化系统时钟72M 内置64K RAM 256k Flash MOC输出50M ----PA8
3.定制自己的BSP
这里写的是自己记录的点,完整过程,请参考rt-thread官方文档
根据自身硬件情况修改CubeMX_Config文件
将生成的MKD工程中的main.c中有关系统时钟部分的代码拷贝到board.c中,替换掉原来的系统时钟初始化函数
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-11-06 SummerGift first version
*/
#include "board.h"
/**
* @brief 系统初始化函数替换,一下的函数来自CubeMX生成的main.c文件中
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON;
RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8;
RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
HAL_RCC_MCOConfig(RCC_MCO, RCC_MCO1SOURCE_PLL3CLK, RCC_MCODIV_1);
/** Configure the Systick interrupt time
*/
__HAL_RCC_HSE_PREDIV2_CONFIG(RCC_HSE_PREDIV2_DIV5);
/** Configure the Systick interrupt time
*/
__HAL_RCC_PLLI2S_CONFIG(RCC_PLLI2S_MUL10);
/** Configure the Systick interrupt time
*/
__HAL_RCC_PLLI2S_ENABLE();
}
修改board.h文件中 关于CPU RAM 和 Flash的定义
修改board目录下的Kconfig文件
修改链接脚本 link.sct
修改 link.icf
修改link.lds
修改scons 中的脚本 Sconscript
修改工程模板
在env环境下输入 menuconfig 保存生成新的rtconfig.h文件
输入 scons --target=mdk5 产生新的 MDK工程
按照自己设置的初始化过程初修改applications下的main.c 即系统初始化完成后的程序入口
/*
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2019-10-23 xingpeng first version
*/
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
/* defined the LED0 pin: PB1 */
#define LED4_PIN GET_PIN(B, 0)
#define LED5_PIN GET_PIN(B, 1)
int main(void)
{
int count = 1;
/* set LED0 pin mode to output */
rt_pin_mode(LED4_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(LED5_PIN, PIN_MODE_OUTPUT);
rt_kprintf("----------欢迎使用 rt-thread STM32F107VC----------\n");
while (count++)
{
rt_pin_write(LED4_PIN, PIN_HIGH);
rt_pin_write(LED5_PIN, PIN_LOW);
rt_thread_mdelay(500);
rt_pin_write(LED4_PIN, PIN_LOW);
rt_pin_write(LED5_PIN, PIN_HIGH);
rt_thread_mdelay(500);
}
return RT_EOK;
}
下载后的现象
4.把自己的文件从rt-thread中脱离出来,即去掉文件中其他用不到的文件夹和库,使自己的工程可任意拷贝
在当前工程下使用 scons -c 清理编译的文件
scons -c
使用pkgs --update再次更新代码
pkgs --update
使用 scons --dist
scons --dist
最后把模板推到了 码云上,有需要的朋友可去下载
https://gitee.com/xingpeng89/stm32f107vc_formwork.git