news 2026/5/1 8:54:15

STM32L475定时器实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32L475定时器实验
配置定时器TIM2


配置项解释:
Slave Mode: 正常情况下, TIM2的启动通过代码HAL_TIM_Base_Start()来控制, 但是开启Slave Mode之后, TIM2的核心操作将由外部信号触发, 如另一个定时器, GPIO电平等等, 外部触发源通过Trigger Source来配置

Prescaler(PSC - 16 bits value)通过设置PSC值, 确定定时器分频后的频率
这个值的目的是为了将输入到TIM2的时钟频率分频, 计算公式为
定时器计数频率 = 定时器输入频率 / (PSC值 + 1)
要确定定时器输入频率, 需要先看系统框图, 如下:

通过这里可以看到, TIM2定时器挂在APB1总线上, 而我们通过时钟树可知, APB1总线时钟为80MHz.

我们需要将TIM2的输入时钟设置为10kHz, 那么 10kHz = 80,000kHz / 8000
所以PSC = 8000 - 1 = 7999, 我们填写7999即可.
Counter Mode: 计数模式, Up Mode, 计数器从0开始, 每来一个计数时钟脉冲, CNT加1, 当计数器到达Auto-reload-value(ARR)是触发更新事件. Down Mode, 计数器从ARR值开始, 每个脉冲减1, 当CNTV减到0时, 触发更新事件
Counter Period (AutoReload Register - 32 bits value): 计数边界, 这个值减到0时触发一次定时事件.
这个值和PSC共同确定了定时时长, 公式如下:
定时时长 = (PCS + 1) x (ARR + 1) / 输入时钟 = 8000 x 5000 / 80000000 = 0.5s
也就是说, 每0.5秒触发一次定时事件

开启定时器中断

生成代码

tim.h

#ifndef__TIM_H__#define__TIM_H__#ifdef__cplusplusextern"C"{#endif#include"main.h"externTIM_HandleTypeDef htim2;voidMX_TIM2_Init(void);#ifdef__cplusplus}#endif#endif/* __TIM_H__ */

tim.c

#include"tim.h"/* USER CODE BEGIN 0 *//* USER CODE END 0 */TIM_HandleTypeDef htim2;/* TIM2 init function */voidMX_TIM2_Init(void){TIM_ClockConfigTypeDef sClockSourceConfig={0};TIM_MasterConfigTypeDef sMasterConfig={0};htim2.Instance=TIM2;htim2.Init.Prescaler=7999;htim2.Init.CounterMode=TIM_COUNTERMODE_UP;htim2.Init.Period=4999;htim2.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE;if(HAL_TIM_Base_Init(&htim2)!=HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;if(HAL_TIM_ConfigClockSource(&htim2,&sClockSourceConfig)!=HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;if(HAL_TIMEx_MasterConfigSynchronization(&htim2,&sMasterConfig)!=HAL_OK){Error_Handler();}}voidHAL_TIM_Base_MspInit(TIM_HandleTypeDef*tim_baseHandle){if(tim_baseHandle->Instance==TIM2){/* TIM2 clock enable */__HAL_RCC_TIM2_CLK_ENABLE();/* TIM2 interrupt Init */HAL_NVIC_SetPriority(TIM2_IRQn,0,0);HAL_NVIC_EnableIRQ(TIM2_IRQn);}}voidHAL_TIM_Base_MspDeInit(TIM_HandleTypeDef*tim_baseHandle){if(tim_baseHandle->Instance==TIM2){/* Peripheral clock disable */__HAL_RCC_TIM2_CLK_DISABLE();/* TIM2 interrupt Deinit */HAL_NVIC_DisableIRQ(TIM2_IRQn);}}

stm32l4xx_it.h

voidTIM2_IRQHandler(void);

stm32l4xx_it.c

externTIM_HandleTypeDef htim2;/** * @brief This function handles TIM2 global interrupt. */voidTIM2_IRQHandler(void){HAL_TIM_IRQHandler(&htim2);}

stm32l4xx_hal_conf.h

#defineHAL_TIM_MODULE_ENABLED

main.c

#include"tim.h"intmain(void){// ...MX_TIM2_Init();// ...}
编写中断处理代码定时器翻转LED灯

main.c

// 测试定时器反转电平HAL_TIM_Base_Start_IT(&htim2);TRACE_INFO("Tagged the LED pin in interrupt");while(1){//...}

tim.h

voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim);

tim.c

voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim->Instance==TIM2){HAL_GPIO_TogglePin(GPIOE,LED_R_Pin);// 翻转红色LED电平}}
运行效果

使用定时器反转LED效果演示

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 0:53:39

nodejs篮球资讯网站开题报告

目录 项目背景技术选型核心功能模块创新点开发计划预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 项目背景 篮球运动在全球范围内具有广泛影响力,用户对实时赛事、球员数据、新闻等…

作者头像 李华
网站建设 2026/5/1 8:54:13

springboot-基于Android的社交平台-开题报告

目录 研究背景研究意义研究内容技术路线创新点预期成果研究方法进度安排 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 研究背景 随着移动互联网的普及,社交平台逐渐成为人们日常生活中不可…

作者头像 李华
网站建设 2026/4/18 8:21:54

从零开始玩转QWEN-AUDIO:3步完成专业级语音合成部署

从零开始玩转QWEN-AUDIO:3步完成专业级语音合成部署 引言:为什么你值得花10分钟试试这个语音合成系统 你有没有过这样的经历: 做短视频时反复录旁白,录到第8遍嗓子发干,还是觉得语气不够自然;给客户做产…

作者头像 李华
网站建设 2026/5/1 5:02:34

Qwen3-Reranker-8B开源镜像实操:免配置启动文本重排序WebUI

Qwen3-Reranker-8B开源镜像实操:免配置启动文本重排序WebUI 你是不是也遇到过这样的问题:想快速验证一个重排序模型的效果,却卡在环境搭建、依赖安装、服务启动这一连串步骤上?改配置、调端口、查日志……半天过去,模…

作者头像 李华
网站建设 2026/5/1 8:53:36

设计师效率提升50%:RMBG-2.0批量处理图片背景实战

设计师效率提升50%:RMBG-2.0批量处理图片背景实战 你是否经历过这样的场景:电商运营要赶在大促前上线200款商品图,每张都要抠出干净透明底;平面设计师接到紧急需求,3小时内交付50张人像海报,却卡在发丝边缘…

作者头像 李华