STM32-笔记16-定时器中断点灯

一、实验目的

使用定时器 2 进行中断点灯,500ms LED 灯翻转一次。

二,定时器溢出时间计算

Tout:定时器溢出时间

Ft:定时器的时钟源频率

ARR:自动重装载寄存器的值

PSC:预分频器寄存器的值

例如,要定时 500ms,则:PSC=7199,ARR=4999,Ft=72M

三、定时器中断实验配置步骤

msp 函数是对 MCU 相关的硬件进行初始化设置,通常被设计用于处理特定硬件外设或功能的底层初始化工作

四、开始配置

复制项目文件03-流水灯,重命名为17-定时器中断点灯

在Drivers\BSP目录下,新建文件夹timer,timer.c和timer.h

加载文件

编译

编译

代码:

main.c

cpp 复制代码
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();//初始化led灯
    timer_init(5000-1,7200-1);
//    led1_ON();
//    led1_OFF();
    while(1)
    { 
     
    }
}

timer.c

cpp 复制代码
#include "timer.h"
#include "led.h"

TIM_HandleTypeDef timer_handle = {0};//定义结构体

//定时器初始化函数
void timer_init(uint16_t arr,uint16_t psc)//把ARR和PSC当作参数传进来
{
    timer_handle.Instance = TIM2; //选择使用的定时器
    timer_handle.Init.Prescaler = psc; //PSC
    timer_handle.Init.Period = arr; //ARR
    timer_handle.Init.CounterMode = TIM_COUNTERMODE_UP;//配置成向上的,默认向上的
    timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;  //自动重装载,默认自动重装载
    
    HAL_TIM_Base_Init(&timer_handle);
    HAL_TIM_Base_Start_IT(&timer_handle);//设置使能更新中断,和启动计数器
}

//msp函数
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM2)
    {
        __HAL_RCC_TIM2_CLK_ENABLE();
        HAL_NVIC_SetPriority(TIM2_IRQn,2,2);//设置优先级
        HAL_NVIC_EnableIRQ(TIM2_IRQn);//设置使能中断
    }
}

//中断服务函数 
void TIM2_IRQHandler(void)
{
    //一般还会调用一个公共处理的服务函数
    HAL_TIM_IRQHandler(&timer_handle); 
    
}
//更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM2)
    {
        led1_Toggle();
    }
}

timer.h

cpp 复制代码
#ifndef  __TIMER_H__
#define __TIMER_H__


#include "sys.h"

void timer_init(uint16_t arr,uint16_t psc);

#endif
相关推荐
_im.m.z6 小时前
【设计模式学习笔记】1. 设计模式概述
笔记·学习·设计模式
胡西风_foxww7 小时前
【ES6复习笔记】迭代器(10)
前端·笔记·迭代器·es6·iterator
上海易硅智能科技局有限公司8 小时前
AG32 MCU 的电机控制方案
单片机·嵌入式硬件
左漫在成长8 小时前
王佩丰24节Excel学习笔记——第十九讲:Indirect函数
笔记·学习·excel
纪伊路上盛名在9 小时前
Max AI prompt1
笔记·学习·学习方法
Suwg2099 小时前
【MySQL】踩坑笔记——保存带有换行符等特殊字符的数据,需要进行转义保存
数据库·笔记·mysql
胡西风_foxww10 小时前
【ES6复习笔记】对象方法扩展(17)
前端·笔记·es6·对象·方法·扩展·对象方法扩展
左漫在成长10 小时前
王佩丰24节Excel学习笔记——第十八讲:Lookup和数组
笔记·学习·excel
嵌入式小强工作室10 小时前
stm32能跑人工智能么
人工智能·stm32·嵌入式硬件
MikelSun10 小时前
电压控制环与电流控制环
单片机·嵌入式硬件·物联网