STM32—PWM

PWM介绍

脉冲宽度调制(PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。即对脉冲宽度的控制。

STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出!
STM32F03C8T6 PWM资源:
高级定时器(TIM1):7路
通用定时器(TIM2—TIM4):各四路

PWM输出模式

  • pwm输出模式1:在向上计数,一旦CNT<CCRx时输出有效电平,否侧为无效电平;向下计数时,一旦CNT>CCRx时输出为无效电平,否侧为有效电平
  • pwm输出模式2:在向上计数,一旦CNT<CCRx时输出无效电平,否侧为有效电平;向下计数时,一旦CNT>CCRx时输出为有效电平,否侧为无效电平
  • 有效电平(并非单指高电平或者低电平,需要看情况设定)
    在这里插入图片描述

PWM周期与频率

周期与频率互为倒数

TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren;
解释下公式参数意义: TimeOut:定时器溢出时间(单位为us),多少触发(进入)一次TIM中断。
Prescaler:分频TIM时钟的预分频器值。
Period(ARR):计数重载值,TIM计数当超过这个值,则重新计数。
TimeClockFren:定时器的输入时钟频率(单位MHZ),也就是当前使用的TIM所用的CLOK的时钟频率。如果不清楚,可通过相关参数得到。

PWM实验

需求:使用pwm点亮led实现呼吸灯效果

问:led为什么可以越来越亮,越来越暗
答:这是由不同的占空比决定的 (占空比理解:占空比就是指在一个周期内,信号处于有效电平的时间占据整个信号周期的百分比)
问:如何计算周期/频率
答:假如频率为2khz,则PSC=71,ARR=499
问:led连接到哪个定时器的哪一路
答:从原理图看led连接到哪个IO口,在产品手册中搜索对于IO口查询
如下图
在这里插入图片描述
用CubeMX构建工程
1.修改debug
2.设置时钟
3.设置TIM4
在这里插入图片描述
主要设置这一块
在这里插入图片描述
关于TIM4设置的自动生成代码
在这里插入图片描述

启动PWM

HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);

修改比较值,修改占空比

__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,pwmVal);
int main(void)
{
  /* USER CODE BEGIN 1 */
	uint16_t pwmVal = 0;
	uint8_t dir = 1;//改变方向:1越来越亮,0越来越暗
	
	
		
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

	
	
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM4_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
    /* USER CODE END WHILE */
		HAL_Delay(1);
		if(dir){
			pwmVal++;
		}else {
			pwmVal--;
		}
		if(pwmVal > 500){
			dir  = 0;
		}
		if(pwmVal == 0){
			dir = 1;
		}
		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,pwmVal);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值