定时器

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灯闪烁相关推荐

  1. 51C语言中断LED闪烁,单片机定时器中断实现LED灯闪烁程序

    运用定时器0工作在方式1(16位计数器)实现LED灯的闪烁.先来看看定时器0工作在方式1的逻辑结构图. 从上图可以看到,GATE先经过非门,再和INT0引脚作为或门的输入.这里简单提一下数字电路中的与 ...

  2. STM32中断控制LED灯闪烁

    文章目录 一.中断 1.中断全过程 2.中断优先级 3.HAL库外部中断处理流程 4.中断回调函数 二.实现LED灯 三.实现项目 四.实验结果 五.总结 一.中断 1.中断全过程 中断发生 当CPU ...

  3. STM32定时器控制LED灯闪烁及PWM练习

    一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...

  4. 用51单片机中断控制LED灯亮灭

    用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void dela ...

  5. 单片机IO口应用-独立按键控制LED以及控制LED灯闪烁

    目录 P1=0xdf: sbit LED=P1^5; 输出控制 P1并行口第5位引脚IO置为1 P1并行口第5位引脚IO置为0 输入检测 延时函数 控制LED灯闪烁 方法一 方法二 方法三 P1=0x ...

  6. STM32之中断控制LED灯

    STM32中断控制LED灯 一.中断 1. 中断地址 2. 中断优先级 3. 中断响应过程 二.新建工程 三.编写代码 四.运行结果 五.总结 参考 一.中断 在处理器中,中断是一个过程,即CPU在正 ...

  7. STM32中断控制LED灯亮灭

    目录 一.中断介绍 1.中断分类 硬件中断(Hardware Interrupt) 软件中断(Software Interrupt) 2.中断优先级 3.中断源种类 4.中断响应原则 二.新建项目 1 ...

  8. STM32中断控制LED灯

    文章目录 一.相关概念 1.中断概念 2.中断过程 3.中断作用 4.中断优先级 5.中断响应过程 二. CubeMX中断控制LED灯 1.创建项目 2.代码修改 3.运行结果 三.HAL库中断串口通 ...

  9. 驱动——按键中断控制LED灯实验

    三个按键实现按键中断 要求:按键按一下灯亮,再按一下灯灭 注:由于开发板位置,为了方便一一对应观察,采用key1控制LED3,key2控制LED2,key3控制LED1 0.添加相关设备树节点信息 ① ...

最新文章

  1. 知乎热议:周志华弟子 旷视南京负责人跳槽高校
  2. select2 使用
  3. Python实现向s3共享存储上传和下载文件
  4. Linux环境准备20160921
  5. SpringMvc自动代理
  6. 【GAN】如何生动有趣地对GAN进行可视化?Google的GAN Lab推荐你了解一下
  7. Ubuntu16.04安装CUDA8.0时,提示:The driver installation is unable to locate the kernel source.
  8. [css] 使用css实现彩虹的效果
  9. ajax官方api,yangguozhong
  10. 飞鸽传书技术更新换代非常快
  11. 华为鸿蒙系统学习笔记5-华为方舟编译器正式开源及相关源码下载
  12. H5中 时间格式NAN-NAN-NAN
  13. Learn OpenGL(二)——顶点输入(Vertex Input)
  14. 案例分享:巧用工具提升无源码系统的性能和稳定性
  15. 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
  16. 办公室计算机如何互传文件,办公室电脑互联,打印机共享,方便快速的网内文件传输...
  17. 《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述
  18. 爱加密加密Android apk 使用步骤
  19. 编写c语言数据从结构时头文件,C语言与数据结构 实验指导.doc
  20. html导出excel

热门文章

  1. 学习笔记:Fully Convolutional Networks for Segmantic Segmentation
  2. HBuilder中wap2app(将移动站点转换为移动应用)
  3. 现在偏门搞什么最赚钱?6个农村致富门路创业项目
  4. OpenGL入门示例3——黑色背景绘制绿色圆形
  5. kd树是怎么画出来的_你绝对猜不出这些画是怎么画出来的……
  6. 初学者学习vue路由与无痕浏览
  7. win浏览器(edge)如何无痕浏览
  8. 达芬奇pro的FPGA学习笔记0--对自己想说的话以及之后的项目规划
  9. 计算地址掩码和地址数
  10. 如何写一份程序员爱看的需求文档?