微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 运用STM32cubeMX配置基本定时器,启动会遇到的疑点

运用STM32cubeMX配置基本定时器,启动会遇到的疑点

时间:10-02 整理:3721RD 点击:

基本定时器功能是单片机基本功能,可以运用定时器完成很多功能,且精度高。
大家对 STM32CubeMX 配置已经非常熟悉 ,在TIM3中 Pinout->TIM3 配置项中,配置 Clock Source 为 Internal Clock,如下图所示:


Parameter Settings 选项卡中 Counter Settings配置栏下面的四个选项就是用来配置定时器的
预分频系数,自动装载值,计数模式,时钟分频因子
预分频系数位10800 -1
计数次数 10000-1


点击 NVIC 选项卡
配置 Interrupt中的 TIM3 global interrupt,使能中断,配置抢占优先级为3 和响应优先级为 0。  



生成工程
在生成的tim.h中加入中断处理函数
在中断处理函数中不停输出打印

  1. <font size="4">/* USER CODE BEGIN 1 */
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  3. {
  4. static uint16_t TIM3_NUM;
  5. TIM3_NUM++;
  6. printf("TIM Period run %d times \r\n",TIM3_NUM);
  7. }

  8. /* USER CODE END 1 */</font>

复制代码


在主函数中添加HAL_TIM_Base_Start_IT(&htim3);语句而不是HAL_TIM_Base_Start(&htim3);
二者的区别是一个是中断启动,一个是非中断启动

  1. <font size="4">/* Initialize all configured peripherals */
  2. MX_GPIO_Init();
  3. MX_USART1_UART_Init();
  4. MX_TIM3_Init();

  5. /* USER CODE BEGIN 2 */
  6. //HAL_TIM_Base_Start(&htim3);
  7. HAL_TIM_Base_Start_IT(&htim3);

  8. printf("the init success !\r\n");
  9. /* USER CODE END 2 */

  10. /* Infinite loop */
  11. /* USER CODE BEGIN WHILE */
  12. while (1)
  13. {
  14. /* USER CODE END WHILE */

  15. /* USER CODE BEGIN 3 */

  16. }</font>

复制代码

烧录进入板卡中,出现以下问题:
从中可以,
1.在定时器启动的,定时器产生中断,先进入中断,打印输出TIM Period run 1 times
2.再才执行printf("the init success !\r\n");

这里就有个疑问,定时器是每隔1S产生中断,但是一启动就产生一个中断打印输出,这是为什么呢。
等我琢磨下



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top