STM32基本定时功能

1、定时器就是计数器。

2、怎么计数?

3、我们需要有一恒定频率的方波信号,再加上一个寄存器。

4、比如每来一个上升沿信号,寄存器值加1,就可以完成计数。

5、假设方波频率是100Hz,也就是1秒100个脉冲。那寄存器值到达100时,我们就知道时间过去了1秒钟。

好,好,好,非常好。

1、基本定时器

1、对于STM32F103来说,使用外部晶振,基本定时器的最高频率可以达到72MHz。也就是1秒钟72*1 000 000次。

2、计数器是一个16bit的数据。最大为65536。65536 ÷ 72 000 000 = 0.0009秒。即最多只能定时器0.0009秒,显示不太合适。所以:

1.1、预分频器

1、预分频器就诞生了。它的作用是可以将定时器的频率进行分频。

2、比如:预分频器(Prescaler)设置为1,则是二分频,36MHz。 Prescaler设置为2,则是三分频,24MHz。

3、预分频器也是一个16bit的数据,最大设置为65535分频。

1.2、自动重装载值

1、其作用是当计数器计到与自己相同值时,便将计数器的值重置为0。

2、如果想定时m个脉冲 ,就需要设置自动重装载值为m-1(因为计数是从0开始的)。

2、普通计数使用

2.1、相关函数介绍

一、关于计数器

①:获取计数器的值

c 复制代码
__HAL_TIM_GET_COUNTER(&htim2);

②:设置计数器的值

c 复制代码
__HAL_TIM_SET_COUNTER(&htim2);

二、关于自动重装载值

①:获取自动重装载值

c 复制代码
__HAL_TIM_GET_AUTORELOAD();

①:设置自动重装载值

c 复制代码
__HAL_TIM_SET_AUTORELOAD();

三、关于预分频器

①:设置预分频器值

c 复制代码
__HAL_TIM_SET_PRESCALER();

四、开启定时器

c 复制代码
HAL_TIM_Base_Start();

2.2、配置

1、这里配置定时器2,这里选择内部时钟,预分频器设置为7200-1,即7200分频,分频后频率为10000Hz,就是一秒计数10000次。

2、自动重装载值设置为10000-1。即每计时1秒,计数器值就会达到10000-1,然后清0。

3、cubeide配置如下:

2.3、代码

c 复制代码
HAL_TIM_Base_Start(&htim2);
while (1)
{
	/* USER CODE END WHILE */
	
	/* USER CODE BEGIN 3 */
	counter = __HAL_TIM_GET_COUNTER(&htim2);
	sprintf(message,"counter %d\r\n",counter);
	HAL_UART_Transmit_IT(&huart1, (uint8_t *)message, strlen(message));
	HAL_Delay(99);
}

2.4、效果

每隔100ms,计数器加1000。

3、定时器更新中断使用

1、实现定时器计数,每次到达自动重装之后触发中断,完成一些任务,然后继续计数。

3.1、配置

2、接着上面的配置增加如下配置;

3.2、代码

c 复制代码
//开启定时器中断
HAL_TIM_Base_Start_IT(&htim2);
c 复制代码
//重写定时器中断函数`HAL_TIM_PeriodElapsedCallback`
char data[] = "^_^ ^_^ ^_^ ^_^";
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim == &htim2)
	{
		HAL_UART_Transmit_DMA(&huart1, (uint8_t *)data, strlen(data));//串口发送数据
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);//led翻转
	}
}

3.3、效果

4、框图

1、万变不离其宗,框图如下

相关推荐
某林2123 小时前
ROS2与STM32通信详解
stm32·单片机·嵌入式硬件
EVERSPIN6 小时前
MCU微控制器,N32H47x高性能MCU机器人关节控制方案
单片机·嵌入式硬件·机器人·mcu微控制器
0南城逆流06 小时前
【STM32】知识点介绍三:哈希算法详解
stm32·嵌入式硬件·哈希算法
云山工作室6 小时前
基于STM32单片机的正激式开关电源设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·课程设计·毕设
芯希望6 小时前
芯伯乐700mA线性稳压器XBLW L78M05H/L78M12H:稳定可靠,简化电源设计
单片机·嵌入式硬件
lingzhilab7 小时前
零知IDE——STM32F407VET6驱动SHT40温湿度传感器与ST7789实现智能环境监测系统
stm32·单片机·嵌入式硬件
贝塔实验室9 小时前
Altium Designer 6.3 PCB LAYOUT教程(四)
驱动开发·嵌入式硬件·硬件架构·硬件工程·信息与通信·基带工程·pcb工艺
星辰pid9 小时前
stm32的gpio模式到底该怎么选择?(及iic,spi,定时器原理介绍)
stm32·单片机·嵌入式硬件
brave and determined10 小时前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件
axuan1265110 小时前
10.【NXP 号令者RT1052】开发——实战-RT 看门狗(RTWDOG)
单片机·嵌入式硬件·mcu