记录CUBEMX创建STM32工程的疑问

本人很久没有使用CUBEMX创建工程了,更新了CUBEMX6之后,就想着自己重新尝试搭建一个STM32的MDK工程,用于正点原子的阿波罗,实现的功能也十分简单,就是TIM6实现跑马灯和独立看门狗。如图1:
图1 CUBEMX工程设置界面在这里插入图片描述
如上,配置后本来只应该使能对应LED驱动的GPIOB和配置HSE外部晶振输入的GPIOH的RCC时钟,但实际却多出了一行GPIOA的RCC时钟使能代码。如下代码:

 /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();			
  __HAL_RCC_GPIOA_CLK_ENABLE();			//多出的GPIOA的RCC时钟使能函数

然后我就开始怀疑人生了,究竟是哪里需要使能GPIOB呢?
先去查看了芯片的时钟框图,发现GPIOB上挂载的只可能是对应的PB0-15,而我配置的外设中并没有使用到GPIOB的任何一个IO口。
GPIO时钟部分只挂载对应IO口
实在想不到缘由后,尝试重新配置一个对比工程,不配置TIM6、GPIO和IWDG,而新建了工程后发现只初始化了GPIOH,这让我觉得就是因为IWDG和TIM6。

void MX_GPIO_Init(void)
{

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();

}

但是在新的对比工程中配置IWDG和TIM6,还是只有这一行代码,又再次抑郁了。
在朋友提醒下重新看了IO分配表,才发现了端倪。
在这里插入图片描述对应的PA13/PA14/PA15/PB3/PB4是JTAG/SWD仿真接口所用,而我在新的对比工程中并没有使能JTAG调试功能。如下图,处于失能状态。
在这里插入图片描述重新配置后终于舒服了,消失的GPIOA和GPIOB的RCC时钟使能函数又重新回来了。如下图及代码块。
在这里插入图片描述

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();			//B和A口的RCC时钟使能代码重新出现。
  __HAL_RCC_GPIOA_CLK_ENABLE();

通过JTAG下载程序到Flash上之后,系统存储器中的BootLoader会引导程序从flash中加载,启动后,若通过JTAG接口进行调试,则肯定需要使能对应的IO时钟,即上面对应的GPIOA和GPIOB的时钟。回顾最初的工程,因为配置的LED恰好对应GPIOB,以及忘记调试环节,错误认为下载后JTAG就没有必要链接。使得我一次次错过了这个正确答案。写这篇文章也是记录而且提醒一下自己以后不要犯对应的错误。

关于STM32的BootLoader下载,以下转载另一个博主的博文,感觉讲的比较详细易懂。
博主:qq_30479727

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值