运用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中加入中断处理函数
在中断处理函数中不停输出打印
- <font size="4">/* USER CODE BEGIN 1 */
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- static uint16_t TIM3_NUM;
- TIM3_NUM++;
- printf("TIM Period run %d times \r\n",TIM3_NUM);
- }
- /* USER CODE END 1 */</font>
在主函数中添加HAL_TIM_Base_Start_IT(&htim3);语句而不是HAL_TIM_Base_Start(&htim3);
二者的区别是一个是中断启动,一个是非中断启动
- <font size="4">/* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- MX_TIM3_Init();
- /* USER CODE BEGIN 2 */
- //HAL_TIM_Base_Start(&htim3);
- HAL_TIM_Base_Start_IT(&htim3);
- printf("the init success !\r\n");
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }</font>
从中可以,
1.在定时器启动的,定时器产生中断,先进入中断,打印输出TIM Period run 1 times
2.再才执行printf("the init success !\r\n");
这里就有个疑问,定时器是每隔1S产生中断,但是一启动就产生一个中断打印输出,这是为什么呢。
等我琢磨下