当前位置:   article > 正文

HAL库—定时器Timer使用及PWM_hal 定时器

hal 定时器

51单片机定时对比

51单片机的延时(软件定时):

//由stc软件生成的51延时代码
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

缺点:不精确、占用CPU资源

stm32定时器工作原理:

使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器。
在这里插入图片描述

定时器分类:

  • 基本定时器(TIM6~TIM7)
  • 通用定时器(TIM2~TIM5)
  • 高级定时器(TIM1和TIM8)

在这里插入图片描述

STM32F103C8T6定时器资源:

在这里插入图片描述
通用定时器介绍:

  1. 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
  2. 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的
    任意数值。
  3. 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
    A.输入捕获
    B.输出比较
    C.PWM 生成(边缘或中间对齐模式)
    D.单脉冲模式输出
  4. 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)
    的同步电路。
  5. 如下事件发生时产生中断/DMA:
    A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
    C.输入捕获
    D.输出比较
    E.支持针对定位的增量(正交)编码器和霍尔传感器电路
    F.触发输入作为外部时钟或者按周期的电流管理

定时器计数模式:

在这里插入图片描述
在这里插入图片描述

定时器时钟源:

在这里插入图片描述

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

在这里插入图片描述
(PSC为分频系数)(ARR为重装载值)(Tout为输出时间(需要))(Tclk为时钟频率)
已知:Tclk = 72MHZ
例如,要定时1000ms,则:PSC=7199,ARR=9999,Tclk=72M

#############################################################################

PWM资源

  • 高级定时器(TIM1):7路
  • 通用定时器(TIM2~TIM4):各4路

PWM输出模式:

  • PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向
    下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。

  • PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向
    下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。

在这里插入图片描述
PWM占空比:由TIMx_CCRx寄存器决定。

PWM配置(Cube Max)

在这里插入图片描述

//启动tim2
HAL_TIM_Base_Start_IT(&htim2);
//配置占空比
//参数:句柄,通道,值
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
  • 1
  • 2
  • 3
  • 4
  • 5

PWM呼吸灯实验

int main()
{
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t flag=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小

// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
	while (1)
	{
		HAL_Delay(1);
		if (flag)
		pwmVal++;
		else
		pwmVal--;
		if (pwmVal > 500)
		flag = 0;
		if (pwmVal == 0)
		flag = 1;
		//修改比较值,修改占空比
		__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

结束

如果有问题,欢迎提出,共同进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/739205
推荐阅读
相关标签
  

闽ICP备14008679号