定时器_STM32定时器-基本定时器1

博客主要围绕定时器时钟展开,介绍了AHB1时钟总线与APB2、APB1的连接,APB1最高频率42MHZ,APB2最高频率84MHZ。还说明了定时器时钟频率情况,如APB1上定时器一般频率乘2,APB1分频系数为1时除外,同时提及不同定时器的位数。

我是鼎!


定时器时钟

定时器时钟一定要明确其中有哪些变数。

115991e2d35b15222b197a6499d7eade.png

图1

上图为stm407数据手册摘出来的,图片可能看不清楚,其实就蕴含了几点信息。

  • AHB1时钟总线通过桥,接到APB2、APB1,而APB1最高频率为42MHZ,APB2最高频率为84MHZ。

注意一点,我们看图2,我们以APB1举例,上面挂着很多的外设,包括USART1、ADC、以及定时器,我们知道APB1上面最高时钟频率为84MHZ,但是定时器的时钟是要在此基础上乘2,也就是168MHZ。只有一种例外,就是APB1分频系数为1的时候,详情可以看图3和图4。官方文档是这么写的:与 APB2 连接的定时器通过频率高达 168 MHz 的 TIMxCLK 驱动,而与 APB1 连接的定时器则通过频率高达 84 MHz 的TIMxCLK 驱动。

  • APB1上面挂着TIM2、TIM3、TIM4、TIM5、TIM12、TIM13、TIM14时钟,这些定时器最高频率为84MHZ,APB2上面挂着TIM1、TIM8、TIM9、TIM10、TIM11,他们对应的最高频率为168MHZ.
  • 定时器2和定时器5是32位,其他都是16位定时器。
e4620569e75b7da25e593e14d6d2d541.png

图2

0bee9e42e703da26926d92979650de72.png

图3

fc72adfaeea17974fbd12182384997a7.png

图4

好的,我可以为您解答关于STM32系统滴答定时器(systick)应用的问题。 系统滴答定时器(systick)是STM32中一个非常重要的计时器,它是一个24位的递减计数器,每当计数器减为0时,会触发一个中断。它通常用于操作系统的时间片轮转、延时函数的实现等。 在STM32中,我们可以通过如下代码使能系统滴答定时器: ```c // 使能系统滴答定时器 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; ``` 然后,我们可以通过如下代码设置系统滴答定时器的时钟源和计数器值: ```c // 设置系统滴答定时器的时钟源和计数器值 SysTick->CTRL &= ~SysTick_CTRL_CLKSOURCE_Msk; // 使用处理器时钟作为时钟源 SysTick->LOAD = SystemCoreClock / 1000 - 1; // 设置计数器值为1ms ``` 在这段代码中,我们将系统滴答定时器的时钟源设置为处理器时钟,每次计数器减1代表1个处理器时钟周期的时间。然后我们将计数器的初值设置为`SystemCoreClock / 1000 - 1`,这里的`1000`代表我们希望系统滴答定时器1ms中断一次。 最后,我们需要在中断服务函数中处理系统滴答定时器中断: ```c void SysTick_Handler(void) { // 处理系统滴答定时器中断 } ``` 在中断服务函数中,我们可以编写自己的代码来处理系统滴答定时器中断。例如,可以实现一个简单的延时函数: ```c void delay_ms(uint32_t ms) { uint32_t i; for (i = 0; i < ms; i++) { while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待计数器减为0 } } ``` 这个函数可以让程序在执行到它的时候暂停一段时间,等待系统滴答定时器中断触发一定次数后再继续执行。 希望这些代码可以帮助您更好地理解STM32系统滴答定时器的应用。如果您还有其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值