STM32F103VET6基于STM32CubeMX创建定时器中断控制LED闪烁
- 🌼STM32CubeMX配置界面演示
⚡需求是通过定时器1来控制LED灯1s亮灭。
- 📌工程分为两部分组成:STM32CubeMX创建并配置工程和业务代码完善
🍁STM32CubeMX创建并配置工程
1.🌿 配置时钟,选择外部8MHz晶振,通过倍频以及锁相环,最终配到APB1 和APB2 定时器时钟线上的频率为72MHz。
2. 🌿配置定时时间参数(定时周期 = (Prescaler + 1) × (Period + 1) ÷ 时钟频率
单位:秒)
3. 🌿开启定时器中断使能选项
4. 🌿在中断优先级分组中配置(配置4位抢占优先级,0位响应优先级)
可以根据需求自定义配置优先级。
- 🌿配置一个串口1,用于调试信息输出。
📝业务代码完善
- 🔨开启定时器计数。
📑在main主函数中添加如下代码,用来开启定时器计数。
/* USER CODE BEGIN 2 */
__HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_UPDATE);//启用前清除TIM中断标志位
__HAL_TIM_CLEAR_IT(&htim1, TIM_IT_UPDATE);//启用前清除TIM中断
HAL_TIM_Base_Start_IT(&htim1);//开启TIM计数
/* USER CODE END 2 */
- 🔧重写定时器中断回调函数内容。
/* USER CODE BEGIN 0 */
//TIM定时返回函数
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)//回调函数
{
if(htim->Instance == TIM1)//判断进入回调函数方式
{
printf("stm32f103");//测试USART打印函数
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);//LED端口反转
}
}
/* USER CODE END 0 */
- 📜补充串口printf调试输出代码。
📈在usart.c中补充printf重映射,并且在
target
选项中勾选Use Micro LIB
选项。在使用printf函数的地方包含stdio.h
头文件。
/* USER CODE BEGIN 1 */
#include "stdio.h"
/*可调用printf*/
int fputc(int ch,FILE *f)
{
/*&huart1指的是串口1,如果用别的串口就修改数字*/
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch , 1 , 0xffff);
return ch;
}
/* USER CODE END 1 */
📚工程源码
链接:https://pan.baidu.com/s/1Lki8Bu_d94h_XWMimx_2Ag
提取码:q3d5