• 2023版 STM32实战5 基本定时器中断


    基本定时器简介与特性


    -1-时钟可分频

    -2-计数模式只可以选择累加

    -3-只可以用来定时(含中断)

    查看时钟源


    如图定时器7的时钟最大为72MHZ

    在这里插入图片描述

    定时时间的计算


    通用定时器的时间计算公式为 Tout = ((arr+1)(psc+1))/Tclk ;

    arr为重载值

    psc为时钟分频系数

    Tclk为时钟频率

    代码编写(已经验证,可直接拷贝使用


    这是一个在定时器7的中断函数中翻转两个LED的demo

    timer.c文件
    #include "timer.h"
    
    
    // 通用定时器的时间计算公式为 Tout = ((arr+1)(psc+1))/Tclk ;
    void Timer_7_Init(uint16_t arr,uint16_t psc)
    {
    	//开启定时器7时钟
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);
    	//定义结构体
    	TIM_TimeBaseInitTypeDef Timer7_CFG;
    	//预分频系数
    	Timer7_CFG.TIM_Prescaler = psc;
    	//定义重装载值
    	Timer7_CFG.TIM_Period = arr;
    	//设置计数模式,通用计时器只支持累加
    	Timer7_CFG.TIM_CounterMode = TIM_CounterMode_Up;
    	//调用初始化函数,把值写入寄存器
    	TIM_TimeBaseInit(TIM7,&Timer7_CFG);
    	
    	//配置定时器为更新中断
    	TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);
    	
    	//配置NVIC优先级
    	NVIC_InitTypeDef NVIC_CFG;
    	NVIC_CFG.NVIC_IRQChannel = TIM7_IRQn;
    	NVIC_CFG.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_CFG.NVIC_IRQChannelSubPriority=0;
    	NVIC_CFG.NVIC_IRQChannelPreemptionPriority=0;
    	//调用初始化函数,把值写入寄存器
    	NVIC_Init(&NVIC_CFG);	
    	
    	//打开定时器,即开始计时
    	TIM_Cmd(TIM7,ENABLE);
    }
    
    
    
    void TIM7_IRQHandler(void)
    {
    	//检查是否为更新中断
    	if(TIM_GetITStatus(TIM7,TIM_IT_Update)==SET)
    	{
    		//清除中断标志位
    		TIM_ClearFlag(TIM7,TIM_FLAG_Update);
    		GPIOB->ODR^=(1<<5);
    		GPIOE->ODR^=(1<<5);
    	
    	}
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    main.c文件

    #include "stm32f10x.h"
    #include "timer.h"
    #include "delay.h"
    
    void LED_Init(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	GPIO_Init(GPIOE, &GPIO_InitStructure);
    
    }
    
    
    
    int main(void)
    {	
    	delay_init();
    	LED_Init();
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    	Timer_7_Init(4999,7199);
    
    	while(1);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    工程获取

    三连后点击下方头像

  • 相关阅读:
    【python】自动化工具Selenium与playwright去除webdriver检测
    129页4万字某智慧能源集团数字化管控平台项目 建设方案
    DPDK性能影响因素分析
    【李沐论文精读】GPT、GPT-2和GPT-3论文精读
    贪吃蛇小游戏
    网络练习题带答案
    如何把Spring学精通了?
    内网和热点同时连接使用配置
    中高级前端面试题总结第一期
    Es修改索引别名
  • 原文地址:https://blog.csdn.net/lllmeimei/article/details/133385248