STM32使用定时器更新中断使LED亮灭交替1S闪烁

这篇具有很好参考价值的文章主要介绍了STM32使用定时器更新中断使LED亮灭交替1S闪烁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR(自动装载寄存器)计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件,当使能了更新中断以后,计数器溢出时则产生更新中断。

STM32使用定时器更新中断使LED亮灭交替1S闪烁

STM32使用定时器更新中断使LED亮灭交替1S闪烁

上图源自一位b站up主的定时器中断图及参考手册里的图。

可见,计数器时钟可由下列时钟源提供:

● 内部时钟(CK_INT)

● 外部时钟模式1:外部输入脚(TIx)(图中没有截取到)

● 外部时钟模式2:外部触发输入(ETR)

● 内部触发输入(ITRx)

定时器2内部时钟且使其更新中断使LED亮灭交替1S闪烁(通俗说就是定时器定时1S)为例,选用RCC内部时钟模式,则不需要配置GPIO(外部触发输入模式等则涉及GPIO的端口复用)。在使用内部时钟时首先进行定时器2的使能, 配置时基单元。配置完定时器2后,开启定时器2的更新中断,配置其优先级。在使能计数器后且当计数器溢出时,就会产生更新中断,并且计数器重新开始计数。

定时1s且系统频率为72MHz时,重装值和预分频值的关系:(重装值+1)*(预分频值+1)=72*10^6

频率(1s的震动次数)和时间的关系是:nMHz则震动n次(Hz)历经1us(1MHz=10^6Hz)。

Timer.c

#include "timer.h"

void Timer_Init(u16 arr,u16 psc)  //RCC内部时钟模式
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = arr;  //重装
	TIM_TimeBaseInitStructure.TIM_Prescaler = psc;  //预分频
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);  //配置定时器更新中断
	
	TIM_Cmd(TIM2,ENABLE);
}

Timer.h

#ifndef __TIMER_H
#define __TIMER_H

#include "stm32f10x.h"

void Timer_Init(u16 arr,u16 psc);

#endif

led.c

#include "led.h"

/*我这里板载灯是PC13*/
/*开启时钟,初始化端口引脚,再进行相关操作*/

void LED_Init(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitIntructrue;
	GPIO_InitIntructrue.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitIntructrue.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitIntructrue.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitIntructrue);
}

void LED_ON(void){
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
}

void LED_OFF(void){
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}

led.h

#ifndef __LED_H
#define __LED_H

#include "stm32f10x.h"

void LED_Init(void);

void LED_ON(void);

void LED_OFF(void);

#endif

main.c

#include "stm32f10x.h"
#include "led.h"
#include "timer.h"

u16 i=0;

int main(void)
{
	LED_Init();
	Timer_Init(7199,9999);
	while(1);
}

void TIM2_IRQHandler()  //TIM2的中断服务函数名不能有误
{
	switch(i)
	{
		case 0:LED_ON();i++;break;
		case 1:LED_OFF();i=0;break;
	}
	TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除更新中断标志位
}

效果是:LED交替亮灭1S。 文章来源地址https://www.toymoban.com/news/detail-449699.html

到了这里,关于STM32使用定时器更新中断使LED亮灭交替1S闪烁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32定时器中断的使用示例

    上一篇博客实现了定时器输出pwm,这篇接着上次的工程,在上次的工程上做简单的配置即可 硬件使用的是stm32h750vbt6; 软件用到了stm32cubemx和keil5; 勾选打开dma3的中断 在main.c中相应位置添加以下代码 MAIN函数中: 这一句很重要,开启定时器计数 可以看到在每次TM3溢出后触发

    2024年02月16日
    浏览(49)
  • STM32 hal库使用笔记(二)中断—定时器中断

    目录 一、定时器简介 二、HAL库配置 1.时钟树的配置 2. CubeMX的配置 三、代码编写 四、拓展实验 五、实验效果 实验目的:利用定时器6控制LED灯的亮灭,间隔500ms 实验平台:正点原子精英板 一、定时器简介     定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发

    2024年01月19日
    浏览(60)
  • STM32不使用中断实现定时器微秒级精确延时

    我们在写代码的时候避免不了要使用延时函数,很多延时函数都是使用中断或者tick来实现的,tick的方式最大到毫秒ms级别,通过中断方式的通用定时器来实现,如果实现1us的延时那么每1us就来一次中断,很影响cpu的效率。 本文提供一种 不使用中断 ,并且很简单的方式实现的

    2024年04月11日
    浏览(49)
  • STM-32:TIM定时中断—定时器定时中断/定时器外部时钟

    定时器可以对输入的时钟进行计数,并在达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等

    2024年02月09日
    浏览(58)
  • 【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中断服务函数 参考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定时器定时中断.rar 10-定时器外部时钟.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年02月03日
    浏览(56)
  • STM32——定时器——定时中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本节先只讲解定时器的定时中断,内外中断源选择。 TIM(Timer)定时器 定时器可以 对输入的时钟进行计数 ,并在计数值达到设定值时触发中断。 16位计数器、预分频器、自动重装寄存器的时基单元 ,

    2024年04月10日
    浏览(50)
  • STM32定时器-定时器中断功能详解

    STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括: 通用与基本定时器(2~7)位于低速的APB1总线上 高级定时器(1、8)位于高速的APB2总线上 自动装载计

    2024年02月08日
    浏览(56)
  • stm32 定时器部分(定时中断)

    一.定时中断(概念部分) 定时中断主要包含两种中断一种是更新中断还有一种是输入捕获中断 更新中断 :更新中断通常用于定时器的基本定时功能。当定时器计数器溢出并重新从零开始计数时,会触发更新中断。你可以配置定时器的计数周期和预分频器来控制定时器的计时

    2024年03月15日
    浏览(60)
  • 定时器详解 -- 定时器中断、PWM输出 --stm32

    STM32F103系列芯片拥有多种定时器,包括基本定时器、通用定时器和高级定时器,每种定时器都具有一些特定的功能。 向上计数:计数器从0计数到自动重装载值(ARR),然后重新从0开始计数并且产生一个计数器溢出事件。 向下计数:计数器从自动重装载值(ARR)开始向下计数

    2024年02月11日
    浏览(63)
  • 【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)

      传统STM32外部中断 的设计步骤:  (1)将GPIO初始化为输入端口。  (2)配置相关I/O引脚与中断线的映射关系。  (3)设置该I/O引脚对印的中断触发条件。  (4)配置NVIC,并使能中断。  (5)编写中断服务函数。   基于STM32CubeMX的外部中断 设计步骤  (1)在STM3

    2024年02月20日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包