STM32的HAL库开发系列 - TIM定时器中断

简介: STM32的HAL库开发系列 - TIM定时器中断

STM32的HAL库开发系列 - TIM定时器中断

NVIC配置

 /**
 * @brief  基本定时器 TIMx,x[6,7]中断优先级配置
 * @param  无
 * @retval 无
 */
 static void TIMx_NVIC_Configuration(void)
 {
     //设置抢占优先级,子优先级
     HAL_NVIC_SetPriority(BASIC_TIM_IRQn, 0, 3);
     // 设置中断来源
     HAL_NVIC_EnableIRQ(BASIC_TIM_IRQn);
 }

实验用到定时器更新中断,需要配置NVIC。

基本定时器模式配置

使用定时器之前都必须开启定时器时钟,基本定时器属于APB1总线外设。

接下来设置定时器周期数为4999,即计数5000次生成事件。设置定时器预分频器为(8400-1),基本定时器使能内部时钟,频率为84MHz,经过预分频器后得到10KHz的频率。然后就是调用TIM_ HAL_TIM_Base_Init函数完成定时器配置。

最后使用HAL_TIM_Base_Start_IT函数开启定时器和更新中断。

 static void TIM_Mode_Config(void)
 {
     // 开启TIMx_CLK,x[6,7]
     BASIC_TIM_CLK_ENABLE();

     TIM_TimeBaseStructure.Instance = BASIC_TIM;
     /* 累计 TIM_Period个后产生一个更新或者中断*/
     //当定时器从0计数到4999,即为5000次,为一个定时周期
     TIM_TimeBaseStructure.Init.Period = 5000-1;
     //定时器时钟源TIMxCLK = 2 * PCLK1
     //        PCLK1 = HCLK / 4
     //        => TIMxCLK=HCLK/2=SystemCoreClock/2=84MHz
     // 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=10000Hz
     TIM_TimeBaseStructure.Init.Prescaler = 8400-1;

     // 初始化定时器TIMx, x[2,3,4,5]
     HAL_TIM_Base_Init(&TIM_TimeBaseStructure);

     // 开启定时器更新中断
     HAL_TIM_Base_Start_IT(&TIM_TimeBaseStructure);
 }

定时器中断服务函数

 void  BASIC_TIM_IRQHandler (void)
 {
     HAL_TIM_IRQHandler(&TIM_TimeBaseStructure);
 }
 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 {
     if (htim==(&TIM_TimeBaseStructure)) {
         LED1_TOGGLE;  //红灯周期闪烁
     }
 }

参考和引用:STM32F4xx参考手册、STM32F4xx规格书、野火开源项目、库帮助文档

目录
相关文章
|
3月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
|
3月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
421 0
|
3月前
|
芯片
stm32f407探索者开发板(十二)——Systick滴答定时器-延时函数讲解
stm32f407探索者开发板(十二)——Systick滴答定时器-延时函数讲解
104 0
|
4月前
|
芯片
【STM32】STM32简述定时器
【STM32】STM32简述定时器
|
3月前
STM32CubeMX 定时器
STM32CubeMX 定时器
75 0
|
3月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
103 0
|
3月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
105 0
|
4月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
252 2
|
5月前
|
传感器
|
4月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
435 4