Mbed在自己的stm32系列平台移植适配(三)

本文详细介绍了如何将Mbed OS移植到STM32F103RC开发板上,包括适配芯片、晶振频率、分散文件sct、启动文件、pinname、peripheralname、peripheralpin、串口初始化和编译选项的调整。通过修改相关配置和源代码,使得Mbed OS能顺利运行在STM32F103RC平台上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mbed在自己的stm32系列平台移植适配

适配平台:
cpu:STM32F103RCT6
外设:

peripheral pin disciption
LED1 PC_0
LED2 PC_6
UART5_TX PC_12 no remap
UART5_RX PD_2 no remap

引用资源:
mbed在线编译器
Mbed源码仓库
Stm32f1官方hal库

三、适配开发板

1适配芯片

首先将芯片修改为stm32f103RC

然后从st官网的hal库中拷贝其他芯片的头文件和启动文件过来,
同时mbed工程中的sct文件只有stm32f103xb.sct,我们复制一分然后重命名为stm32f103xe.sct。
修改stm32f1xx.h文件,注释掉#define STM32F103xB,取消注释#define STM32F103xE。

#if !defined (STM32F100xB) && !defined (STM32F100xE) && !defined (STM32F101x6) && \
    !defined (STM32F101xB) && !defined (STM32F101xE) && !defined (STM32F101xG) && !defined    (STM32F102x6) && !defined (STM32F102xB) && !defined (STM32F103x6) && \
    !defined (STM32F103xB) && !defined (STM32F103xE) && !defined (STM32F103xG) && !defined (STM32F105xC) && !defined (STM32F107xC)
  /* #define STM32F100xB */   /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */
  /* #define STM32F100xE */   /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */
  /* #define STM32F101x6 */   /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */
  /* #define STM32F101xB */   /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */
  /* #define STM32F101xE */   /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */ 
  /* #define STM32F101xG */   /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */
  /* #define STM32F102x6 */   /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */
  /* #define STM32F102xB */   /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */
  /* #define STM32F103x6 */   /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */
/* #define STM32F103xB */   /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */
   #define STM32F103xE    /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */
  /* #define STM32F103xG */   /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */
  /* #define STM32F105xC */   /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */
  /* #define STM32F107xC*/    /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */  
#endif

好了,芯片的匹配工作完成,注意由于原本工程中的启动文件是用的startup_stm32f103xb.S,需要修改成startup_stm32f103xe.S

同时sct文件路径也要指定为stm32f103xe.sct

2适配晶振频率(如果不需要修改的可以跳过该步骤)

因为默认的开发板使用的是8MHz晶振,而我用的是12MHz,所以需要做晶振频率的修改。
修改文件system_stm32f1xx.c(注意mbed中的该文件内部集成了时钟初始化,而官方自带的hal中该文件没有进行时钟的初始化)
我们先来对比一下system_stm32f1xx.c文件的SystemInit函数
这是mbed的自带的

    void SystemInit (void)
    {
      /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
      /* Set HSION bit */
      RCC->CR |= (uint32_t)0x00000001;

      /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
    #if !defined(STM32F105xC) && !defined(STM32F107xC)
      RCC->CFGR &= (uint32_t)0xF8FF0000;
    #else
      RCC->CFGR &= (uint32_t)0xF0FF0000;
    #endif /* STM32F105xC */   

      /* Reset HSEON, CSSON and PLLON bits */
      RCC->CR &= (uint32_t)0xFEF6FFFF;

      /* Reset HSEBYP bit */
      RCC->CR &= (uint32_t)0xFFFBFFFF;

      /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
      RCC->CFGR &= (uint32_t)0xFF80FFFF;

    #if defined(STM32F105xC) || defined(STM32F107xC)
      /* Reset PLL2ON and PLL3ON bits */
      RCC->CR &= (uint32_t)0xEBFFFFFF;

      /* Disable all interrupts and clear pending bits  */
      RCC->CIR = 0x00FF0000;

      /* Reset CFGR2 register */
      RCC->CFGR2 = 0x00000000;
    #elif defined(STM32F100xB) || defined(STM32F100xE)
      /* Disable all interrupts and clear pending bits  */
      RCC->CIR = 0x009F0000;

      /* Reset CFGR2 register */
      RCC->CFGR2 = 0x00000000;      
    #else
      /* Disable all interrupts and clear pending bits  */
      RCC->CIR = 0x009F0000;
    #endif /* STM32F105xC */

    #if defined(STM32F100xE) || defined(STM32F
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值