news 2026/10/16 22:25:07

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/10/16 10:06:34

deepaccident复现个人问题记录

环境4090 cuda11.3 torch1.10.2 mmcv1.4.0,可以跑通 问题1:installationDeepAccident/docs/installation.md at main tianqi-wang1996/DeepAccident​​​​​​ 要求的cuda版本是10.2,不兼容 RuntimeError: CUDA error: no kernel image…

作者头像 李华
网站建设 2026/10/15 19:39:33

SpringBoot Servlet 容器全解析:嵌入式配置与外置容器部署

在 SpringBoot Web 开发中,Servlet 容器是核心基础设施。SpringBoot 提供了两种容器使用方式:嵌入式容器(默认)和外置容器,前者便捷轻量,后者适配传统 Web 场景(如 JSP 开发)。本文将…

作者头像 李华
网站建设 2026/10/14 16:30:02

Mumbai: 1靶机记录

nmap端口扫描 nmap -p- -sV -T4 -A 192.168.124.130 ftp下载node文件 TODO: Move these multiple HTTP Servers running to Docker. I hear containers make things inherently secure - maybe this will shut those security researchers up. Also, dont forget to remove a…

作者头像 李华
网站建设 2026/10/16 15:24:33

FaceRecon-3D应用案例:电商虚拟试妆的3D人脸解决方案

FaceRecon-3D应用案例:电商虚拟试妆的3D人脸解决方案 你有没有想过,为什么用户在电商App里点开一款口红,却迟迟不下单?不是价格问题,也不是品牌信任度不够——而是“看不到上脸效果”。传统平面图、模特图、甚至AR滤镜…

作者头像 李华
网站建设 2026/10/16 10:12:54

TranslateGemma模型轻量化:嵌入式Linux系统的移植与优化

TranslateGemma模型轻量化:嵌入式Linux系统的移植与优化 1. 引言 在嵌入式设备上部署AI模型一直是开发者面临的挑战之一。Google最新开源的TranslateGemma模型以其轻量化和高效性,为嵌入式Linux系统上的多语言翻译任务提供了新的可能性。本文将带你一步…

作者头像 李华
网站建设 2026/10/12 1:13:59

ccmusic-database快速上手:使用curl命令行调用HTTP API进行批量测试

ccmusic-database快速上手:使用curl命令行调用HTTP API进行批量测试 你有没有遇到过这样的场景:手头有几十个音乐片段,想快速知道它们分别属于什么流派?打开网页上传、等待分析、再点下一个……重复操作让人疲惫不堪。ccmusic-da…

作者头像 李华