刚开始接触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上的后,两者均达到一致的效果。