stm32定时器和PWM

stm32定时器

STM32是一系列基于ARM Cortex-M内核的32位微控制器,由STMicroelectronics公司生产。STM32微控制器内置了一组丰富的定时器功能,这些功能在嵌入式应用中被广泛使用,如产生精确的时间间隔、脉冲测量、脉宽调制(PWM)等。

STM32定时器大致可以分为以下几种类型:

基本定时器 (Basic Timers):基本定时器主要用于产生固定周期的中断或触发事件。它们通常只具备计数、溢出和中断功能。STM32F103系列中,TIM6和TIM7属于基本定时器。

通用定时器 (General-purpose Timers):通用定时器具有基本定时器的功能外,还支持输入捕获(用于测量外部信号频率、占空比等)、输出比较(产生PWM波形等)和更高的计数模式。STM32F103系列中,TIM2、TIM3和TIM4属于通用定时器。

高级定时器 (Advanced Timers):高级定时器拥有通用定时器的功能,还具备更高级的控制功能,如互补PWM输出、死区控制、断电控制、控制PWM输出的切换频率和同步功能。在 STM32F103 系列中,TIM1 和 TIM8 属于高级定时器。

专用定时器:此类定时器针对某些特定应用进行优化,例如系统滴答定时器(SysTick Timer, 用于操作系统任务调度)、实时时钟(RTC, 用于实时时钟和日历功能)等。

我们使用keil5进行相关环境配置
请添加图片描述
请添加图片描述
在keil5上选择相关芯片以及进行库文件添加
然后进行相关环境配置。

int a=0;
static void NVIC_Config(void)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitStruct.NVIC_IRQChannel=TIM3_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStruct);
}

void LED_Toggle(void)
{
	GPIOB->ODR ^= GPIO_Pin_0;
}

void TIM3_Config(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	
	NVIC_Config();
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	
	TIM_TimeBaseInitStruct.TIM_Period=71;
	TIM_TimeBaseInitStruct.TIM_Prescaler=1000;//1ms
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
	
	TIM_ClearFlag(TIM3, TIM_FLAG_Update);
	
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
	
	TIM_Cmd(TIM3, ENABLE);
}

void TIM3_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM3, TIM_IT_Update)) a++;
	if(a == 1000)
	{
		LED_Toggle();
		a = 0;
	}
	TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}

在main函数里面进行配置。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIOB->ODR ^= GPIO_Pin_0;

	TIM3_Config();
	
	while (1)
	{
	
	
	}

然后编译拷贝,进入硬件可以得到结果。
请添加图片描述
请添加图片描述

PWM

脉宽调制(Pulse Width Modulation,简称PWM)是一种在数字系统中常用的方式来控制模拟电路。基本思想是使用数字输出(通常是微控制器的一种功能)生成一串脉冲,然后修改这些脉冲的宽度(也就是持续时间)来编码一个特定的模拟信号级别。
我们使用cubemx的hal库来进行环境配置。
请添加图片描述
打开cubemx选择芯片请添加图片描述
配置sys
请添加图片描述
继续配置RCC
请添加图片描述
配置定时器
请添加图片描述
配置NVIC
请添加图片描述
代码配置里面勾上select
请添加图片描述
配置USART1串口。

进行定时器的不同配置。
请添加图片描述
然后生成代码,直接进入keil5
请添加图片描述
写入main函数代码

while (1)
  {
   HAL_Delay(50);
		duty_num = duty_num + 10;
		if(duty_num > 500)
		{
			duty_num = 0;
		}
		__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,duty_num);
	  
	  
	  
  }

然后我们使用keil的逻辑分析仪
请添加图片描述
以及之前一样的硬件结果。
请添加图片描述
文献参考:

  1. https://blog.csdn.net/m0_63185906/article/details/134209635
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值