首页 > 其他分享 >利用基本定时器实现LED的定时亮灭

利用基本定时器实现LED的定时亮灭

时间:2023-11-20 10:58:27浏览次数:30  
标签:定时器 TIM6 亮灭 中断 void NVIC TIM LED

本次实验基于stm32f407,基本定时器是TIM6和TIM7,这里用TIM6,让灯每秒改变一下状态。

对于基本定时器,时基如下:
image

CK_PSC来源于内部时钟,是内部时钟频率两倍,查阅数据手册
image
TIM6挂载到APB1总线,故CK_PSC=42Mhz2=84Mhz。另外说一下,高级定时器TIM1、TIM8和通用定时器TIM9、TIM10、TIM11挂载到APB2总线上,时钟源时钟为84Mhz2=168Mhz。

先假定自动重装载寄存器ARR为10000次,10^(-4)10000 = 1s,故输入ARR的时钟频率应为104hz,预分频值84106要分成104hz,PSC应该设置为8400分频,由于都是从0开始计数,所以ARR是10000-1,PSC是8400-1。计算完之后会产生中断,在中断服务函数里写代码实现即可。

知晓原理,接下来就是代码实现

首先依旧是配置好中断优先级,相关函数在misc.h。如下

void TIM_NVICConfig(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //中断优先级分组,组1模式,即主优先级1位,子优先级3位
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;//中断源是TIM6
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	
	NVIC_Init(&NVIC_InitStructure);
	
}

然后配置TIM6外设,相关函数在stm32f4xx_tim.h中

void TIM_ModeConfig(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);//注意要开时钟
	
	TIM_TimeBaseInitStructure.TIM_Prescaler = 8400-1 ;
	TIM_TimeBaseInitStructure.TIM_Period =  10000-1;
	
	TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStructure);//初始化后会产生更新中断,提示定时了一个周期
	
  //上面初始化函数每次初始化之后会产生一个更新中断和更新事件
  //更新事件用于重新装载CNT和ARR的值,所以为了系统定时再进入中断而不是一初始化就进入中断,这里清除中断标志位
	TIM_ClearFlag(TIM6,TIM_FLAG_Update);
	
	TIM_ITConfig(TIM6,TIM_IT_Update, ENABLE);//开启定时器更新中断
	
	TIM_Cmd(TIM6, ENABLE);//使能定时器
}

再去头文件里找中断向量表,找到TIM6_DAC_IRQHandler ,这就是中断服务函数的名称。
image
去stm32f4xx_it.c写中断服务函数

void TIM6_DAC_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM6,TIM_IT_Update) == SET)//判断定时器是否产生中断
	{
		LED_1_TOGGLE;
		TIM_ClearITPendingBit(TIM6,TIM_IT_Update);//清除中断标志位
	}
}

最后主程序如下:

int main(void)
{
	LED_Config();
	TIM_NVICConfig();
  TIM_ModeConfig();
}

即可实现灯的定时亮灭。

标签:定时器,TIM6,亮灭,中断,void,NVIC,TIM,LED
From: https://www.cnblogs.com/manchestercity/p/17843434.html

相关文章

  • 使用固件库点亮LED流程
    1.在USER中新建两个驱动文件2.在工程里面添加.c文件3.c文件包括.h文件,再编译一下就能直接包含进来4.在魔术棒里添加头文件路径5.头文件里写声明以防重复编译6.c文件里写初始化函数,相关函数从固件库里面找7.在主函数里面声明即可点亮......
  • 按键控制灯的亮灭
    1.写两个按键的驱动文件2.进行按键引脚的初始化,注意这里是输入模式,设置为浮空输入3.再写一个按键检测函数//按键检测uint8_tKey_Scan(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==1)//读取引脚的输入 { //松手检测,如果按着不......
  • 13_LED点阵屏
    LED点阵屏介绍显示原理原理图74HC595C51的sfr,sbit选择列来显示矩阵LEDmain.c#include<REGX52.H>#inlcude"Delay.h"sbitmRCLK=P3^5;//RCLKsbitmSRCLK=P3^6;//SRCLKsbitmSER=P3^4;//SERvoid_74HC595_WriteByte(unsignedcharByte){ unsignedcha......
  • qemu-kvm: error: failed to set MSR x38d to x0x 【问题解决】
    问题解决创建报错在下面的issues找到解决办法https://github.com/GNS3/gns3-server/issues/1774可以尝试在VM上禁用MSR,然后检查是否可以启动qemu计算机添加内核模块参数临时修改echoY>/sys/module/kvm/parameters/ignore_msrs或者永久修改cat>/etc/modp......
  • OLED动画设计
    前言之前在b站上看到很多大佬分享了OLED丝滑滑动的界面的效果,当时对这个超级喜欢,但是看到大部分都是用的U8G2的OLED图形库。这对于一些资源比较紧张的单片机,而且还想用上这种的并不是很友好。而且我最开始使用OLED的时候用的都是中景园的代码,都是比较简单的GUI接口,所以掌握理论方......
  • 世微 降压恒流驱动IC 景观亮化洗墙灯舞台灯汽车灯LED照明 AP5199S
    1.特性 支持高辉调光,调光比  平均电流工作模式  高效率:最高可达95%  输出电流可调范围60mA~12A  最大工作频率1MHz 恒流精度≤±3% 支持PWM  封装:SOP8 2.应用领域  景观亮化洗墙灯  舞台调光效果灯汽车照明 3.说明 AP5199S是一款外围电路简单的多功能......
  • QFileDialog 读取文件目录+文件内容
    一、效果 二、模版1connect(ui->pushButton,&QPushButton::clicked,[=](){//连接按钮点击信号2//打开目录3QStringfilePath=QFileDialog::getOpenFileName(this,"标题栏题目","默认打开目录(可指定到文件)","文件类型过滤器testfile(*.......
  • 2023版 STM32实战1 LED灯驱动(电路与代码都讲解)
    电路图常规画法(带限流电阻计算公式)设LED电流为20mA(统一单位为0.02A)电压为3.3V限流电阻=(电源电压-负载正向工作电压)/工作电流限流电阻=(5V-3.3V)/0.02mA=1.7/V0.02A=85R省事画法(直接用IO输出)代码(直接拷贝使用)找对引脚!!!这是一个LED闪烁的demo为了新手方便我直接都写在了main.c......
  • failed to configure a datasource: ‘url‘ attribute is not specified and no em
    问题场景在SpringBoot中整合MySQL、Mybatis进行数据库开发时,按照正常步骤添加了相关数据库的依赖,也进行了必要的数据库配置,结果在项目启动时出现如下异常信息:***************************APPLICATIONFAILEDTOSTART***************************Description:Failedto......
  • 2023版 STM32实战1 LED灯驱动(电路与代码都讲解)
    电路图常规画法(带限流电阻计算公式) 设LED电流为20mA(统一单位为0.02A)电压为3.3V限流电阻=(电源电压-负载正向工作电压)/工作电流限流电阻=(5V-3.3V)/0.02mA=1.7/V0.02A=85R省事画法(直接用IO输出)  代码(直接拷贝使用)找对引脚!!!这是一个LED闪烁的demo为了新手方便我......