这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取逻辑分析仪】定时器中断实现板载LED点亮

共2条 1/1 1 跳转至

【换取逻辑分析仪】定时器中断实现板载LED点亮

助工
2024-09-29 12:14:21     打赏

一、NUCLEO-U575ZI-Q板载LED

从官网下载该开发板原理图文件,可以看到板载有3个可供用户使用的红、蓝、绿LED,分别连接在PG2、PB7、PC7引脚上。

image.png

image.png

从以上原理图知LED并不直接连接到MCU引脚上,而是通过一个三极管间接控制LED的点亮,这样做的目的能够增强负载的驱动能力。因此以上LED输出引脚输出高电平后三极管导通,于是LED被点亮

二、LED点亮方案

本次点亮开发板LED的方案是使用定时器中断实现,每间隔1秒闪烁LED。这样做的好处是延时的操作交给定时器完成,LED定时点亮只需在定时器产生中断那一刻由CPU介入处理来完成LED的亮灭操作,那么CPU将获得更充余的时间去处理别的事务

2.1

以下使用CubeMX创建项目基本工程

image.png

将PG2、PB7、PC7引脚设置为输出模式,同时重命名为LED1_Pin、LED2_Pin、LED3_Pin

image.png

使能TIM定时器7,其中MCU的工作主频设置为160MHz,将预分频系数Pre设为16000-1,这里减1的原因是内部寄存器存储的内容是从0开始的,0到16000-1恰好是16000次。计数Counter Period设为10000-1,总的定时溢出周期T为160M/(16000*10000)=1s。

image.png

在NVIC嵌套矢量中断管理器处勾选TIM7全局中断

image.png

在Code Manager工程管理这进行以上设置

image.png

我使用MDK Keil作为开发IDE工具,CubeMX设置完成后点击右上方的Generate Code

2.2 Keil编程

在Keil工程目录下{}Functions打开stm32u5xx_hal_tim.c文件,找到如下两个函数

HAL_TIM_Base_Start_IT

HAL_TIM_PeriodElapsedCallback

第一个函数为定时器中断启动函数,由于希望定时器完成定时的同时需要回调中断函数,因此需要使用该函数。第二个函数为弱定义的定时器回调函数,这个函数需要用户重写来完成相应的中断处理。

image.png

image.png

在main.c文件重写HAL_TIM_PeriodElapsedCallback函数,添加中断处理代码,即定时1s完成RGB LED闪烁。需要注意的是,keil所有代码的编写需要放在

/* USER CODE BEGIN  */

/* USER CODE END */内

否则下一次CubeMX初始化后不在该区域内的代码会全部抹去

image.png

在main函数内启动HAL_TIM_Base_Start_IT函数

/*
重写定时器中断回调函数
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==htim7.Instance){//判断是否定时器7产生计数溢出中断
		HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
		HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
		HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);
	}
	else{
	
	}
}

三、动态修改TIM溢出周期

image.png

打开tim.c文件可以看到由CubeMX自动生成的定时器初始化代码,其中Pre、Counter Period与设置值相符。那么现在将Counter Period由9999改为5000-1,根据先前计算公式,得到定时器7的溢出周期为0.5s,因此在程序运行中就能够动态修改定时器的溢出周期

image.png

四、实验结果

微信图片_20240913194152.jpg





关键词: 定时器中断    

专家
2024-09-30 13:47:52     打赏
2楼

看看!!


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]