【STM32】HAL库 STM32CubeMX教程六----定时器中断

发布者:咖啡小熊最新更新时间:2020-08-18 来源: eefocus关键字:STM32  HAL库  STM32CubeMX  定时器中断 手机看文章 扫描二维码
随时随地手机看文章

前言:

今天我们来学习定时器,32的定时器有着非常丰富的功能, 输入捕获/输出比较,PWM,中断等等。是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用

 

所用工具:

1、芯片: STM32F407ZET6/STM32F103ZET6

2、STM32CubeMx软件

3、IDE: MDK-Keil软件

4、STM32F1xx/STM32F4xxHAL库 

5

知识概括:

通过本篇博客您将学到:

SMT32定时器原理

STM32CubeMX创建定时器例程

HAL库TIM定时器函数库

定时器中断的创建与使用

《【STM32】系统时钟RCC详解(超详细,超全面)》

3定时器设置

1选择TIM2

2定时器时钟选择内部时钟

Clock Source(时钟来源)       

  • 选项1 :Internal Clock  内部时钟 

  • 选项2 : ETR2 外部触发输入(ETR)(仅适用TIM2,3,4)

Prtscaler (定时器分频系数)  : 7199

Counter Mode(计数模式)    Up(向上计数模式)                    

Counter Period(自动重装载值) :    4999     

CKD(时钟分频因子) :       No Division 不分频 

选项:  可以选择二分频和四分频                         

auto-reload-preload(自动重装载)  :    Enable 使能

TRGO Parameters    触发输出 (TRGO)               不使能    与本节无关,之后做详细介绍 

TRGO:    定时器的触发信号输出  在定时器的定时时间到达的时候输出一个信号(如:定时器更新产生TRGO信号来触发ADC的同步转换,) 

这两个为定时器主从模式配置,很少用到,我们用不到,所以全部关闭

使能定时器中断:

         

定时器溢出时间:

                                            

这里我们 arr=4999  psc=7199 Tclk=72Mhz        Tout = (5000*7200)/72  us  = 500ms

4项目文件设置

          

  • 1 设置项目名称

  • 2 设置存储路径

  • 3 选择所用IDE

   

5创建工程文件

然后点击GENERATE CODE  创建工程

配置下载工具

新建的工程所有配置都是默认的  我们需要自行选择下载模式,勾选上下载后复位运行

函数讲解:


HAL_TIM_IRQHandler(&htim2);

定时器中断处理函数   在stm32f4xx_it.c的 TIM2_IRQHandler()定时器中断服务函数中


这个函数的具体作用是判断中断是否正常,然后判断产生的是哪一类定时器中断(溢出中断/PWM中断.....),然后进入相应的中断回调函数


 


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中,


这里我们是使用定时器溢出中断回调函数


 


 void TIM3_IRQHandler(void)   首先进入中断函数

 HAL_TIM_IRQHandler(&htim2);之后进入定时器中断处理函数

判断产生的是哪一类定时器中断(溢出中断/PWM中断.....) 和定时器通道

 void HAL_TIM_PeriodElapsedCallback(&htim2);    进入相对应中断回调函数

在中断回调函数中添加用户代码

 


你也可以在在stm32f1xx_it.c中找到中断回调函数


     __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)   

例程:

定时器溢出时间为500ms,LED点亮延时500ms闪烁


 


在main.c主函数上方初始化使能定时器2


  /* USER CODE BEGIN 2 */

    /*使能定时器1中断*/

    HAL_TIM_Base_Start_IT(&htim2);

  /* USER CODE END 2 */

在main.c主函数下方添加中断回调函数


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

    static unsigned char ledState = 0;

    if (htim == (&htim2))

    {

        if (ledState == 0)

            HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);

        else

            HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);

        ledState = !ledState;

    }

}

关键字:STM32  HAL库  STM32CubeMX  定时器中断 引用地址:【STM32】HAL库 STM32CubeMX教程六----定时器中断

上一篇:HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)
下一篇:【STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)

推荐阅读最新更新时间:2024-11-10 02:41

