IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32CubeMX与HAL库学习--基本定时器定时中断 -> 正文阅读

[嵌入式]STM32CubeMX与HAL库学习--基本定时器定时中断

作者:recommend-item-box type_download clearfix

STM32CubeMX与HAL库学习--基本定时器定时中断

背景

本人小白,最近在学着使用STM32CubeMX与HAL库进行开发,这是学习过程的一些记录。
STM32CubeMX版本:6.3.0
HAL:STM32CubeF4 Firmware Package V1.26.1
MDK:V5.32.0.0
开发板:野火的霸天虎V2开发板(主控芯片是STM32F407ZG)

STM32CubeMX生成初始化代码

选择MCU型号,新建工程

配置时钟树,配置之前要在RCC的HSE那里选择外部谐振器作为时钟来源

GPIO设置,PA0和PC13是我之前实验外部中断的时候定义的。PF6和PF7连的LED灯,低电平灯亮。
在这里插入图片描述
TIM7设置

NVIC设置

选择IDE等选项,然后就可以生成代码了

在MDK-ARM里编辑代码

打开工程,打开stm32f4xx_it.c,找到void TIM7_IRQHandler(void),这是TIM7的中断处理函数,我添加了一行代码调用HAL_GPIO_TogglePin,用于反转控制LED的GPIO电平。

/**
  * @brief This function handles TIM7 global interrupt.
  */
void TIM7_IRQHandler(void)
{
  /* USER CODE BEGIN TIM7_IRQn 0 */
	HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin);
  /* USER CODE END TIM7_IRQn 0 */
  HAL_TIM_IRQHandler(&htim7);
  /* USER CODE BEGIN TIM7_IRQn 1 */

  /* USER CODE END TIM7_IRQn 1 */
}

然后编译、下载,发现程序一直在while循环无法进入定时器中断,进入调试,查看TIM7的寄存器,发现它开始计时的使能位CEN和更新中断使能都没有开,CubeMX初始化之后要用户自己开。

于是我在main函数里GPIO和TIM7初始化代码后面加了两行代码使能这两个位

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM7_Init();
  /* USER CODE BEGIN 2 */
	__HAL_TIM_ENABLE(&htim7);
	__HAL_TIM_ENABLE_IT(&htim7, TIM_IT_UPDATE);  
  /* USER CODE END 2 */

这两个“函数”其实是宏,在stm32f4xx_hal_tim.h里面定义,内容如下:

/**
  * @brief  Enable the TIM peripheral.
  * @param  __HANDLE__ TIM handle
  * @retval None
  */
#define __HAL_TIM_ENABLE(__HANDLE__)                 ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))
/** @brief  Enable the specified TIM interrupt.
  * @param  __HANDLE__ specifies the TIM Handle.
  * @param  __INTERRUPT__ specifies the TIM interrupt source to enable.
  *          This parameter can be one of the following values:
  *            @arg TIM_IT_UPDATE: Update interrupt
  *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt
  *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt
  *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt
  *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt
  *            @arg TIM_IT_COM:   Commutation interrupt
  *            @arg TIM_IT_TRIGGER: Trigger interrupt
  *            @arg TIM_IT_BREAK: Break interrupt
  * @retval None
  */
#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))

然后LED灯就可以正常闪烁了。

其他

1、中断处理最好写在回调函数里面。
往往不止一种情况触发同一个中断,各个情况都有对应回调函数,库函数会去检查相关标志位并调用对应的回调函数,这样就不需要我们自己去检查中断标志来确定中断来源以及清除标志位,比如上面的中断程序可以写在void HAL_TIM_PeriodElapsedCallback里面。
库的回调函数都有__weak修饰,我们可以自己定义回调函数。
2、时钟与它的中断使能可以用函数HAL_TIM_Base_Start_IT()。(笑哭)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:50:39  更:2021-07-25 11:51:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 6:44:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码