定时器--STM32f4--HAL

基本概念

STM32中有三种定时器,高级定时器,通用定时器,基本定时器,具体如下图:
在这里插入图片描述
发生如下事件将产生中断/DMA

  • 更新:计数器向上溢出/向下溢出,计数器初始化
  • 触发事件:计数器启动、停止、初始化或者由内部/外部触发计数
  • 输入捕获
  • 输出比较
  • 支持针对定位的增量(正交)编码器和霍尔传感器电路
  • 触发事件作为外部时钟或者按周期的电流管理

计数器模式

  1. 向上计数:计数器从0计数到自动加载值ARR,然后重新冲0开始计数并且产生一个计数器溢出事件
  2. 向下计数模式:计数器从自动装入的值ARR开始向下计数到0,然后从自动装载值重新开始,并产生一个计数器向下溢出事件
  3. 终于对齐模式(向上/向下计数):计数器从0开始计数到自动装载值的值-1,产生一个计数器溢出事件,然后向下计数到1并产生一个计数器溢出事件,然后再从0开始重新计数
    在这里插入图片描述

定时器中断实现步骤

  1. 使能定时器
__HAL_RCC_TIM3_CLK_ENABLE();
  1. 初始化定时器,配置ARR,PSC
HAL_TIM_Base_Init();
  1. 开启定时器中断
HAL_TIM_Base_Start();
HAL_TIM_Base_Start_IT();
  1. 设置中断优先级
HAL_NVIC_SetPriority();
HAL_NVIC_EnableIRQ();
  1. 编写中断服务函数
TIMx_IRQHandler();//中断服务函数
HAL_TIM_IRQHandler();	//HAL库定时器中断通用处理函数
HAL_TIM_PeriodElapsedCallback();	//定时器更新中断回调函数

具体代码

使用TIM3让LED1每500ms亮一次

  1. 使能定时器,我们放在第二步
  2. 初始化定时器,配置ARR,PSC
