STM32 通用定时器3 中断初始化代码解析
这段代码是一个通用定时器中断初始化函数,使用的是定时器3。其中,'arr' 和 'psc' 分别表示自动重装值和时钟预分频数,用于设置定时器的计数频率和定时时间。
在中断处理函数 'TIM3_IRQHandler' 中,每50ms 会对 'time50ms' 进行加1操作,并进行一些其他操作,如设置 'disFlag' 标志位、计数器 'Count' 清零等。
代码详解:
#include 'timer.h'
#include 'led.h'
// 通用定时器中断初始化
// 这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M
// arr:自动重装值。
// psc:时钟预分频数
// 这里使用的是定时器 3!
u32 time50ms = 0; // 50ms 时间片
extern u8 disFlag;
extern unsigned char firstin;
extern unsigned char Count;
extern unsigned char uartbusy;
void TIM3_Int_Init(u16 arr, u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 时钟使能
TIM_TimeBaseStructure.TIM_Period = arr; // 设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到 5000 为 500ms
TIM_TimeBaseStructure.TIM_Prescaler = psc; // 设置用来作为 TIMx 时钟频率除数的预分频值 10Khz 的计数频率
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 根据 TIM_TimeBaseInitStruct 中指定的参数初始化 TIMx 的时间基数单位
// All notes can be deleted and modified //
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; // TIM3 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 先占优先级 0 级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 从优先级 3 级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ 通道被使能
NVIC_Init(&NVIC_InitStructure); // 根据 NVIC_InitStruct 中指定的参数初始化外设 NVIC 寄存器
TIM_Cmd(TIM3, ENABLE); // 使能 TIMx 外设
}
void ctrlPwmTime(void);
void TIM3_IRQHandler(void) // TIM3 中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) // 检查指定的 TIM 中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); // 清除 TIMx 的中断待处理位:TIM 中断源
time50ms++;
if (time50ms % 2 == 0)
{
disFlag = 1;
}
if (uartbusy > 0)
{
uartbusy--;
}
else
{
firstin = 0;
Count = 0;
}
}
}
代码功能:
- 初始化定时器3,设置计数频率和定时时间。
- 配置定时器3中断,每50ms触发一次。
- 在中断处理函数中,对 'time50ms' 进行加1操作,并执行其他相关操作。
代码解释:
- 'arr' 和 'psc' 参数用于设置定时器的计数频率和定时时间。
- 'time50ms' 变量用于记录50ms时间片的数量。
- 'disFlag' 标志位用于指示某种状态。
- 'Count' 计数器用于记录某个事件的次数。
- 'uartbusy' 变量用于指示串口是否繁忙。
总结:
这段代码实现了 STM32 通用定时器 3 中断的初始化,并配置了定时器中断每 50ms 触发一次,用于执行一些特定操作。
原文地址: https://www.cveoy.top/t/topic/jzDI 著作权归作者所有。请勿转载和采集!