STM32:定时器中断与优先级

发布者:见贤思奇异果最新更新时间:2022-06-30 来源: csdn关键字:STM32  定时器中断  优先级 手机看文章 扫描二维码
随时随地手机看文章

前言

利用HAL库开发实现功能:使用TIM2实现定时,每隔1秒实现双闪功能


一、基础知识

1、常见的定时器资源

1.系统滴答定时器 SysTick

集成在Cortex M3内核的定时器,主要目的是给RTOS提供时钟节拍做时间基准。比如HAL库函数中的HAL_Delay()就是基于这个定时器开发的。如果要做嵌入式Linux的相关项目,要和上位机进行通讯的话,这个函数就不能用了。


2.看门狗定时器 WatchDog


3.实时时钟 RTC


4.基本定时器 TIM6、TIM7


5.通用定时器 TIM2、TIM3、TIM4、TIM5

在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时器最具代表性,使用也最为广泛

6.高级定时器 TIM1、TIM8

请添加图片描述

2、定时器中断频率计

首先,定时器中断频率的设置只需要关注:1)定时器输入时钟的频率;2)预分频值*(Prescaler);3)自动重装值(Counter Period)*

公式:

请添加图片描述

提示:1M=10的6次方 即:1M=1000000


例:

请添加图片描述

二、CubeMx硬件配置

1、硬件配置步骤:

1.设置Clock Source时钟源

2.根据需求设置参数Prescaler和Counter Period

3.配置NVIC嵌套向量中断控制器

4.用户重写定时器溢出回调函数,实现具体的中断逻辑


2、CubeMx硬件配置

请添加图片描述

请添加图片描述

3、定时器配置

由于我们需要使用TIM2定时,所以我们在Timers模块下找到TIM2

【第一步】

设置Clock Source时钟源为Internal Clock(内部时钟),如上图所示

我们的需求定时器频率为32MHz,间隔1秒(1000ms)翻转电平

所以根据定时器发生中断时间计算方法

【第二步】

计算方法看上文

设置参数Prescaler为芯片时钟评率减1(从0开始)

设置参数Counter Period为999,如上图所示(从0开始)

【第三步】

配置NVIC嵌套向量中断控制器,勾选使能TIM2中断

请添加图片描述

三、proteus仿真电路搭建

请添加图片描述

四、代码编写

1、定时器时间间隔参数

请添加图片描述

2、虚函数寻找及函数重写

stm32f1xx.it.c文件中找我们的定时器TIM2回调函数然后右键Go To Definition Of

请添加图片描述

找到时间定时函数HAL_TIM_PeriodElapsedCallback(htim)

请添加图片描述

然后再次右键Go To Definition Of,找到我们要的虚函数

请添加图片描述

将函数复制到main.c文件中,在Private User Code区域重写代码


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  if(htim->Instance == TIM2)

{

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7|GPIO_PIN_8);

}

}


3、开启定时器

打开stm32f1xx_hal_tim.c文件,找到函数HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

请添加图片描述

复制,调用,参数设置为&htim2即可


  /* USER CODE BEGIN 2 */

  HAL_TIM_Base_Start_IT(&htim2);

  /* USER CODE END 2 */


五、仿真测试

1、配置芯片晶振频率与CubeMx一致

请添加图片描述

LED不停的闪烁

请添加图片描述

请添加图片描述


关键字:STM32  定时器中断  优先级 引用地址:STM32:定时器中断与优先级

上一篇:STM32学习:串口通讯
下一篇:STM32学习:按键控制LED

推荐阅读最新更新时间:2024-11-17 01:47

