资讯动态

STM32_TIM_寄存器操作

发布时间:2026/8/14 8:38:14 来源:尧图企业网站定制
文章目录一、通用TIMx (TIM2、TIM3、TIM4和TIM5)寄存器1、控制寄存器 1(TIMx_CR1)2、控制寄存器 2(TIMx_CR2)3、从模式控制寄存器(TIMx_SMCR)4、DMA/中断使能寄存器(TIMx_DIER)5、状态寄存器(TIMx_SR)6、事件产生寄存器(TIMx_EGR)7、捕获/比较模式寄存器 1(TIMx_CCMR1)8、捕获/比较模式寄存器 2(TIMx_CCMR2)9、捕获/比较使能寄存器(TIMx_CCER)10、计数器(TIMx_CNT)11、预分频器(TIMx_PSC)12、自动重装载寄存器(TIMx_ARR)13、捕获/比较寄存器 1(TIMx_CCR1)14、捕获/比较寄存器 2(TIMx_CCR2)15、捕获/比较寄存器 3(TIMx_CCR3)16、捕获/比较寄存器 4(TIMx_CCR4)17、DMA控制寄存器(TIMx_DCR)18、连续模式的DMA地址(TIMx_DMAR)19、TIMx寄存器图二、基本TIM6和TIM7寄存器1、TIM6 和TIM7 控制寄存器 1(TIMx_CR1)2、TIM6 和TIM7 控制寄存器 2(TIMx_CR2)3、TIM6 和TIM7 DMA/中断使能寄存器(TIMx_DIER)4、TIM6 和TIM7 状态寄存器(TIMx_SR)5、TIM6 和TIM7 事件产生寄存器(TIMx_EGR)6、TIM6 和TIM7 计数器(TIMx_CNT)7、TIM6 和TIM7 预分频器(TIMx_PSC)8、TIM6 和TIM7 自动重装载寄存器(TIMx_ARR)9、TIM6 和TIM7 寄存器图三、高级TIM1 和TIM8寄存器1、TIM1 和TIM8 控制寄存器 1(TIMx_CR1)2、TIM1 和TIM8 控制寄存器 2(TIMx_CR2)3、TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR)4、TIM1 和TIM8 DMA/中断使能寄存器(TIMx_DIER)5、TIM1 和TIM8 状态寄存器(TIMx_SR)6、TIM1 和TIM8 事件产生寄存器(TIMx_EGR)7、TIM1 和TIM8 捕获/比较模式寄存器 1(TIMx_CCMR1)8、TIM1 和TIM8 捕获/比较模式寄存器 2(TIMx_CCMR2)9、TIM1 和TIM8 捕获/比较使能寄存器(TIMx_CCER)10、 TIM1 和TIM8 计数器(TIMx_CNT)11、TIM1 和TIM8 预分频器(TIMx_PSC)12、TIM1 和TIM8 自动重装载寄存器(TIMx_ARR)13、TIM1 和TIM8 重复计数寄存器(TIMx_RCR)14、TIM1 和TIM8 捕获/比较寄存器 1(TIMx_CCR1)15、TIM1 和TIM8 捕获/比较寄存器 2(TIMx_CCR2)16、TIM1 和TIM8 捕获/比较寄存器 3(TIMx_CCR3)17、TIM1 和TIM8 捕获/比较寄存器(TIMx_CCR4)18、TIM1 和TIM8 刹车和死区寄存器(TIMx_BDTR)19、TIM1 和TIM8 DMA控制寄存器(TIMx_DCR)20、 TIM1 和TIM8 连续模式的DMA地址(TIMx_DMAR)21、TIM1 和TIM8 寄存器图四、实例代码1、基本定时器TIM6定时中断1s2、通用定时器TIM3PWM 输出PA71kHz占空比可调3、通用定时器TIM4输入捕获PB6测量脉冲频率4、高级定时器TIM1互补 PWM 输出PA8/PA9带死区五、总结1、定时器寄存器编程核心流程2、时钟适配3、中断通道号4、PWM 关键配置一、通用TIMx (TIM2、TIM3、TIM4和TIM5)寄存器1、控制寄存器 1(TIMx_CR1)偏移地址0x00复位值0x00002、控制寄存器 2(TIMx_CR2)偏移地址0x04复位值0x00003、从模式控制寄存器(TIMx_SMCR)偏移地址0x08复位值0x00004、DMA/中断使能寄存器(TIMx_DIER)偏移地址0x0C复位值0x00005、状态寄存器(TIMx_SR)偏移地址0x10复位值0x00006、事件产生寄存器(TIMx_EGR)偏移地址:0x14复位值:0x00007、捕获/比较模式寄存器 1(TIMx_CCMR1)偏移地址0x18复位值0x0000通道可用于输入(捕获模式)或输出(比较模式)通道的方向由相应的CCxS定义。该寄存器其它位的作用在输入和输出模式下不同。OCxx描述了通道在输出模式下的功能ICxx描述了通道在输出模式下的功能。因此必须注意同一个位在输出模式和输入模式下的功能是不同的。8、捕获/比较模式寄存器 2(TIMx_CCMR2)偏移地址0x1C复位值0x00009、捕获/比较使能寄存器(TIMx_CCER)偏移地址0x20复位值0x000010、计数器(TIMx_CNT)偏移地址0x24复位值0x000011、预分频器(TIMx_PSC)偏移地址0x28复位值0x000012、自动重装载寄存器(TIMx_ARR)偏移地址:0x2C复位值:0x000013、捕获/比较寄存器 1(TIMx_CCR1)偏移地址0x34复位值0x000014、捕获/比较寄存器 2(TIMx_CCR2)偏移地址0x38复位值0x000015、捕获/比较寄存器 3(TIMx_CCR3)偏移地址0x3C复位值0x000016、捕获/比较寄存器 4(TIMx_CCR4)偏移地址0x40复位值0x000017、DMA控制寄存器(TIMx_DCR)偏移地址0x48复位值0x000018、连续模式的DMA地址(TIMx_DMAR)偏移地址0x4C复位值0x000019、TIMx寄存器图下表中将TIMx的所有寄存器映射到一个16位可寻址(编址)空间。二、基本TIM6和TIM7寄存器1、TIM6 和TIM7 控制寄存器 1(TIMx_CR1)偏移地址0x00复位值0x00002、TIM6 和TIM7 控制寄存器 2(TIMx_CR2)偏移地址0x04复位值0x00003、TIM6 和TIM7 DMA/中断使能寄存器(TIMx_DIER)偏移地址0x0C复位值0x00004、TIM6 和TIM7 状态寄存器(TIMx_SR)偏移地址0x10复位值0x00005、TIM6 和TIM7 事件产生寄存器(TIMx_EGR)偏移地址0x14复位值0x00006、TIM6 和TIM7 计数器(TIMx_CNT)偏移地址0x24复位值0x00007、TIM6 和TIM7 预分频器(TIMx_PSC)偏移地址0x28复位值0x00008、TIM6 和TIM7 自动重装载寄存器(TIMx_ARR)偏移地址0x2C复位值0x00009、TIM6 和TIM7 寄存器图下表中将TIMx的所有寄存器映射到一个16位可寻址(编址)空间三、高级TIM1 和TIM8寄存器1、TIM1 和TIM8 控制寄存器 1(TIMx_CR1)偏移地址0x00复位值0x00002、TIM1 和TIM8 控制寄存器 2(TIMx_CR2)偏移地址0x04复位值0x00003、TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR)偏移地址0x08复位值0x00004、TIM1 和TIM8 DMA/中断使能寄存器(TIMx_DIER)偏移地址0x0C复位值0x00005、TIM1 和TIM8 状态寄存器(TIMx_SR)偏移地址0x10复位值0x00006、TIM1 和TIM8 事件产生寄存器(TIMx_EGR)偏移地址:0x14复位值:0x00007、TIM1 和TIM8 捕获/比较模式寄存器 1(TIMx_CCMR1)偏移地址0x18复位值0x0000通道可用于输入(捕获模式)或输出(比较模式)通道的方向由相应的CCxS位定义。该寄存器其它位的作用在输入和输出模式下不同。OCxx描述了通道在输出模式下的功能ICxx描述了通道在输入模式下的功能。因此必须注意同一个位在输出模式和输入模式下的功能是不同的。8、TIM1 和TIM8 捕获/比较模式寄存器 2(TIMx_CCMR2)偏移地址0x1C复位值0x00009、TIM1 和TIM8 捕获/比较使能寄存器(TIMx_CCER)偏移地址0x20复位值0x000010、 TIM1 和TIM8 计数器(TIMx_CNT)偏移地址0x24复位值0x000011、TIM1 和TIM8 预分频器(TIMx_PSC)偏移地址0x28复位值0x000012、TIM1 和TIM8 自动重装载寄存器(TIMx_ARR)偏移地址:0x2C 复位值:0x000013、TIM1 和TIM8 重复计数寄存器(TIMx_RCR)偏移地址0x30复位值0x000014、TIM1 和TIM8 捕获/比较寄存器 1(TIMx_CCR1)偏移地址0x34复位值0x000015、TIM1 和TIM8 捕获/比较寄存器 2(TIMx_CCR2)偏移地址0x38复位值0x000016、TIM1 和TIM8 捕获/比较寄存器 3(TIMx_CCR3)偏移地址0x3C复位值0x000017、TIM1 和TIM8 捕获/比较寄存器(TIMx_CCR4)偏移地址0x40复位值0x000018、TIM1 和TIM8 刹车和死区寄存器(TIMx_BDTR)偏移地址0x44复位值0x000019、TIM1 和TIM8 DMA控制寄存器(TIMx_DCR)偏移地址0x48复位值0x000020、 TIM1 和TIM8 连续模式的DMA地址(TIMx_DMAR)偏移地址0x4C复位值0x000021、TIM1 和TIM8 寄存器图下表中将TIM1和TIM8的所有寄存器映射到一个16位可寻址(编址)空间。四、实例代码1、基本定时器TIM6定时中断1sTIM6 无 IO、仅支持定时中断适合基础延时 / 系统节拍。#includestm32f10x.h// 全局变量1s中断计数uint8_tTIM6_Count0;/** * brief GPIO初始化PC13 LED输出 */voidGPIO_Init_TIM6(void){RCC-APB2ENR|RCC_APB2ENR_IOPCEN;GPIOC-CRH~(GPIO_CRH_MODE13|GPIO_CRH_CNF13);GPIOC-CRH|GPIO_CRH_MODE13_0;GPIOC-ODR|GPIO_ODR_ODR13;// 初始熄灭}/** * brief TIM6 1s定时中断初始化 * 计算72MHz / (PSC1) / (ARR1) 1Hz → PSC7199, ARR9999 */voidTIM6_IRQ_Init(void){// 1. 开启TIM6时钟APB1RCC-APB1ENR|RCC_APB1ENR_TIM6EN;// 2. 关闭定时器清空配置TIM6-CR1~TIM_CR1_CEN;TIM6-SR~TIM_SR_UIF;// 清除更新标志// 3. 配置预分频器和自动重装值TIM6-PSC7199;// 预分频7200-1 → 72MHz/720010kHzTIM6-ARR9999;// 自动重装10000-1 → 10kHz/100001Hz1sTIM6-EGR|TIM_EGR_UG;// 强制更新参数// 4. 开启更新中断TIM6-DIER|TIM_DIER_UIE;// 5. 配置NVICTIM6对应54号中断通道SCB-AIRCR0x05FA0800;// 优先级分组2NVIC-IP[54]~0xFF;// 清空优先级NVIC-IP[54]|0x20;// 抢占优先级2子优先级0NVIC-ISER[1]|(122);// 543222 → ISER1的bit22置1// 6. 开启TIM6TIM6-CR1|TIM_CR1_CEN;}/** * brief TIM6中断服务函数 */voidTIM6_IRQHandler(void){if(TIM6-SRTIM_SR_UIF){TIM6_Count;if(TIM6_Count1)// 1s到{GPIOC-ODR^GPIO_ODR_ODR13;// 翻转LEDTIM6_Count0;}TIM6-SR~TIM_SR_UIF;// 清除标志}}// 主函数intmain(void){GPIO_Init_TIM6();TIM6_IRQ_Init();while(1);}2、通用定时器TIM3PWM 输出PA71kHz占空比可调TIM3_CH2PA7输出 1kHz PWM可动态调整占空比如控制 LED 亮度。#includestm32f10x.h/** * brief GPIO初始化PA7TIM3_CH2复用推挽输出 */voidGPIO_Init_PWM(void){RCC-APB2ENR|RCC_APB2ENR_IOPAEN|RCC_APB2ENR_AFIOEN;// PA7复用推挽输出10MHzGPIOA-CRL~(GPIO_CRL_MODE7|GPIO_CRL_CNF7);GPIOA-CRL|GPIO_CRL_MODE7_0|GPIO_CRL_CNF7_1;}/** * brief TIM3 PWM初始化1kHz初始占空比50% * 计算72MHz / (711) / (9991) 1kHz */voidTIM3_PWM_Init(void){// 1. 开启TIM3时钟RCC-APB1ENR|RCC_APB1ENR_TIM3EN;// 2. 关闭定时器清空配置TIM3-CR1~TIM_CR1_CEN;// 3. 配置CH2为PWM模式1预装载使能TIM3-CCMR1~TIM_CCMR1_OC2M;// 清空CH2模式位TIM3-CCMR1|TIM_CCMR1_OC2M_1|TIM_CCMR1_OC2M_2;// PWM模式1TIM3-CCMR1|TIM_CCMR1_OC2PE;// CH2预装载使能// 4. 配置输出极性高电平有效开启CH2输出TIM3-CCER~TIM_CCER_CC2P;TIM3-CCER|TIM_CCER_CC2E;// 5. 配置分频、重装值、比较值50%占空比TIM3-PSC71;// 72MHz/721MHzTIM3-ARR999;// 1MHz/10001kHzTIM3-CCR2500;// 占空比500/100050%// 6. 开启自动重装预装载强制更新TIM3-CR1|TIM_CR1_ARPE;TIM3-EGR|TIM_EGR_UG;// 7. 开启TIM3TIM3-CR1|TIM_CR1_CEN;}/** * brief 动态修改PWM占空比 * param duty占空比0~1000对应0~100% */voidTIM3_Set_PWM_Duty(uint16_tduty){if(duty1000)duty1000;TIM3-CCR2duty;}// 主函数占空比渐变intmain(void){uint16_tduty0;uint8_tdir1;// 1递增0递减GPIO_Init_PWM();TIM3_PWM_Init();while(1){// 占空比从0→1000→0循环if(dir)duty;elseduty--;if(duty1000)dir0;if(duty0)dir1;TIM3_Set_PWM_Duty(duty);// 简单延时可替换为SysTick延时for(uint32_ti0;i10000;i);}}3、通用定时器TIM4输入捕获PB6测量脉冲频率TIM4_CH1PB6捕获外部脉冲计算脉冲频率如测量传感器信号。#includestm32f10x.h// 全局变量捕获值、频率uint32_tTIM4_Capture_Value0;uint32_tTIM4_Freq0;/** * brief GPIO初始化PB6TIM4_CH1浮空输入 */voidGPIO_Init_Capture(void){RCC-APB2ENR|RCC_APB2ENR_IOPBEN|RCC_APB2ENR_AFIOEN;// PB6浮空输入GPIOB-CRL~(GPIO_CRL_MODE6|GPIO_CRL_CNF6);GPIOB-CRL|GPIO_CRL_CNF6_0;}/** * brief TIM4输入捕获初始化上升沿捕获 */voidTIM4_Capture_Init(void){// 1. 开启TIM4时钟RCC-APB1ENR|RCC_APB1ENR_TIM4EN;// 2. 关闭定时器清空配置TIM4-CR1~TIM_CR1_CEN;// 3. 配置输入捕获模式CH1上升沿捕获TIM4-CCMR1~TIM_CCMR1_CC1S;TIM4-CCMR1|TIM_CCMR1_CC1S_0;// CH1映射到TI1TIM4-CCER~TIM_CCER_CC1P;// 上升沿捕获TIM4-CCER|TIM_CCER_CC1E;// 开启CH1捕获// 4. 配置预分频器不分频开启更新中断TIM4-PSC0;TIM4-DIER|TIM_DIER_CC1IE|TIM_DIER_UIE;// 捕获中断更新中断// 5. NVIC配置TIM4对应30号中断SCB-AIRCR0x05FA0800;NVIC-IP[30]|0x10;NVIC-ISER[0]|(130);// 6. 开启TIM4TIM4-CR1|TIM_CR1_CEN;}/** * brief TIM4中断服务函数捕获脉冲计算频率 */voidTIM4_IRQHandler(void){staticuint32_tlast_capture0;// 捕获中断if(TIM4-SRTIM_SR_CC1IF){TIM4_Capture_ValueTIM4-CCR1;// 读取捕获值if(TIM4_Capture_Valuelast_capture){// 频率 72MHz / (捕获值 - 上一次捕获值)TIM4_Freq72000000/(TIM4_Capture_Value-last_capture);}last_captureTIM4_Capture_Value;TIM4-SR~TIM_SR_CC1IF;// 清除捕获标志}// 更新中断溢出处理if(TIM4-SRTIM_SR_UIF){last_capture0;// 重置捕获值TIM4-SR~TIM_SR_UIF;}}// 主函数intmain(void){GPIO_Init_Capture();TIM4_Capture_Init();while(1){// TIM4_Freq即为测量到的频率Hz可通过串口输出}}4、高级定时器TIM1互补 PWM 输出PA8/PA9带死区TIM1_CH1PA8主 PWM CH1NPA9互补 PWM带死区电机控制常用。#includestm32f10x.h/** * brief GPIO初始化PA8(TIM1_CH1)、PA9(TIM1_CH1N)复用推挽输出 */voidGPIO_Init_TIM1_PWM(void){RCC-APB2ENR|RCC_APB2ENR_IOPAEN|RCC_APB2ENR_AFIOEN;// PA8复用推挽输出GPIOA-CRH~(GPIO_CRH_MODE8|GPIO_CRH_CNF8);GPIOA-CRH|GPIO_CRH_MODE8_0|GPIO_CRH_CNF8_1;// PA9复用推挽输出GPIOA-CRH~(GPIO_CRH_MODE9|GPIO_CRH_CNF9);GPIOA-CRH|GPIO_CRH_MODE9_0|GPIO_CRH_CNF9_1;}/** * brief TIM1互补PWM初始化10kHz占空比40%死区100ns */voidTIM1_PWM_Init(void){// 1. 开启TIM1时钟APB2RCC-APB2ENR|RCC_APB2ENR_TIM1EN;// 2. 关闭定时器清空配置TIM1-CR1~TIM_CR1_CEN;// 3. 配置CH1为PWM模式1预装载使能TIM1-CCMR1~TIM_CCMR1_OC1M;TIM1-CCMR1|TIM_CCMR1_OC1M_1|TIM_CCMR1_OC1M_2;TIM1-CCMR1|TIM_CCMR1_OC1PE;// 4. 配置死区时间100ns72MHz→1个时钟13.8ns100/13.8≈7→DTG7TIM1-BDTR|7;// 死区时间7×Tck_intTIM1-BDTR|TIM_BDTR_MOE;// 主输出使能必须开启否则互补PWM无输出// 5. 开启CH1和CH1N输出高电平有效TIM1-CCER~(TIM_CCER_CC1P|TIM_CCER_CC1NP);TIM1-CCER|TIM_CCER_CC1E|TIM_CCER_CC1NE;// 6. 配置分频、重装值、比较值TIM1-PSC7;// 72MHz/89MHzTIM1-ARR899;// 9MHz/90010kHzTIM1-CCR1360;// 占空比360/90040%// 7. 开启自动重装预装载强制更新TIM1-CR1|TIM_CR1_ARPE;TIM1-EGR|TIM_EGR_UG;// 8. 开启TIM1TIM1-CR1|TIM_CR1_CEN;}// 主函数intmain(void){GPIO_Init_TIM1_PWM();TIM1_PWM_Init();while(1);}五、总结1、定时器寄存器编程核心流程开时钟→关定时器→配功能中断 / PWM / 捕获→配分频 / 重装值→开中断 / NVIC若需→开定时器定时中断需清除UIF标志PWM 需配置复用 GPIO 输出使能输入捕获需处理溢出高级定时器需额外配置BDTR寄存器死区 主输出使能这是与通用定时器的核心区别。2、时钟适配若系统时钟不是 72MHz需重新计算PSC和ARR公式频率 定时器时钟 / (PSC1) / (ARR1)通用定时器时钟 2×APB1 时钟APB1 分频 1 时高级定时器时钟 APB2 时钟。3、中断通道号TIM228、TIM329、TIM430、TIM654、TIM125需根据通道号配置 NVIC-ISER。4、PWM 关键配置必须开启ARPE自动重装预装载和OCxPE通道预装载否则参数修改不生效高级定时器需开启MOE主输出使能否则互补 PWM 无输出。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价