求解惑:CubeMX和CubeIDE相同配置下生成的初始化时钟函数不同

本文比较了STM32开发中CubeIDE与CubeMX的时钟配置方法,指出CubeIDE使用HSI内部晶振,而CubeMX则通过HSE外部晶振并利用PLL。两者的GPIO操作代码相同,且在Proteus仿真环境中的表现一致。作者还提到将CubeIDE的时钟初始化代码移植到MDK也能得到相同效果。
摘要由CSDN通过智能技术生成

刚开始接触STM32时使用的时CubeIDE,后面由于大多数开发者使用的是CubeMX配合MDK进行开发所以尝试使用后一种方法。

CubeIDE的时钟配置如下:

CubeMX时钟配置如下:

都采用外部高速晶振通过PLL锁相环获得系统时钟。

GPIOB_12都设置为初始高电平、推挽输出、无上下拉电阻、低速。

CubeIDE的时钟初始化代码如下:

而CubeMX生成的初始化代码如下:

可以看到CubeIDE生成的系统时钟初始化代码上采用的是HSI内部晶振而没有PLL锁相环,而CubeMX上则是用HSE外部晶振经过PLL锁相环获得系统时钟。

在两者的main的while循环中均写入如下代码

  while (1)
  {
    /* USER CODE END WHILE */
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
    HAL_Delay(200);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
    HAL_Delay(200);
    /* USER CODE BEGIN 3 */
  }

可以看到改代码仅仅操作GPIOB_12的电平达到一个循环亮灭的过程。

两者的编译均是无错误无警告。

Proteus中先打开CubeIDE上编写的代码然后单步运行

可以看到语句是可以成功运行的。

以下是CubeMX下的MDK添加的代码以及编译结果可以看到0错误0警告(均是全局编译build)

Proteus中在如下位置添加hex文件

长时间GPIO一直保持如下状态

两者的gpio.c均保持一致,故而我将IDE生成的时钟初始化代码复制取代MDK上的后,两者均达到一致的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值