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引脚输出电平翻转
}
}
}
测试结果
热门推荐
重庆主城二日游网红景点攻略
赵本山女儿揭秘:2.2亿“本山号”为何卖不出去?
赵本山五折出售私人飞机:从巅峰到低谷的明星投资启示
赵本山2亿私人飞机5折卖不出去?
潍坊四季行:一场色彩斑斓的旅行盛宴
指纹解锁 vs 面部识别:谁才是豪车新宠?
走进铜仁江口县亚木沟,尽享自然之美,品味土家独特韵味!
沈阳周末打卡:棋盘山 vs 怪坡,谁才是你的菜?
沈阳初雪故宫全攻略:从拍摄到游览,带你玩转冰雪世界里的紫禁城
沈阳故宫:清初政治中心与满汉文化交融的见证
沈阳故宫:乾隆帝的东巡圣地
真实的辛亥革命:孙中山为何让位袁世凯?
养老金历年增长幅度有哪些变化?2025年养老金会继续增长吗?
蒙古崛起:横扫欧亚的风暴
B站弹幕互动引爆春晚新玩法
李子柒成春晚新宠?对比岳云鹏表现见分晓
宋丹丹:从春晚小品到热播剧的华丽转身
赵本山不上春晚,春晚还是那个春晚吗?
沈阳鸡架:从街头小吃到百亿产业
沈阳味道品牌联盟成立,首批认定15家名企名店
从抗美援朝到网红美食:沈阳炸鸡架的传奇故事
陶姓宝宝取名指南:五行理论与实际应用
百魔洞门票优惠大揭秘!
广西巴马百魔洞冬季游攻略:天冷也要嗨!
惠州一日游:打卡罗浮山、西湖、丰渚园及澳头古巷
食物搭配合理,种类、营养双达标
90后青年传承非遗美食"灯盏糕":守正创新"温州味"
成吉思汗后人建立的国家:大蒙古帝国分裂后的新格局
苏东坡加持!梅菜扣肉入选“湾区标准”
惠州梅菜扣肉:非遗美食的乡村产业之路