rt-thread 自制BSP移植

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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值