stm32cubemx:systick系统定时器中断与TIM定时器中断的配置及使用方法

时钟作为单片机中十分重要的一环,没有时钟作为时间基准,我们对单片机进行编程也将变得混乱及难以把控时间度。接下来就看看怎么在stm32cubemx中查询我们自己设置的时钟吧。
首先选择RCC,然后可以看到有HSE与LSE的选项,分别为高速时钟和低速时钟,stm32单片机内部分别有1个低速时钟与1个高速时钟,外部也可以接1个外部低速时钟与1个外部高速时钟。当我们使用内部时钟时,将其选为Disable便可,当使用外部时钟时则选Crystal/Ceramic Resonator选项。
在这里插入图片描述
由于我使用内部高速时钟作为时间基准,所以高速时钟和低速时钟均选“Disable”便可。接下来让我们看一下整个MCU的时钟树:在这里插入图片描述
由图片我们可以知道现在系统时钟为8MHz,接下来就讲解一下怎么配置和使用systick定时溢出中断。

SYSTICK定时器溢出中断配置及使用:
在这里插入图片描述
接下来我们去NVIC中断设置中查看systick中断是否已经使能:
在这里插入图片描述
可以看到systick定时器中断已经默认打开且无法关断,其优先级为3(优先级数字越大其优先度越高);

然后我们再配置1个IO口输出点亮和熄灭LED灯,可供我们更加直观的看出定时器中断正在执行吧:
在这里插入图片描述
接下来就可以生成keil工程了:
在这里插入图片描述
在这里插入图片描述
点击右上角的GENERATE CODE生成即可去相应路径中打开工程了:
在这里插入图片描述

打开工程后我们找到stm32xxxx._hal.c这个文件打开,找到
if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
这段代码,如图:在这里插入图片描述
我们更改其中的1000U该值便可更改溢出中断的时间,其计算方法为
1秒/1000=1ms ,我将其更改为1秒/500=2ms;则每2ms将进入一次systick溢出中断,接下来我们在stm32xxxx_it.c中找到其中断服务函数
void SysTick_Handler(void):
在这里插入图片描述
其中我定义了一个累加值 uint16_t systime,当累加到1000的时候,即2秒,便执行1次翻转PA15电平的操作并清除计数值(该操作最好移至main函数中执行,中断中仅执行累加计数最好,本人为了方便自己所以偷懒了^~*)。接下来便编译程序,烧录程序,查看结果,将PA15连上LED后将看到其每隔两秒便亮or灭。

TIM普通定时器配置及使用:
回到stm32cubemx中,我们对该工程的时钟系统不做任何改变(即仍然使用内部8M高速时钟),对TIM3进行配置如下:
在这里插入图片描述
首先时钟还是8MHz,经过8分频后变成1MHz,即1微妙,然后累加值设置为500,则500微妙TIM3定时器将溢出执行一次中断,接下来我们先去使能TIM3溢出中断:
在这里插入图片描述

之后继续生成工程,回到工程之后找到TIM3中断服务函数,把之前在systick中断服务函数中的那部分执行程序剪切过来:
在这里插入图片描述
别急着烧录程序,这时候我们还没有打开TIM3中断定时器呢,回到main函数中,加入此程序
HAL_TIM_Base_Start_IT(&htim3);在这里插入图片描述
接下来便可以烧录程序查看结果了。可以看到LED灯将以500毫秒的时间频率进行闪烁,证明TIM3溢出中断功能已经实现。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值