供配电系统概念,工厂供配电系统发展现状_供配电技术国内外研究现状
2023-10-15
很多朋友对stm32定时器中断服务函数,剖析STM32-定时器2不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。
4、常用库函数定时器参数的初始化:
无效TIM_TimeBaseInit(TIM_TypeDef * TIMx,TIM_TimeBaseInitTypeDef * TIM_TimeBaseInitStruct);结构内部成员:
typedef 结构{ uint16_t TIM_Prescaler; uint16_t TIM_CounterMode; uint16_t TIM_Period; uint16_t TIM_ClockDivision; uint8_t TIM_RepetitionCounter;} TIM_TimeBaseInitTypeDef;申报方式(通用):
TIM_TimeBaseStructure.TIM_Period=4999; TIM_TimeBaseStructure.TIM_Prescaler=7199; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure);定时器使能功能:
void TIM_Cmd(TIM_TypeDef* TIMx,FunctionalState NewState) 定时器中断使能函数
无效TIM_ITConfig(TIM_TypeDef * TIMx,uint16_t TIM_IT,FunctionalState NewState);状态标志位获取和清除
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);void TIM_ClearITPendingBit(TI M_TypeDef* T IMx,uint16_t TIM_IT);5。定时器中断实现步骤
可设置定时时钟。
RCC_APB1PeriphClockCmd();初始化定时器并配置ARR和PSC。
TIM_TimeBaseInit();使能定时器中断并配置NVIC。
无效TIM_ITConfig(); NVIC_Init(); 启用定时器。
TIM_Cmd(); 编写中断服务函数。
TIMx_IRQHandler();6.应用实例
以下是使用定时器中断的代码。我们将其设置为每500ms 中断一次。中断服务函数控制LED反转LED状态。时间计算方法为:
Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
//timer.c源文件#include 'timer.h' #include 'led.h' //通用定时器3中断初始化//这里时钟选择是APB1的2倍,APB1为36M //arr:自动重置负载值。 //psc: 时钟预分频器//这里使用定时器3!void TIM3_Int_Init(u16 arr,u16 psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,启用); //时钟使能Able//定时设备TIM3初始化TIM_TimeBaseStructure.TIM_Period=arr; //设置在下一个更新事件中加载的活动自动重载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler=psc; //设置预分频器值TIM_TimeBaseStructure用作TIMx时钟频率除数。 TIM_ClockDivision=TIM_CKD_DIV1; //设置时钟分频:TDTS=Tck_tim TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); //根据指定参数初始化TIMx的时基单元TIM_ITConfig(TIM3, TIM_IT_Up date, ENABLE ); //使能指定的TIM3中断并允许更新中断//中断优先级NVIC设置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寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx }//定时器3中断服务程序void TIM3_IRQHandler(void) //TIM3中断{ if (TIM_GetITStatus(TIM3, TIM_IT_Update) !=RESET) //检查TIM3更新中断是否发生{ TIM_ClearITPendingBit(TIM3, TIM_IT_Update ) ; //清除TIMx更新中断标志LED1=!LED1; }}//timer.h头文件#ifndef __TIMER_H#define __TIMER_H#include 'sys.h'void TIM3_Int_Init(u16 arr,u16 psc);#endif//main.c源文件#include 'led.h'#include 'delay.h'#include 'sys.h'#include 'timer.h' int main(void){delay_init(); //延迟函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断组2:2位抢占优先级,2位响应优先级uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化TIM3_Int_Init(4999,7199); //10Khz计数频率,计数到5000是500ms while(1) { LED0=!LED0;延迟毫秒(200); } }
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
2023-10-15
栏目热点
供配电系统概念,工厂供配电系统发展现状_供配电技术国内外研究现状
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面