在STM32CubeMX中配置 PWM

一、基本配置

  首先来基本的配置

1.将debug  改为  模拟输出

2.在RCC中选择内部晶振(有需要也可以选外部晶振)

3.开始配置引脚

4.配置时钟树(省略)

这里我设置72HZ 

5.最后的收尾设置(前面一期有讲)

 正式开始PWM的配置

 1、PWM的设置需要 定时器的时钟 来控制频率(具体的可以看另一期文章)

      这里以TIM3的Channel1为例介绍。

        

2、先开启内部时钟,然后选择PWM的模式一

可以看到PA6被设置 TIM_CH1

3、接着配置参数

前面提到时钟树72MHZ ,也就是7200万脉冲每秒,为了方便计算,可以将它72分频,这样定时器便是每秒计数1000000次。

可以将自动重装载值设置为数100次,每秒就会有一万次从0数到99的过程,也就是说一秒钟就会输出1万组PWM波形,这就是PWM的频率,10000HZ。

从0数到99这一过程所用的时间也就是PWM的周期,万分之一秒,0.1ms。

由于自动重装值设置为了100-1,所以比较寄存器的值只能在0-99中赋值。

比如这里给50。那么初始的占空比,就是50/100=50%.

之后写代码改变 比较寄存器 的值时候,改的就是这个 50.

如果ARR给2000-1,那么你的比较寄存器的值就是在0-1999之间设置。占空比计算同理。

注意  

PWM是模拟电压输出,如果你通过上面的设置为周期1s ,它就会每一秒去给你输出一个电压,这样的话,灯泡你看起来就是一闪一闪的。

    但是你要是那个时间设的很短的话,比如说你通过调整这两个数字,使它调整到那个时间是0.1ms,一个非常小的数字的话,那么实际上它还是噔噔噔噔噔不断在闪,但是因为它时间太短了,闪闪的时间太短了,咱们肉眼看不出来,所以就咱们肉眼就认为它是一种常亮状态。

4、NVIC使能(图略)

至此基本配置结束。后面再收尾生成代码即可。

二、在keil5中编写代码 改变PWM的占空比

找中断服务函数和回调函数的过程不在赘述,在前面 定时器中断 那里有介绍。

这里也是利用 定时器内部中断的方式 来控制PWM的占空比。

这是使能的代码。

下面来看具体的函数实现部分。

int i = 0;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim -> Instance == TIM3)
	{
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_3,i+=20); 
		
		if(i == 100)
		{
			i = 0;
		}
		
	}
}

 这样就可以实现 一个定时器产生中断,每秒触发一次中断,在中断服务程序中,改变PWM的占空比,实现LED亮度的周期性变化。

这里提一下,LED的引脚 应该负极接地,正极链接到PWM的输出口。

---------------------------------------------------------------------------------------------------------------

文章结束,记录stm32学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值