STM32MP157实验(七)——通用定时器PWM


设计需求

利用定时器产生PWM,实现LCD亮度渐变


一、基础知识

PWM(Pulse Width Modulation)、即脉冲宽度0度调制。是一种利用微处理器的数字输出来对模拟电路进行控制的技术,广泛应用在测量、通信、功率控制等诸多领域。

举个最常见的例子,利用PWM控制显示屏亮度,屏幕背光可以看作是一个大灯,这个大灯只有亮,灭两种状态。如果把灯亮看作100%,灯灭看作0%,要实现50%的亮度,可以在某个单位时间里亮灯50%时间、灭灯50%时间,只要这个单位够小,由于人眼具有视觉暂留效应,就会从宏观的感觉整个灯是一直亮着,且亮度只要原来的一半。本节就以LED灯类比屏幕背光灯实现对其亮度的控制。

PWM实质就是GPIO不断地翻转输出高低电平,这个效果可以写代码控制GPIO产生,但是这样就会占用CPU,CPU就不方便去做其他时间。MCU里都有一个定时器,配置好这个定时器,就可以让它去控制CPIO自动翻转,无需CPU再参与

STM32MP157有14个定时器TIM(各有差异),5个低功耗定时器(LPTIM)

硬件知识

参考开发板LED原理图,两个LED灯,分别使用PA10和PG8
在这里插入图片描述通过查阅数据手册可以知道两个脚都支持TIM功能
在这里插入图片描述在这里插入图片描述这里以PG8为例,设置其复用功能位TIM2_CH1输出PWM

在这里插入图片描述

STM32CubeIDE开发

MX设置

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

在这里插入图片描述

代码设计

在这里插入图片描述

在这里插入图片描述
driver_tim_pwm.h

#ifndef DRIVER_TIM_PWM_H_
#define DRIVER_TIM_PWM_H_

#include "main.h"
#include "stm32mp1xx_hal.h"
extern TIM_HandleTypeDef htim2;

extern void TIM_LED3_Start(void);
#endif /* DRIVER_TIM_PWM_H_ */

driver_tim_pwm.c

#include "driver_tim_pwm.h"
#include "stm32_hal_legacy.h"

static uint32_t pulse=0;

//设置PWM一个周期满,溢出时,的回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if(htim->Instance==TIM2){
		pulse++;//进入中断回调函数,更改pulse的值,进行更改占空比
		if(pulse>1000){
			pulse=0;
		}
		__HAL_TIM_SetCompare (&htim2, TIM_CHANNEL_1, pulse);
	}
}

//启动PWM函数

void TIM_LED3_Start(void){
	if(HAL_TIM_Base_Start(&htim2)!=HAL_OK){//轮询中断是否开启
		Error_Handler();
	}
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//开启PWM定时器
}

工程结构

在这里插入图片描述

运行结果

在这里插入图片描述
实验现象没问题,黄灯从亮变暗,一直循环

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用提供了关于通用型TIMx定时器的功能描述,引用提供了关于精简型TIM6和TIM7定时器的功能描述,引用提供了关于通用型TIMx定时器的功能描述。 通用型TIMx定时器和精简型TIM6和TIM7定时器在功能上有一些区别。其中,通用型TIMx定时器具有以下主要功能: - 16位向上、向下、向上/向下自动装载计数器 - 16位可编程的预分频器,可以实时修改计数器时钟频率的分频系数为1~65535之间的任意数值 - 多达4个独立通道,包括输入捕获、输出比较、PWM生成和单脉冲模式输出 - 死区时间可编程的互补输出 - 可使用外部信号控制定时器定时器互联的同步电路 - 支持针对定位的增量(正交)编码器和霍尔传感器电路 - 支持触发输入作为外部时钟或按周期的电流管理 而精简型TIM6和TIM7定时器具有以下主要功能: - 16位自动重装载累加计数器 - 16位可编程的预分频器,可以实时修改计数器时钟频率的分频系数为1~65536之间的任意数值 - 支持触发DAC的同步电路 - 在更新事件(计数器溢出)时产生中断/DMA请求 因此,通用型TIMx定时器和精简型TIM6和TIM7定时器在功能上存在一些差异,主要体现在通道个数、互补输出、编码器和霍尔传感器电路以及触发DAC的同步电路等方面。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32 ——高级定时器通用定时器、基本定时器的区别](https://blog.csdn.net/Arthur_Holmes/article/details/79686657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacky~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值