STM 32 TIM定时器(1)

基础计时器控制LED灯定时熄灭开启

设置分频器

计时频率为F=72Mhz/7200=1X10^4=10000

这样一次计数就是0.1ms,方便计算

设置ARR

ARR设置为1000,这样计时器1000次进行重装载,也就是0.1msX1000=100ms进行重装载

关于为什么需要减1,那是因为在更新的时候系统会默认+1

配置按键与LED灯

启动中断

cpp 复制代码
	//启动定时器中断
	HAL_TIM_Base_Start_IT(&htim2);

中断溢出回调函数

cpp 复制代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim -> Instance == TIM2)
	{	//翻转电平
		HAL_GPIO_TogglePin(GPIOA,LED_R_Pin|LED_G_Pin|LED_B_Pin);
	}
}

主循环程序

cpp 复制代码
  while (1)
  {
    if (HAL_GPIO_ReadPin(GPIOA,KEY1_Pin) == GPIO_PIN_SET)
		{
			mode = !mode;
			HAL_TIM_Base_Stop_IT(&htim2);
			__HAL_TIM_SET_AUTORELOAD(&htim2,tim2_arr[mode]);
			__HAL_TIM_SET_COUNTER(&htim2,0);//计数值清0
			HAL_TIM_Base_Start_IT(&htim2);
			while(HAL_GPIO_ReadPin(GPIOA,KEY1_Pin) == GPIO_PIN_SET);
		}
		/* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

应用------PWM

PWM(Pulse Width Modulation)即脉宽调制,是一种通过控制**高电平持续时间(占空比)**来模拟连续电压信号的方法。

由定时器的通道输出提供,具有固定频率、可调脉宽的方波信号。信号频率由自动重装寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。

假设分频设置为7200,那么计时频率为F=72Mhz/7200=1X10^4=10000,也就是每次计数就是0.1ms,ARR为自动重装寄存器,如果设置为100,那PWM波的周期就是T=100X0.1毫秒=10ms,那么PWM周期就是10ms,CCR就是控制占空比的。

举个例子:例如ARR=100,CRR为50,这两个都是计数器ARR决定PWM周期,CCR决定在100计数中有多少计数是高电平或者低电平

实验TIM分频采用72,F=72Mhz/72=1X10^4=1000000,那么每次计数为1us,那么ARR=20X1000

CubeX PWM设置

这里没有舵机,我们示波器来测试输出的PWM波

呼吸灯

cubex设置

pwm输出改为低电平

主程序

复制代码
 while (1)
  {
	__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,pwm_val);
	__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_3,pwm_val);
	__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,pwm_val);
		
	pwm_val += dir;
	if (pwm_val >= 1000) dir = -10;
	if (pwm_val <= 0) dir = 10;
	HAL_Delay(5);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

TIM触发ADC采集

TIM触发ADC采集内部温度

流程步骤:

  1. 开始 - 流程起点
  2. TIM3 TRGO周期性触发 - 定时器每1秒产生一次触发信号
  3. 触发ADC1进行单次转换 - ADC被触发执行单次模数转换
  4. 采集内部温度值 - 读取内部温度传感器的电压值
  5. 使用公式计算温度 - 应用温度计算公式

内部温度计算公式

复制代码
T(°C) = (1.43 - 当前电压) / 0.0043 + 25

定时器TIM3设置,采集内部数据就是用内部时钟

ADC设置

ADC采集时间

CubeX 界面

编译选项

打开串口软件,实验现象

相关推荐
Freak嵌入式4 小时前
MCU 低功耗模式解析:时钟门控、电源门控、深度休眠
人工智能·python·单片机·嵌入式硬件·开源·依赖倒置原则·micropython
国科安芯5 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
躺不平的理查德5 小时前
STM32时钟树(Clock Tree)
stm32·单片机·嵌入式硬件
Javenwww7 小时前
STM32中DMA的使用——串口数据的DMA传输
单片机
qq_401700417 小时前
经典的电压基准源电路
单片机·嵌入式硬件
茯苓gao8 小时前
嵌入式开发笔记:电机参数辨识与自学习完全指南——从电气参数到机械特性的深度解析
笔记·嵌入式硬件·学习
西安景驰电子8 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
派勤电子9 小时前
5G物联网网关工控主板选型指南(超小尺寸工业级嵌入式硬件解决方案)
嵌入式硬件·工业网关·工控主板·工控主板选型·嵌入式工控主板·5g物联网网关·超小尺寸工控主板
&Hello Code9 小时前
2.一套可落地的 STM32 六层架构:基础工程框架搭建
stm32·嵌入式硬件·架构
sramdram10 小时前
高速低功耗stt-mram工业级存储方案
嵌入式硬件·mram·stt-mram·低功耗stt-mram