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引脚输出电平翻转
}
}
}
测试结果
热门推荐
中国IP“封神宇宙+流浪地球”,干不过漫威?
接触音乐可以改善工作记忆和执行力!特别是对改善中晚年的大脑健康
犬皮肤病的治疗与预防
为什么钻石珍贵?关于钻石的有趣事实
怪,梦,伤:令人恐惧的“核类美学”
美国将在2025-26年度种植更多玉米,减少大豆种植
如何利用AI进行用户体验测试
NEJM:食物即良药!探索蛋白质、脂肪、碳水、膳食纤维“最佳”饮食方案
提升你的Excel技能:实用练习题
熟普洱茶泡脚:功效与注意事项全解析
怎么用Excel做学习计划表
揭开青少年心灵迷雾:抑郁、焦虑与紧张的认知与应对策略
创业板是什么?详解创业板:特点、指数及交易规则
王佳佳:从《致青春》曾毓到实力派演员的蜕变之路
微信网页中视频下载全攻略
聚四氟乙烯耐高温性能分析及应用
川渝联合开展比较试验 防晒衣应该怎么挑?
十月稻田,寒地之最——五常大米评测
聚全氟乙丙烯和聚四氟乙烯的区别
更广范围、更深程度、更高水平——我国“5G+工业互联网”加快创新发展
租售比解析:投资价值与市场泡沫的关键指标
SPU是什么意思?电商领域中的标准产品单元详解
银行的贵金属投资的投资风险分散?
龙潭山:俯瞰吉林市的绝佳位置
南怀瑾:学佛者必修的三十七菩提道品
“打工人”注意!关于绩效奖金的那些事
时间复杂度详解:从基本概念到计算方法
XPS怎么看元素价态
USDA:2月下调全球玉米、大豆产量,上调小麦产量
窟的意思和解释