STM32共有16个定时器,定时器分类:2个高级控制定时器、
10个通用定时器、
2个基本定时器、
2个看门狗定时器、
定时器特性:

最大定时器时钟配置专用定时器:RCC_DCKCFGR ----->>>>RCC dedicated clock configuration register
TIMPRE位:主要用于定时器预分频选择,个人认为这称作为倍频选择更合适。TIMxCLK = ? xPCLKx。
重装载定时器:TIMx_ARR,存储内容为要装载到实际重装载寄存器的值。
计数寄存器:TIMx_CNT,当前计数值
基本定时器框图:

方框中的阴影部分为影子寄存器:既有两个定时器。
基本定时器主要注意:
1、时钟源 ,RCC_DCKCFGR 控制
2、控制器 ,
3、计数器 , 计数器寄存器(TIMx_CNT) 、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),
4、定时器周期计算
标准库初始化结构体:
TIM_TimeBaseInitTypeDef
TIM_TimeBaseInit
入门实验,使用定时器产生0.5秒的中断,使LED实现亮灭反转循环,
宏定义
#ifndef __BSP_BASIC_TIME_H
#define __BSP_BASIC_TIME_H
#include 'stm32f4xx.h'
// 定时器源选择
#define BASIC_TIM TIM6
#define BASIC_TIM_CLK RCC_APB1Periph_TIM6
//中断
#define BASIC_TIM_IRQn TIM6_DAC_IRQn
#define BASIC_TIM_IRQHandler TIM6_DAC_IRQHandler
void TIMx_Configuration();
#endif //__BSP_BASIC_TIME_H
中断配置,基本定时器模式配置
#include './tim/bsp_basic_time.h'
/*
编程要点:
初始化 RGB 灯的 GPIO
开启基本定时器时钟
设置定时器周期和预分频器
启动定时器更新中断,并开启定时器
定时器中断服务函数实现 RGB 灯的反转
*/
// 中断函数
static void TIMx_NVIC_Configuretion()
{
NVIC_InitTypeDef NVIC_InitStructure;
//设置中断组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
//设置中断来源
NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//设置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_Init(&NVIC_InitStructure);
}
//定时器基本模式设置
static void TIM_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 开启 TIM_CLK ,X(6,7)
RCC_APB1PeriphClockCmd(BASIC_TIM_CLK,ENABLE);
// 累计 TIM_Period 个后产生新的中断或者更新
// 当定时器从0计数到4999,即为5000次,为一个定时周期
TIM_TimeBaseStructure.TIM_Period = 5000-1;
// 设置定时频率
TIM_TimeBaseStructure.TIM_Prescaler = 9000-1;
// 初始化定时器
TIM_TimeBaseInit(BASIC_TIM,&TIM_TimeBaseStructure );
// 清除定时器更新中断标志位
TIM_ClearFlag(BASIC_TIM,TIM_FLAG_Update);
//开启定时器更新中断
TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);
// 定时器使能
TIM_Cmd(BASIC_TIM,ENABLE);
}
void TIMx_Configuration()
{
TIMx_NVIC_Configuretion();
TIM_Mode_Config();
}
主函数调用
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
/*初始化按键*/
Key_GPIO_Config();
TIMx_Configuration();
/* 轮询按键状态,若按键按下则反转LED */
while(1)
{
}
}
中断函数
void BASIC_TIM_IRQHandler(void)
{
if( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET )
{
LED1_TOGGLE;
TIM_ClearITPendingBit(BASIC_TIM , TIM_IT_Update);
}
}
主要引用的函数:TIM_ClearFlag 影响TIMx_SR 寄存器的 UIF 位
TIM_ITConfig 在发生上溢时产生中断。
TIM_ClearITPendingBit 清除中断标志位
上一篇:ucosiii笔记01
下一篇:stm32 嵌入式开发 中三重ADC交替模式采集数据总结
推荐阅读最新更新时间:2026-03-25 11:54
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用

stm32驱动屏IC rm68042
STM32 PMSM FOC 简介
基于STM32G031的测试测量训练平台完成虚拟仪器实现
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号