一文详解STM32的时钟系统
STM32的时钟树 时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。 STM32本身十分复杂,外设非常多,任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,如果都用高速时钟势必造成浪费。同一个电路,时钟越快功耗越大、抗电磁干扰能力越弱。复杂的MCU采用多时钟源的方法来解决这些问题。如下图,是STM32的时钟系统框图。 如上图左边的部分,看到STM32有4个独立时钟源,HSI、HSE、LSI、LSE。 HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。 HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 LSI是低速内部时钟,RC
[单片机]
一文详解<font color='red'>STM32</font>的时钟系统
全面剖析基于stm32的四轴飞行器设计方案
四轴飞行器是一种利用四个旋翼作为飞行引擎来进行空中飞行的飞行器。进入20世纪以来,电子技术飞速发展四轴飞行器开始走向小型化,并融入了人工智能,使其发展趋于无人机,智能机器人。 四轴飞行器不但实现了直升机的垂直升降的飞行性能,同时也在一定程度上降低了飞行器机械结构的设计难度。四轴飞行器的平衡控制系统由各类惯性传感器组成。在制作过程中,对整体机身的中心、对称性以及电机性能要求较低,这也正是制作四轴飞行器的优势所在,而且相较于固定翼飞机,四轴也有着可垂直起降,机动性好,易维护等优点。 在实际应用方面,四轴飞行器可以在复杂、危险的环境下可以完成特定的飞行任务,也可以用于监控交通,环境等。比如,在四轴飞行器上安装甲烷等有害气体的检测装置,则
[单片机]
全面剖析基于<font color='red'>stm32</font>的四轴飞行器设计方案
stm32编码器的接口模式
编码器是什么玩意呢,它可是一个好玩的东西,做小车测速必不可少的玩意,下面,我将从编码器的原理讲起,一直到用stm32的编码器接口模式,测出电机转速与方向。 1.编码器 图1 编码器示意图 图1为编码器的示意图,中间是一个带光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。电机旋转一圈,码盘上有多少光栅,接受管就会接收多少个高电平。371电机中的码盘就是这样的,他是334线码盘,具有较高的测速精度,也就是电机转一圈输出334个脉冲,芯片上已集成了脉冲整形触发电路,输出的是矩形波,直接接单片机IO就OK。 增量式旋转编码器通过内部两个光敏接受管转化其角度码盘的时序和相位关系,得到其角度码盘角度位移
[单片机]
<font color='red'>stm32</font>编码器的接口模式
STM32时钟体系结构
STM32的时钟体系可以直接以图概括(摘自STM32F10X参考手册) 下面就此图做分析 1. STM32输入时钟源 1.1 时钟源的作用 无论是小型单片机还是像STM32这样高级单片机,它们工作的核心都是大规模的时序逻辑电路,而驱动时序逻辑电路的关键则是准确而又稳定的时钟源。它的作用就像小学在操场上做广播体操时候播放的背景音乐,用于协调和同步各单元运行,为时序电路提供基本的脉冲信号。 1.2 STM32时钟源的设计 在51单片机中,一般都外接一个11.0592MHz的晶振,注意,提供时钟的不是晶振,而是RC时钟电路,而晶振只是时钟电路的元件之一。同理,在STM32中,时钟源也是由RC时钟电路产生,与51单片机的区别是区别在于
[单片机]
NUCLEO-F767ZI开发板评测
NUCLEO-F767ZI是意法半导体ST公司推出的低成本Nucleo评估板,目前为止,Nucleo系列可分为Nucleo-32、Nucleo-64和Nucleo-144三种产品,其中Nucleo-32采用32引脚小封装的MCU,功能最为简单;Nucleo-64采用LQFP64封装的MCU,是最早推出的Nucleo开发板产品;而Nucleo-144采用LQFP144封装的MCU,最新推出、功能最强。至此,意法半导体ST公司共推出几十款Nucleo开发板,涵盖了STM32系列MCU的主要产品。而NUCLEO-F767ZI可谓是目前功能最强的一款Nucleo开发板,位于Nucleo系列开发板家族图谱的右上角! 大家可以看到三款开
[嵌入式]
STM32时钟详解
1.概述 时钟是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。这样的好处是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。每个时钟tick,系统都会处理一步数据,这样才能让工作不出现紊乱。 2.原理 首先,任何外设都需要时钟,51单片机,STM32,430等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。 51单片机不需要配置时钟,是因为一个时钟开了之后所有的功能都可以用了,而这个时钟是默认开启的,比如有一个水库,水库有很多个门,这些门默认是开启的,所以每个门都会出水,我们需要哪个门的水的时候可以直接用,但是也存在一个问题,
[单片机]
<font color='red'>STM32</font>时钟详解
stm32专题二:GPIO输入—按键检测
新建板级支持包bsp_key.c和bsp_key.h GPIO输入配置过程: 定义初始化结构体; 开启RCC时钟,非常重要; 写入引脚和模式配置,不需要配置速度; 调用初始化函数,将初始化结构体写入对应的GPIO端口。 bsp_key.c包含两个函数,一个是初始化函数,另一个是按键扫描函数,会按键被按下时,返回按键的状态。 bsp_key.c #include bsp_key.h /** * @brief 按键初始化函数 */ void KEY_GPIO_Config(void) { // 定义GPIO初始化结构体 GPIO_InitTypeDef GPIO_InitStruct; // 开
[单片机]
关于STM32 MDK中USE_STDPERIPH_DRIVER问题
初学STM32,在RealView MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题。出现如下警告或错误提示:   warning: #223-D: function assert_param declared implicitly;assert_param(IS_GPIO_ALL_PERIPH(GPIOx));   这时候我们需要在 Target Options 中的 C/C++ 选项卡中添加USE_STDPERIPH_DRIVER、STM32F10X_HD。这样才能使编顺利通过。   知其然了,我们还得知其所以然。下面就一一道来。我们知道,程序的执行是从 main.c 文件开始的,其中必须包含有
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved