STM32G474之TIM1更新中断详解
创作时间:
作者:
@小白创作中心
STM32G474之TIM1更新中断详解
引用
CSDN
1.
https://blog.csdn.net/weixin_42550185/article/details/141715003
STM32G474的TIM1定时器可以产生多种中断,包括:
- 捕获比较1个事件(Capture compare 1 event)
- 用于获取“捕获输入脉冲的时间”,也可用于输出“比较输出波形”。
- 捕获比较2个事件(Capture compare 2 event)
- 捕获比较3个事件(Capture compare 3 event)
- 捕获比较4个事件(Capture compare 4 event)
- TIM更新事件(TIM Update event)
- 当定时器计数器溢出时产生更新事件。
- TIM刹车输入事件(TIM Break input event)
- 当刹车信号到达时产生刹车输入事件。
- TIM刹车2输入事件(TIM Break2 input event)
- TIM触发器检测事件(TIM Trigger detection event)
- TIM换向事件(TIM commutation event)
- TIM编码器索引事件(TIM Encoder index event)
- TIM方向更改事件(TIM Direction change event)
- TIM索引错误事件(TIM Index error event)
- TIM转换错误事件(TIM Transition error event)
定时器的功能非常丰富,我们从最基础的定时器计数器溢出产生中断开始学习,因为这个功能最为常用。
测试程序
#include "Timer1.h"
#include "LED.h"
#include "stm32g4xx_hal.h"
void Timer1_Init(void);
void Timer1_Init(void)
{
TIM_HandleTypeDef htim1; //TIM1句柄
RCC_ClkInitTypeDef clkconfig;
uint32_t uwTimclock = 0;
uint32_t pFLatency;
uint32_t uwPrescalerValue = 0;
__HAL_RCC_TIM1_CLK_ENABLE();//使能“定时器1”的时钟,Enable TIM1 clock
HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);//Get clock configuration
uwTimclock = HAL_RCC_GetPCLK2Freq();
//读取PCLK2的时钟频率,Return the PCLK2 frequency
//若PCLK2的分频器值为1,则和SystemCoreClock的值相等
//uwTimclock=170000000Hz
uwPrescalerValue = (uint32_t) ((uwTimclock / 10000U) - 1U);
//uwPrescalerValue=17000
htim1.Instance = TIM1;
htim1.Init.Period = (1000000U / 1000U) - 1U;
//定时器周期999
htim1.Init.Prescaler = uwPrescalerValue;
//设置TIM1预分频器为uwPrescalerValue
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
//设置时钟分频系数,TIM1_CR1中的CKD[9:8]=00b,tDTS=ttim_ker_ck;
//溢出时间为(990+1)*1*17000/170000000/1=0.1秒
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.RepetitionCounter = 0;//重复计数(1-0)次,产生1次中断,比较重要
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
//使能“自动重装载”
HAL_TIM_Base_Init(&htim1);
HAL_TIM_Base_Start_IT(&htim1);
HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);//使能TIM1产生中断
HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 5, 0U);
//设置NVIC中断分组4:4位抢占优先级,0位响应优先级
//选择中断优先级组4,即抢占优先级为4位,取值为0~15,响应优先级组为0位,取值为0
//这里设置TIM1中断优先级为5
}
//TIM1“更新中断”和TIM16中断,共用一个中断源, TIM1每0.1秒中断一次
void TIM1_UP_TIM16_IRQHandler(void)
{
if( (TIM1->SR & TIM_FLAG_UPDATE) == TIM_FLAG_UPDATE)
{//读取TIM1状态寄存器TIMx_SR的bit0(UIF),UIF=1表示产生了“TIM1更新事件”
if( (TIM1->DIER & TIM_IT_UPDATE) == TIM_IT_UPDATE )
{//读取TIM1中断使能寄存器TIMx_DIER的bot0(UIE),查看UIE=1?
TIM1->SR = ~(TIM_IT_UPDATE);
LED1_Toggle(); //LED1引脚输出电平翻转
}
}
}
测试结果
热门推荐
刘欢:音乐之外的传奇人生
眼袋手术后,这些坑千万别踩!
LED的类型、特点及用途
边防证办理指南:流程、要求及对边境管理的影响
手机设置+运营商服务:全方位拦截骚扰电话指南
江西警方捣毁非法催收团伙,揭露非法网贷四大特征
改变不了就别强求,30句人生哲理助你参透生活
1000万患者60%失业,精神分裂症职业康复亟需多方联动
《英雄联盟手游》:完美复刻的掌上经典
跟着阿杰玩转大连5日游
最新!大连必去5大景点排名出炉,淡季穷游正当时!
殷墟墓葬腰坑揭秘:殉狗习俗与黄泉信仰
头孢与酒同服会致命,医生提醒:服药前后7天禁酒
布洛芬用药指南:合理使用,避免抗药性产生
“吃药不喝酒,喝酒不吃药”:7类药物与酒精的致命组合
抗抑郁药遇酒精如同“毒药”,患者服药期间应禁酒
艾滋病治疗中应避免饮酒:酒精会降低药效、加重病情
夏天海边玩水警惕“离岸流” 如何识别自救?一文了解
抑郁症在婚姻中孤独怎么办
文明安检享平安,北京启动第十四届轨道交通安检宣传月
跆拳道修炼秘诀:从基础训练到实战技巧
从白带到黑带:一位家长的跆拳道陪学心得
多彩甘肃足以惊艳所有人!甘肃最美的7个5A景区,你去过几个?
川藏公路:从雅安到拉萨的文化之旅
千年马蹄寺石窟群:保护与传承的现代挑战
冬季怕冷?试试羊肉红枣煲
寒潮来袭,羊肉暖身攻略
杭州西湖免门票,冬游正当时!
杭州西湖免门票,你打卡了吗?
《论语》成语典故,你知道多少?