秉火429笔记之一初识STM32
1. STM32概述 STM32,ST为意法半导体,M是Microelectronics的缩写,32表示32位,简而言之,STM32即为ST公司开发的32位微控制器。 2. STM32分类 STM32包含多个系列,从内核分为Cortex-M0、M3、M4、M7,每个内核有大概分为主流、高性能和低功耗。 3. STM32命名规则
[单片机]
秉火429笔记之一初识<font color='red'>STM32</font>
stm32的内存分布
一、MDK下的概念 1)Code:代码段,存放程序的代码部分。 2)RO-data:只读数据段,存放定义的常量。 3)RW-data:读写数据段,存放初始化为非0值的全局变量和静态变量。 4)ZI-data:零数据段,存放未初始化及初始化为0的全局变量和静态变量。 所以在stm32中:flash的容量是前三项相加(RW-data的初始值也要存在flash里),RAM的容量是后两项相加等。 static变量(函数内静态局部变量和函数外静态全局变量)初始化的、未初始化的分别在RW-data、ZI-data; 全局变量初始化的、未初始化的分别在RW-data、ZI-data; 局部变量(函数内)在栈段,动态分配的空间在堆中,
[单片机]
<font color='red'>stm32</font>的内存分布
STM32的4中输出模式
1、普通推挽输出(GPIO_Mode_Out_PP): 使用场合:一般用在0V和3.3V的场合。线路经过两个P_MOS 和N_MOS 管,负责上拉和下拉电流。 使用方法:直接使用 输出电平:推挽输出的低电平是0V,高电平是3.3V。 2、普通开漏输出(GPIO_Mode_Out_OD): 使用场合:一般用在电平不匹配的场合,如需要输出5V的高电平。 使用方法:就需要再外部接一个上拉电阻,电源为5V,把GPIO设置为开漏模式, 当输出高组态时,由上拉电阻和电源向外输出5V的电压。 输出电平:在开漏输出模式时,如果输出为0,低电平,则使N_MOS 导通,使输 出接地。若控制输出为1(无法直接输出高电平),则
[单片机]
stm32篇--系统初始化
跟着程序执行流程走,main是程序入口,在里面进行了各种初始化。 1.时钟配置 首先是RCC_Configuration(),里面进行了时钟基本的初始化,stm32有多个时钟源:(1)HSI上电默认启动,精度不高(2)HSE外部高速时钟,系统时钟一般采用它,经过PLL倍频;(3)LSE外部低速时钟,一般专门用于RTC;(4)LSI内部低速时钟,精度不高,一般用于IWDGCLK; void RCC_Configuration(void) { RCC_DeInit();//复位RCC成缺省值 RCC_HSEConfig(RCC_HSE_ON);//开启HSE的时钟作为PLL的时钟源 HSEStartUpStatu
[单片机]
STM32介绍以及与通常ARM的区别
ARM是英国的芯片设计公司,其最成功的莫过于32位嵌入式CPU核----ARM系列,最常用的是ARM7和ARM9,ARM公司主要提供IP核,就是CPU的内核结构,只包括最核心的部分,并不是完整的处理器. ARM把这个核卖给各大半导体公司,如 Pllips 三星 ,ATMEL 等等,许多公司,甚至Intel. ARM为了对付 8/16位机市场,最近推出了 Cortex-M3核,STM32就是意大利的意法半导体基于Cortex-M3的32位嵌入式处理器, Cortex_M3核性价比更高,价格低,可以与8/16位单片机竞争. STM32 性能如下: ■ 核心 - ARM 32位的Cortex(TM)-M3CPU - 72MHz,高
[单片机]
STM32学习笔记(十) CAN通讯测试(环回模式)
1.CAN通讯的理解  想学习CAN通讯,那么要对通讯协议有一定的认知。通讯协议是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传输速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。  CAN通讯全称控制器局域网通讯,是用来在局域网中高效传输,处理信息的一种通讯方式。它采用数据块编码的方式,数据块根据帧类型的不同有四种格式,可使不同的节点接收到相同的数据,然后再根据各节点内CAN配置选择处理还是丢弃该信息(这与TCP/IP协议栈的链路层的MAC地址过滤很相似,是可以互通理解的),CAN的位流是按照非归零(NRZ)码方式编码,一个完整的位电平有显性和隐性两种方式。显性和隐性
[单片机]
<font color='red'>STM32</font>学习笔记(十) CAN通讯测试(环回模式)
STM32 程序卡死在B. ENDP
问题: 程序卡死在startup文件中的此处 原因: 使能了中断(USART_ITConfig(UART5, USART_IT_TC, ENABLE); ),但是没有写中断入口函数(void UART5_IRQHandler(void)),中断进来找不到对应的中断入口函数,就会卡死在这里。 解决方法: 加上void UART5_IRQHandler(void)之后,程序正常运行。
[单片机]
<font color='red'>STM32</font> 程序卡死在B. ENDP
stm32 独立看门狗
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。 /* * 采用独立看门狗作为看门狗定时器 * 独立看门狗由内部专门的 40Khz 低速时钟驱动, * 即使主时钟发生故障,它也仍然有效 *000:预分频因子=4 // 最短时间 0.1 ms *001:预分频因子=8 // 最短时间 0.2 ms *010:预分频因子=16 // 最短时间 0.4 ms *011:预分频因子=32 // 最短时间 0.8 ms
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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