定时器--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.mzph.cn/news/379801.shtml

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

相关文章

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

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

IIC通信---EEPROM24C02---STMF4

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

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)…

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

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

SPI通信原理---STM32F4--HAL

SPI接口原理 SPI是一种高速全双工同步通信&#xff0c;在芯片管脚上占用四根线&#xff0c;主要应用在EEPROM、FLASH、实时时钟、AD转换器&#xff0c;还有数字信号处理器和数字信号解码器之间。 SPI接口使用4根线通信。 MISO&#xff1a;主设备数据输入&#xff0c;从设备数…

pata1015_ATA / PATA的完整形式是什么?

pata1015ATA / PATA&#xff1a;高级技术附件/并行高级技术附件 (ATA/PATA: Advanced Technology Attachment/Parallel Advanced Technology Attachment) ATA is an abbreviation of Advanced Technology Attachment. ATA has existed for a long time with the name PATA. Whe…

FreeRTOS在STM32F429上移植

准备工作 FreeRTOS系统源码基础工程&#xff0c;这里我们用跑马灯实验 1.在工程里面添加FreeRTOS源码 在工程里面新建一个名为FreeROTS的文件夹 将FreeRTOS源码添加到这个文件夹里面 protable里面只需留下Keil、MemMang、RVDS文件夹 2、向工程分组中添加文件 FreeRTOS_C…

C++中的指针与引用(转)

原文地址&#xff1a;http://www.cnblogs.com/skynet/archive/2010/09/22/1832911.html写在前面 指针和引用形式上很好区别&#xff0c;但是他们似乎有相同的功能,都能够直接引用对象&#xff0c;对其进行直接的操作。但是什么时候使用指针&#xff1f;什么时候使用引用呢&…

FreeRTOS任务基础知识

任务特性 在RTOS中&#xff0c;一个实时应用可以作为一个独立的任务&#xff0c;支持抢占&#xff0c;支持优先级&#xff0c;每个任务都有自己的堆栈&#xff0c;当任务切换时将上下文环境保存在堆栈中&#xff0c;再次调用任务时&#xff0c;取出上下文信息&#xff0c;继续…

Java版AVG游戏开发入门[0]——游戏模式转换中的事件交互

Java版AVG游戏开发入门[0]——游戏模式转换中的事件交互 示例程序下载地址&#xff1a;http://download.csdn.net/source/999273&#xff08;源码在jar内&#xff09; AVG&#xff0c;即Adventure Game&#xff0c;可以直译为[冒险游戏]。但是通常情况下我们说AVG是指[文字冒险…

FreeRTOS任务创建和删除

任务创建和删除的API函数 xTaskCreate()&#xff1a;使用动态方法创建一个任务xTaskCreateStatic()&#xff1a;使用静态方法创建一个任务xTaskCreateRestricated()&#xff1a;创建一个使用MPU进行限制的任务&#xff0c;相关内存使用动态内存分配vTaskDelete()&#xff1a;删…

python 日本就业_日本的绘图标志 Python中的图像处理

python 日本就业Read basics of the drawing/image processing in python: Drawing flag of Thailand 阅读python中绘图/图像处理的基础知识&#xff1a; 泰国的绘图标志 The national flag of Japan is a rectangular white banner bearing a crimson-red disc at its center…

FreeRTOS任务挂起和恢复

任务挂起&#xff1a;暂停某个任务的执行 任务恢复&#xff1a;让暂停的任务继续执行 通过任务挂起和恢复&#xff0c;可以达到让任务停止一段时间后重新运行。 相关API函数&#xff1a; vTaskSuspend void vTaskSuspend( TaskHandle_t xTaskToSuspend );xTaskToSuspend &am…

FreeRTOS中断配置与临界段

Cortex-M中断 中断是指计算机运行过程中&#xff0c;出现某些意外情况需主机干预时&#xff0c;机器能自动停止正在运行的程序并转入处理新情况的程序&#xff08;中断服务程序&#xff09;&#xff0c;处理完毕后又返回原被暂停的程序继续运行。Cortex-M内核的MCU提供了一个用…

FreeRTOS的列表和列表项

列表和列表项 列表 列表是FreeRTOS中的一个数据结构&#xff0c;概念上和链表有点类型&#xff0c;是一个循环双向链表&#xff0c;列表被用来跟踪FreeRTOS中的任务。列表的类型是List_T&#xff0c;具体定义如下&#xff1a; typedef struct xLIST {listFIRST_LIST_INTEGRI…

FreeRTOS队列

在实际应用中&#xff0c;我们会遇到一个任务或者中断服务需要和另一个任务进行消息传递&#xff0c;FreeRTOS提供了队列的机制来完成任务与任务、任务与中断之间的消息传递。 0x01 队列简介 队列是为了任务与任务、任务与中断之间的通信而准备的&#xff0c;可以在任务与任务…

剧情介绍:“阿甘正传”

阿甘是个智商只有75的低能儿。在学校里为了躲避别的孩子的欺侮&#xff0c;听从一个朋友珍妮的话而开始“跑”。他跑着躲避别人的捉弄。在中学时&#xff0c;他为了躲避别人而跑进了一所学校的橄榄球场&#xff0c;就这样跑进了大学。阿甘被破格录取&#xff0c;并成了橄榄球巨…

FreeRTOS信号量---二值信号量

信号量可以用来进行资源管理和任务同步&#xff0c;FreeRTOS中信号量又分为二值信号量、计算型信号量、互斥信号量和递归互斥信号量。 0x01 二值信号量 二值信号量其实就是一个只有一个队列项的队列&#xff0c;这个特殊的队列要么是满的&#xff0c;要么是空的&#xff0c;任…

FreeRTOS软件定时器

软件定时器允许设置一段时间&#xff0c;当设置的时间达到后就执行指定的功能函数&#xff0c;被软件定时器调用的功能函数叫做定时器的回调函数。软件定时器的回调函数是在定时器服务任务中执行的&#xff0c;所以一定不能在回调函数中调用任何阻塞任务的API函数&#xff0c;比…

WP7之Application Bar控件

Microsoft.Phone.Shell命名空间中定义了ApplicationBar及其相关类&#xff08;ApplicationBarIconButton和ApplicationBarMenuItem&#xff09;&#xff0c;这些类派生自Object,并完全独立于常规Silverlight编程中的DependencyObject,UIElement和FrameworkElement类层次结构。A…