STM32_TIM定时-中断

STM32F103定时器教程


今天讲解STM32F103定时器定时-中断功能,在昨天定时器延时的软件工程上添加TIM3定时的功能,自己也可以试着将昨天的工程添加修改得到。

 

今天的软件工程下载地址(360云盘):

https://yunpan.cn/cPnJ9KYcXbPsP  访问密码 acd8

 

工程现象:间隔(定时器定时)500ms LED变化一次, 并且串口打印

 

STM32F103ZE有8个定时器(TIM1 – TIM8), 改工程以TIM3定时为例。

 

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2   访问密码 ca90

 

 

关于TIM延时,我把重要的几点在下面分别讲述,工程中没有在这里讲述的都是之前就有的,重点讲述的是主题相关的内容。若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。

现将重点讲述关于TIM定时的几点内容。

 

一、定时器时钟


使能时钟:RCC_APB1Periph_TIM3。

二、定时器配置


 这里的“时钟配置”函数在bsp.c文件下面;

函数在timer.c文件下面;

详见每一句后面都有注释。

 

三、定时函数


函数在timer.c文件下面;

主要是定时ON 和OFF函数,至于为什么是定时ms,这里请参考昨天的讲解。

大致意思:TIM每秒计数1M次(系统时钟72M,  72分频),计数满1000次一个周期,也就是1usX 1000 = 1ms

见timer.h里面的宏定义:TIM3_COUNTER_CLOCK、TIM3_PRESCALER_VALUE、TIM3_PERIOD_TIMING

由这几个宏定义决定延时时间。


四、NVIC配置


函数在bsp.c文件下面;

今天的软件工程使用了中断,因此添加NVIC配置.

 

五、TIM3中断函数

函数在stm32f10x_it.c文件下面;

主要是处理TIM3定时器中断。


六、主函数应用

 

函数在main.c文件下面;

(定时器)定时500ms跳变LED、打印(发送)字符串。

上面“gTIMTiming_Nms_FlagOver”标志在第五中断

 

 

 

更多精彩文章我将第一时间在微信公众号里面分享,如果不想错过,可以关注我的微信公众号。

本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。


### ### STM32F1 TIM6 定时器中断配置和使用方法 在STM32F1系列微控制器上配置和使用TIM6定时器中断,需要通过初始化定时器时钟、设置定时器参数、配置中断以及编写中断服务函数等步骤实现。 首先,需要启用TIM6的时钟。通过调用`RCC_APB1PeriphClockCmd`函数,启用TIM6的时钟,确保定时器可以正常工作: ```c RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); ``` 接下来,使用`TIM_TimeBaseInitTypeDef`结构体初始化TIM6定时器。例如,假设系统时钟为72MHz,希望实现1ms的定时中断,可配置如下: ```c TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_TimeBaseStruct.TIM_Prescaler = 7200 - 1; // 72MHz / 7200 = 10kHz TIM_TimeBaseStruct.TIM_Period = 10000 - 1; // 10kHz / 10000 = 1Hz (1ms) TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStruct); ``` 在完成定时器参数配置后,需启用TIM6的更新中断。通过调用`TIM_ITConfig`函数,使能TIM6的更新中断: ```c TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); ``` 随后,启动TIM6定时器,使其开始计数: ```c TIM_Cmd(TIM6, ENABLE); ``` 还需要配置NVIC,以确保可以响应TIM6的中断请求。使用`NVIC_InitTypeDef`结构体设置中断优先级并启用TIM6的中断通道: ```c NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM6_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); ``` 最后,在`stm32f1xx_it.c`文件中编写TIM6的中断服务函数,并清除中断标志: ```c void TIM6_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM6, TIM_IT_Update); // 用户中断处理代码 } } ``` ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

strongerHuang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值