定时器中断控制led灯闪烁
定时器
stm32为我们提供了8个定时器,分为:通用是定时器(TIM2~TIM5),高级定时器(TIM1和TIM8),基本定时器(TIM6和TIM7)。至于三者之间的区别可以参考以下博客:[https://blog.csdn.net/weixin_42078116/article/details/87882097]
通用定时器框图如下:
实验实现
**使用定时器中断实现:5s一次红灯,10s一次绿灯。定时器初始化(库函数):
其中Tclk为PSC时钟也就是定时器还未分频时的时钟,一般为72M)
例如定时1S:
1S=(9999 + 1)*(7199 + 1)/72M
代码实现
void TIM3_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,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
}void TIM2_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;NVIC_InitTypeDef NVIC_InitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能//定时器TIM2初始化TIM_TimeBaseStruct.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStruct.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStruct); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中断,允许更新中断//中断优先级NVIC设置NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级1级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStruct); //初始化NVIC寄存器TIM_Cmd(TIM2, ENABLE); //使能TIMx
}//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 LED0=!LED0;}
}//定时器2中断服务程序
void TIM2_IRQHandler(void) //TIM3中断
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查TIM2更新中断发生与否{TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中断标志 LED1=!LED1;}
}
主函数
int main(void){ delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级LED_Init(); //LED端口初始化TIM2_Int_Init(49999,13999); TIM3_Int_Init(49999,7199); while(1){ }
}
定时器中断控制led灯闪烁相关推荐
- 51C语言中断LED闪烁,单片机定时器中断实现LED灯闪烁程序
运用定时器0工作在方式1(16位计数器)实现LED灯的闪烁.先来看看定时器0工作在方式1的逻辑结构图. 从上图可以看到,GATE先经过非门,再和INT0引脚作为或门的输入.这里简单提一下数字电路中的与 ...
- STM32中断控制LED灯闪烁
文章目录 一.中断 1.中断全过程 2.中断优先级 3.HAL库外部中断处理流程 4.中断回调函数 二.实现LED灯 三.实现项目 四.实验结果 五.总结 一.中断 1.中断全过程 中断发生 当CPU ...
- STM32定时器控制LED灯闪烁及PWM练习
一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...
- 用51单片机中断控制LED灯亮灭
用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void dela ...
- 单片机IO口应用-独立按键控制LED以及控制LED灯闪烁
目录 P1=0xdf: sbit LED=P1^5; 输出控制 P1并行口第5位引脚IO置为1 P1并行口第5位引脚IO置为0 输入检测 延时函数 控制LED灯闪烁 方法一 方法二 方法三 P1=0x ...
- STM32之中断控制LED灯
STM32中断控制LED灯 一.中断 1. 中断地址 2. 中断优先级 3. 中断响应过程 二.新建工程 三.编写代码 四.运行结果 五.总结 参考 一.中断 在处理器中,中断是一个过程,即CPU在正 ...
- STM32中断控制LED灯亮灭
目录 一.中断介绍 1.中断分类 硬件中断(Hardware Interrupt) 软件中断(Software Interrupt) 2.中断优先级 3.中断源种类 4.中断响应原则 二.新建项目 1 ...
- STM32中断控制LED灯
文章目录 一.相关概念 1.中断概念 2.中断过程 3.中断作用 4.中断优先级 5.中断响应过程 二. CubeMX中断控制LED灯 1.创建项目 2.代码修改 3.运行结果 三.HAL库中断串口通 ...
- 驱动——按键中断控制LED灯实验
三个按键实现按键中断 要求:按键按一下灯亮,再按一下灯灭 注:由于开发板位置,为了方便一一对应观察,采用key1控制LED3,key2控制LED2,key3控制LED1 0.添加相关设备树节点信息 ① ...
最新文章
- 知乎热议:周志华弟子 旷视南京负责人跳槽高校
- select2 使用
- Python实现向s3共享存储上传和下载文件
- Linux环境准备20160921
- SpringMvc自动代理
- 【GAN】如何生动有趣地对GAN进行可视化?Google的GAN Lab推荐你了解一下
- Ubuntu16.04安装CUDA8.0时,提示:The driver installation is unable to locate the kernel source.
- [css] 使用css实现彩虹的效果
- ajax官方api,yangguozhong
- 飞鸽传书技术更新换代非常快
- 华为鸿蒙系统学习笔记5-华为方舟编译器正式开源及相关源码下载
- H5中 时间格式NAN-NAN-NAN
- Learn OpenGL(二)——顶点输入(Vertex Input)
- 案例分享:巧用工具提升无源码系统的性能和稳定性
- 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
- 办公室计算机如何互传文件,办公室电脑互联,打印机共享,方便快速的网内文件传输...
- 《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述
- 爱加密加密Android apk 使用步骤
- 编写c语言数据从结构时头文件,C语言与数据结构 实验指导.doc
- html导出excel