STM32
直播中

茶缸子

11年用户 538经验值
私信 关注
[问答]

STM32CubeMX时钟配置过程是怎样的?

STM32CubeMX时钟配置过程是怎样的?

回帖(1)

蔡旻杨

2021-11-24 10:55:05
软件:
(1)STM32CubeMX
(2)SW4STM32
实验平台:STM32F407VET6开发板
  使用STM32CubeMX的一个好处就是图形化配置,在时钟配置方面,主要了解清楚高级外设总线(APB1、APB2)控制哪些外设。
(0)先配置好PA6、PA7(控制LED灯),好观察实验现象





(1)首先配置RCC(复位和时钟控制),选择外部高速始终,如下图





(2)为了测试不同APB的时钟频率效果,在此选择了TIM1和TIM2,按下图配置





(3)为什么选择以上两个定时器作为例子?参考STM32F4XX中文参考手册,找到RCC相关内容,如图










可知TIM1 在APB2,TIM2 在APB1
(4)进入时钟配置,我的STM32F407开发板外部晶振是8MHz的,在Input freequency 输入8,在HCLK 那里会提示最大频率168MHz,输入168,然后自动寻求配置,注意第一次配置出来的还是内部时钟HSI 的,要选择为HSE ,配置好后如下图





顺便提一下,STM32F103的开发板也差不多的,只不过F1的最高时钟频率是72MHz。
(5)配置好后时钟后可以看到APB1 定时器(如TIM2)频率为84MHz,APB2 定时器(如TIM1)频率为168MHz
(6)设置NVIC,TIM1是高级定时器,选择更新中断,TIM2是通用定时器










除了定时器,我自己还设置了两个串口中断,可以不用理会
(7)设置定时器










上面两个定时器设置实现的都是定时1s进入中断处理。

(8)生成SW4STM32工程,打开,在main函数里面while前启动定时器,如下代码


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  HAL_TIM_Base_Start_IT(&htim1);/启动定时器
  HAL_TIM_Base_Start_IT(&htim2);
  while (1)
  {


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */


  }
  /* USER CODE END 3 */


(9)编写定时器中断


/* USER CODE BEGIN 4 */


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        if(htim->Instance == TIM2)        // 判断哪个定时器中断
        {
                HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);        // 翻转灯
        }
        if(htim->Instance == TIM1)        // 判断哪个定时器中断
        {
                HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7);        // 翻转灯
        }


}


/* USER CODE END 4 */
举报

更多回帖

发帖
×
20
完善资料,
赚取积分