TIM_HandleTypeDef time_handler;
void time_init(void)
{time_handler.Instance = TIM3;			//可以取TIM1-TIM14time_handler.Init.CounterMode = TIM_COUNTERMODE_UP;		//计数模式,向上/下time_handler.Init.Period = 5000-1;	//自动装载值,即ARR的值time_handler.Init.Prescaler = 9000-1;//预分配系数,即PSC的值			//定时时间=(Period+1)(Prescaler+1)/Tclk=90000000(9Mhz)//time_handler.Init.ClockDivision=			时钟分频因子:定时器时钟与数字滤波器分频比//time_handler.Init.RepetitionCounter=		重复计数次数:高级定时器使用HAL_TIM_Base_Init(&time_handler);
}void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){__HAL_RCC_TIM3_CLK_ENABLE();HAL_NVIC_EnableIRQ(TIM3_IRQn);HAL_NVIC_SetPriority(TIM3_IRQn,3,3);HAL_TIM_Base_Start_IT(&time_handler);	//开启定时器并更新中断,以后每次更新中断,都会调用TIM3_IRQHandler}}

HAL_TIM_Base_Init初始化定时器后,会调用HAL_TIM_Base_MspInit函数,我们可以在HAL_TIM_Base_MspInit中使能TIM3,HAL_TIM_Base_MspInit还开启TIM3中断以及设置中断优先级

对于Init参数

  • Instance 可以取值TIM1到TIM14,表示使用哪个定时器
  • CounterMode :计数模式,向上/下
  • Period :自动装载值,即ARR的值
  • Prescaler :预分配系数,即PSC的值
  • ClockDivision: 时钟分频因子,定时器时钟与数字滤波器分频比
  • RepetitionCounter:重复计数次数,高级定时器使用

定时时间=(Period+1)(Prescaler+1)/Tclk
Tclk:输入时钟频率,TIM3为90M,计算得出定时时间=0.5s

  1. 开启定时器中断,在步骤2中完成
  2. 设置中断优先级,在步骤2中完成

步骤1-4是配置TIM3定时器中断,步骤5是来处理TIM3定时器中断

  1. 编写中断服务函数
void TIM3_IRQHandler(void)
{HAL_TIM_IRQHandler(&time_handler);		//HAL定时器中断通用函数
}//定时器通用更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){LED1 = !LED1;}}

当定时器TIM3时间到了时,会调用TIM3_IRQHandler函数,每个定时器都用一个中断服务处理函数,在TIM3_IRQHandler中,我们使用了HAL库定时器通用处理函数HAL_TIM_IRQHandler,HAL_TIM_IRQHandler内部会调用HAL_TIM_PeriodElapsedCallback更新回调函数,我们在HAL_TIM_PeriodElapsedCallback写逻辑处理就可以了

main函数调用time_init即可,具体代码

int main(void)
{//u8 press;HAL_Init();Stm32_Clock_Init(360,25,2,8);delay_init(180);Rcc_Init();LED_Init();KEY_Init();time_init();while(1){}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/379801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实训09.09:简单的彩票系统(自选多注)

package wsq; import java.util.Scanner; public class CustomCaipiao {public static void main(String[] args) {/** 用户自选彩票数字: 1.使用scanner来输入彩票号码! 2.直接写成自选多注,注数由用户输入决定;* 3.红球值1-33,不重复;蓝球值1-16;*/// 定义二维数组 存储所有的…

c ++查找字符串_C ++类和对象| 查找输出程序| 套装4

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int X;int* const PTR &X;public:void set(int x);void print();};void Sample::set(int x){*PTR x;}void Sample::print(){cout << *PTR - EOF << …

ASP.NET 泛型类型 Dictionary操作

protected void Page_Load(object sender, EventArgs e){//泛型Dictionary Dictionary<string, string> dit new Dictionary<string, string>();dit.Add("13", "张三");dit.Add("22", "李四");Response.Write("总数…

独立看门狗---STM32----HAL

基本概念 看门狗解决的问题是什么&#xff1f; 在系统跑飞&#xff08;程序异常执行&#xff09;的情况&#xff0c;是系统复位&#xff0c;程序重新执行。 独立看门狗适应用于需要看门狗作为一个在主程序之外能够完全独立工作&#xff0c;并且对时间精度要求低的场合。 工…

实训09.09:简单的彩票系统(注册信息)

package wsq; import java.util.Scanner;//本文件负责注册用户信息 /*用户注册信息:1.要求设置账号和密码,使用字符串数组2.账号名不能重复3.密码需要输入两次,两次密码输入一致4.满足账号名不重复.且两次密码一致,即为注册成功!!将信息添加到字符串数组中String[][] users ne…

【转】JAVA生成缩略图

方法1&#xff1a;[第一种方法比后一种生成的缩略图要清晰] import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.awt.*;import java.awt.geom.AffineTransform;import jav…

javascript写入_如何在JavaScript中写入HTML元素?

javascript写入写入HTML元素 (Writing into an HTML element) To write string/text into an HTML element, we use the following things: 要将字符串/文本写入HTML元素&#xff0c;我们使用以下内容&#xff1a; There must be an HTML element like paragraph, span, div e…

大话设计模式之设计模式遵循的七大原则

最近几年来&#xff0c;人们踊跃的提倡和使用设计模式&#xff0c;其根本原因就是为了实现代码的复用性&#xff0c;增加代码的可维护性。设计模式的实现遵循了一些原则&#xff0c;从而达到代码的复用性及增加可维护性的目的&#xff0c;设计模式对理解面向对象的三大特征有很…

IIC通信---EEPROM24C02---STMF4

IIC通信协议 IIC是同步半双工通信&#xff0c;一个数据线SDA和一个时钟SCL线&#xff0c;可以接受和发送数据。在CPU与被控IC之间、IC与IC之间进行双向传送。 空闲状态 IIC总线的SDA和SCL两条信号线同时处于高电平时&#xff0c;规定为总线的空闲状态。 起始信号 当SCL为高…

实训09.08:简单的算法练习

/*final 关键字 修饰的变量值 后期不可更改 相当于定义常量常量 &#xff1a;不可更改*/final int a 10;//a 20; 报错的值不可更改&#xff01;/*输入函数* */System.out.println("请输入数字&#xff1a;");Scanner scanner new Scanner(System.in);int b…

让自己闪亮

转载于:https://www.cnblogs.com/Gigabyte/archive/2009/01/03/you_can_shine.html

Java中的wait()和sleep()方法之间的区别

Java中的wait()和sleep()方法 (wait() and sleep() methods in Java) First, we will see how wait() method differs from sleep() method in Java? 首先&#xff0c;我们将看到wait()方法与Java中的sleep()方法有何不同&#xff1f; wait()方法 (wait() Method) This metho…

离线使用iPhone SDK文档的方法

在使用Xcode进行iPhone编程时&#xff0c;有时需要参考iPhone SDK的文档&#xff0c;不过每次ControlClick后&#xff0c;Xcode都会试图连接Internet&#xff0c;进行在线读取。有什么方法能够把资料下载到硬盘上进行离线阅读吗&#xff1f; 答案是肯定的。首先去Xcode的Prefer…

远程连接sql server 2000服务器的解决方案

远程连接sql server 2000服务器的解决方案2007-04-07 11:29远程连接sql server 2000服务器的解决方案   一 看ping 服务器IP能否ping通。   这个实际上是看和远程sql server 2000服务器的物理连接是否存在。如果不行&#xff0c;请检查网络&#xff0c;查看配置&#xff0c…

实训09.10:HTML简单表格设计

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>燕雨简历</title></head><body><table border"" cellspacing"" cellpadding"" width"400px" height"6…

LCD显示实验----STM32f4--HAL

步骤 LCD初始化 LCD_Init(); //LCD初始化此函数在lcd.c文件里面 2. 设置LCD背景颜色 LCD_Clear(WHITE);此函数在lcd.c文件里面 3. 设置字体颜色 POINT_COLORRED; 写入要显示的字体 LCD_ShowString(10,80,240,24,24,"LTDC TEST");LCD_ShowSt…

JavaScript | 使用提示从用户输入值

Example 1) Input name and print 示例1)输入名称和打印 Code (JS & HTML): 代码(JS和HTML)&#xff1a; <!DOCTYPE html><HTML><HEAD><SCRIPT>var name prompt("Enter Your name:");var msg "Welcome "name;//alert(msg)…

一个游戏程序员的学习资料 (zz)

一个游戏程序员的学习资料//z 2012-4-19 14:39:51 PM IS2120CSDN想起写这篇文章是在看侯杰先生的《深入浅出MFC》时, 突然觉得自己在大学这几年关于游戏编程方面还算是有些心得&#xff0c;因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考。一则是作为自己今后两年…

项目管理中工作分解结构模型(WBSM)的应用

摘要 本文根据工作分解结构(WBS)的工作特点&#xff0c;运用系统工程的思想理论方法&#xff0c;构建了工作分解结构模型&#xff0c;并提出了模型算法;该模型方法的建立使得WBS工作更加简单可靠、思路清晰、基于更加可靠的科学基础之上。 1、工作分解结构模型(WBSM)方法工作程…

实训09.11:java重点内容介绍

package test;/** * OP:面向对象的简称* 类&#xff1a;同一特征的属性* * 类的定义&#xff1a;具有相同特征和行为的事物的抽象。&#xff08;不具体化&#xff09;* 对象&#xff08;实例对象&#xff09;&#xff1a;具体真实存在的实例。* 类是对象的实例&#xff1a;* *…