⑤【蓝桥杯】STM32G4嵌入式竞赛实训平台(CT117E-M4)学习——定时器中断

写在前面——

        本文将介绍嵌入式竞赛实训平台(CT117E-M4)开发板上定时器中断的使用。

目录

一、硬件平台

三、STM32G4系列定时器简介

四、配置过程

五、编写函数

六、总结


一、硬件平台

         嵌入式竞赛实训平台(CT117E-M4)是北京国信长天科技有限公司设计、生产的一款“蓝桥杯全国软件与信息技术专业人才大赛–嵌入式设计与开发科目”专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提供丰富的实验场景。

CT117E-M4产片图片

二、软件平台
         KEIL5,STM32CubeMX 

三、STM32G4系列定时器简介

 从数据手册当中我们可以找到,STM32G431x6/x8/xB设备包括两个高级电机控制定时器、最多六个通用定时器、两个基本定时器、一个低功耗定时器、两个看门狗定时器和一个SysTick定时器。下表比较了高级电机控制、通用和基本定时器的功能。

 表格中所含的信息大致为:

1.高级电机控制定时器(TIM1、TIM8)

        先进的电机控制定时器可以看作是8个通道上的四相PWM多路复用。它们具有可编程插入死区时间的互补PWM输出。它们也可以被视为完整的通用计时器。 4个独立通道可用于:

  • 输入捕获
  • 输出比较
  • PWM生成(边缘或中心对齐模式),具有全调制能力(0-100%)
  • 单脉冲模式输出

2.通用定时器(TIM2、TIM3、TIM4、TIM15、TIM16、TIM17)

        STM32G431x6/x8/xB设备中最多嵌入六个可同步的通用定时器(差异见上图)。每个通用定时器可用于产生PWM输出,或作为一个简单的时基。 

  • TIM2、TIM3和TIM4它们是功能齐全的通用定时器:

        –TIM2有一个32位自动加载上/下计数器和32位预分频器

        –TIM3和TIM4有16位自动加载上/下计数器和16位预分频器。

        这些定时器具有4个独立通道,用于输入捕获/输出比较、PWM或单脉冲模式输出。它们可以 一起工作,也可以通过计时器链接功能与其他通用计时器一起工作,以实现同步或事件链接。计数器可以在调试模式下冻结。它们都有独立的DMA请求生成,并支持正交编码器。

  •  TIM15、16和17它们是具有中频功能的通用定时器:

        它们有16位自动重新加载计数器和16位预分频器

        –TIM15有2个通道和1个互补通道

        –TIM16和TIM17有1个通道和1个互补通道

        所有通道可用于输入捕获/输出比较、PWM或单脉冲模式输出。定时器可以通过定时器链接功能进行同步或事件链接。定时器具有独立的DMA请求生成功能。计数器可以在调试模式下冻结。

3.基本计时器(TIM6和TIM7)

        基本定时器主要用于DAC触发器的生成。它们也可以用作通用的16位时基。 

NOTE:需要注意非常重要的一点就是TIM2、TIM3、TIM4、TIM6、TIM7APB1总线相连,TIM1、TIM8、TIM15、TIM16、TIM17APB2总线相连,在下面的配置过程中会介绍到。

四、配置过程

(一)时钟配置

通过官方给的例程我们一般将时钟配置为80MHz,这样APB1总线与APB2总线的时钟都是80MHz了,在使用时就很方便了 ,下面的定时器配置就要以80MHz为基础

(二)定时器配置

基本配置步骤: 

1.选择TIM2

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

Clock Source(时钟来源)       

  • 选项1 :Internal Clock  内部时钟 
  • 选项2 : ETR2 外部触发输入(ETR)(仅适用TIM2,3,4)

3.配置参数

  • Prtscaler (定时器分频系数):7999
  • Counter Mode(计数模式):Up(向上计数模式)                    
  • Counter Period(自动重装载值):999
  • CKD(时钟分频因子):No Division 不分频 ,选项:  可以选择二分频和四分频
  • auto-reload-preload(自动重装载): Enable 使能
  • TRGO Parameters:触发输出 (TRGO),不使能,与本节无关

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

4.使能定时器中断

NOTE: 定时器溢出时间是这样计算的

 这里我们 arr=999,psc=7999,Tclk=80MHz        Tout = (1000*8000)/80us  =  100ms

五、编写函数

首先在主函数初始化区域调用:

  /* USER CODE BEGIN 2 */
    HAL_TIM_Base_Start_IT(&htim2); //使能定时器中断
  /* USER CODE END 2 */

在中断回调函数中可以这样写:

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	i++;
	if(i==10)
	{
		i=0;
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, 0);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, 0);
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, 1);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, 1);
	}
}
/* USER CODE END 4 */

 如果出现程序在延时函数中死循环不出来,可以看看https://blog.csdn.net/m0_57147943/article/details/123518122?spm=1001.2014.3001.5501能不能帮你解决

常用函数:

HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); //使能定时器
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); //停止定时器
/* Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim); //使能定时器中断,同时使能定时器
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim); //停止使能定时器中断,同时停止定时器

六、总结

定时器中断就到这里了,如果此文章对你有帮助,欢迎点赞 关注 收藏 转发

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Cui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值