173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32定时器计时溢出

keros@mark 2023-03-18 资讯中心

STM32定时器的定时超时如何计算?与时钟有何关联

和定时器时钟关联的有总线APB1或APB2等时钟,定时器外设挂载在这个总线上使用的就是这个总线时钟,然后定时器配置时有个预分频值prescale可以设置分频,还有个时钟分割,这两个可以控制定时器计数的快慢。例如总线频率为72M,预分频值为71(自动+1,实际为72),那么现在的计数频率就是1M赫兹,也就是1微秒计一个数。假设时钟周期设置为1000,那么在1000个计数后(1ms时间)就会使溢出标志置位。

stm32定时器的问题

是用来产生定时器的中断溢出时间的,计算公式是:

T=Ftosc/(TIM_Period+1)*(TIM_Prescaler+1);(Ftosc是定时器时钟)

其中T,是中断溢出时间,你的这个例子就是1Sec,TIM_Period,是计数器的计数频率,TIM_Prescaler是定时器隔多少个周期溢出,化量溢出时间的。这两个数字的组合可以产生小于(最小分频因子,最大溢出周期,所产生的时间)下的任意时间。一般是产生1S,不过定时器只是用来产生1S时间太占用CPU资源了,如果想不占用CPU,可以用一个特殊的定时间,就是滴答了。最后还有第三句的意思是就产生定时器时对系统时钟的分频因子。此例中是1分频,就是不分频。

STM32 定时器计数频率怎么算,教材上只有个算溢出时间的式子,谢谢!

TIM_TimeBaseStructure.TIM_Period = 200 ;//200ms 定时时间

TIM_TimeBaseStructure.TIM_Prescaler = 71999; //72m /7200 = 1ms

TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); // Time base configuration

希望对你有帮助!需要完整例子请发邮件linliangqiu@163.com

stm32获取定时器溢出状态但不中断

前期准备:

STM32CubeMX

STM32RCT6核心板

IDE Keil(MDK-ARM)

STM32CubeMX部分

1. 配置时钟

选择STM32F103RCTx系列芯片,配置时钟的同时会自动配置IO口引脚

在这里插入图片描述

将HCLK设置为最大频率72MHz

在这里插入图片描述

2.配置TIM

在这里插入图片描述

Internal Clock(内部时钟)

Prtscaler (定时器分频系数) : 71

Counter Mode(计数模式) Up(向上计数模式)

Counter Period(自动重装载值) : 999

CKD(时钟分频因子) :No Division (不分频 )

auto-reload-preload(自动重装载) : Enable (使能)

在这里插入图片描述

勾选update interrupt(更新中断)

1. 定时器溢出时间计算公式:

在这里插入图片描述

Tout:中断溢出的时间

arr:自动重装载值

psc:定时器分频系数

Tclk:时钟频率

Tout = ((71+1)*(999+1))/72 us

Tout = ( 72 * 1000 ) / 72 us

1000us = 1ms

所以这里我们的定时时间为:1ms

也就是说单片机1ms进入一次定时器中断

2. 定时器计数模式:

向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。

向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

向上/向下计数模式(中央对齐模式):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

在这里插入图片描述

2. 计数时钟:

内部时钟(TIMx_CLK):

外部时钟模式1:外部捕捉比较引脚(TIx)

外部时钟模式2:外部引脚输入(TIMx_ETR)

内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

3.配置IO口

在这里插入图片描述

将PB0设置为:

低电平

Output模式

既不上拉也不下拉

响应速度低

4. 工程生成

在这里插入图片描述

在这里插入图片描述

工程管理依旧是这几个选项,然后GENERATE CODE,STM32CubeMX部分完成。

MDK 5部分

HAL_TIM_IRQHandler(htim1);//定时器中断处理函数

此函数的作用是判断中断是否正常,是哪一类定时器中断(溢出中断/捕获中断/PWM中断…),然后进入相应的中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定时器溢出中断回调函数

定时器中断时,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中

点开main.c在这里插入图片描述

在如图位置上添加

HAL_TIM_Base_Start_IT(htim1);//开启定时器1

1

1

然后再tim.c文件中,添加

/* USER CODE BEGIN 0 */

uint16_t Tim_cnt = 0; //定时器计数

/* USER CODE END 0 */

1

2

3

1

2

3

然后在tim.c文件中重写

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函数

在这里插入图片描述

/* USER CODE BEGIN 1 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if (htim-Instance == htim1.Instance)

{

Tim_cnt++;

if(Tim_cnt==500) //0.5s进行一次下列代码

{

Tim_cnt=0; //清0

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);

}

}

}

/* USER CODE END 1 */

1

2

3

4

5

6

7

8

9

10

11

12

13

14

1

2

3

4

5

6

7

8

9

10

11

12

13

14

设一个全局变量,每进一次中断+1,因为1ms进入一次中断,所以当Tim_cnt=500的时候(即0.5s)写入我们需要运行的代码(不要忘记清0)

编译下载时需要选择相对应的下载器,勾选以下

在这里插入图片描述

运行即可

本期工程文档——Gitee

在这里插入图片描述

stm32定时器作为外部计数器怎样配置溢出中断

1,cpu运行,和定时器是并行进行的. 2,cpu在工作中,得到了定时中断,那么它停止手头的工作去中断请求中服务,完成服务,返回原来的断点位置继续工作, 3,如果在中断服务中,定时器不关,那么在cpu执行服务时,定时器是工作的.一般建议关掉,执行完再打开.

如何让stm32定时器马上溢出

设置溢出寄存器的值为1,只要一个机器周期指令时间就会溢出从而出发中断或者是事件。

本文标签:stm32定时器计时溢出

产品列表
产品封装
友情链接