嵌入式蓝桥杯学习7 产生PWM

Cubemx配置

打开cubemx,前面的配置看上文,这里主要配置定时器产生PWM波。

以PA1的TIM2-CH2通道为例进行演示。

1.在Timers中打开TIM2,将Channel2配置为PWM Generation CH2。

2.将Clock Source 选择为Internal Clock。

3.配置Paramater Settings中的参数。

Prescalar(PSC)预分频:80-1

counter Mode(计数模式):Up

counter period(计数器的值):1000-1

Internal Clock Division(CKD)时钟分频因子:No Division

auto-reload preload(自动重装载值):Enable(使能)

4.配置PWM Generation Channel 2中的参数。

Mode(模式):PWM mode 1

Pulse:400(设置占空比为40%,如果要换别的占空比,可自行修改)

Output compare preload:Enable

CH Polarity:High

点击GENERATE CODE.

代码编写

知识补充

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

功能:是启动定时器 htim2 的脉宽调制(PWM)功能,并且具体是对 TIM_CHANNEL_2 这个通道来启动的。这意味着定时器 htim2 的通道 2 将会按照预先配置好的参数(比如频率、占空比等设置,这些设置一般是在初始化定时器时就完成了的)开始输出 PWM 信号了。

__HAL_TIM_SET_AUTORELOAD(&htim2,250);

功能:用于设置定时器 htim2 的自动重装载值,在这里将自动重装载值设置为 250,也就意味着定时器 htim2 的计数范围被限定在了 0250 这个区间。

__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,100);

功能:用于设置定时器 htim2 中指定通道(这里是 TIM_CHANNEL_2)的比较值。定时器的计数值会和这个比较值进行比较,当计数值小于比较值时,输出通道对应的电平状态(比如高电平)会保持,而当计数值达到或者超过比较值时,电平状态会发生改变(比如变为低电平),通过改变这个比较值就可以改变 PWM 信号的占空比。这里将比较值设置为 100,结合前面设置的自动重装载值 250,可以大致算出当前 PWM 信号在一个周期内高电平所占的时长比例(即占空比,这里大致为 100/250),从而实现对输出信号占空比的控制。

代码

示例:设置输出频率为4KHz,占空比40%。

my_main.c

复制代码
#include "my_main.h"
char text[30];
void LED_Disp(uint8_t dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭(l小写)
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位:控制C8-15引脚,值为1的点亮
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}
void setup()
{
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
	LED_Disp(0x00);//关掉所有LED
	LCD_Init();//LCD初始化
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
}
void loop()
{
    if(bkey[1].short_flag==1)
	{
		sprintf(text,"    KEY_1 down!    ");
		LCD_DisplayStringLine(Line8,(uint8_t *)text);//局部刷新	
		
		__HAL_TIM_SET_AUTORELOAD(&htim2,250);
		__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,100);
		bkey[1].short_flag=0;
	}
}

按键函数在上一篇有提到,详情请移位上篇文章。

原文链接:https://blog.csdn.net/m0_74246768/article/details/144298243

相关推荐
sulikey5 分钟前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
m0_5474866615 分钟前
《单片机原理及应用》全套PPT课件2026版
单片机·嵌入式硬件
十月的皮皮40 分钟前
STM32从零到量产开发:四路继电器工业控制模块开发原理小灶 · 合集
stm32·单片机·嵌入式硬件·stm32cubemx·hal库
小羊先生car44 分钟前
F429-HAL 库驱动框架(2026/7/22)
单片机·嵌入式硬件
治愈系贝壳1 小时前
ARM --- day 6 时钟
linux·arm开发·学习
小羊先生car1 小时前
F429-SysTick(2026/7/22)
stm32·单片机·嵌入式硬件
minglie11 小时前
zynq高频小数据量PS闭环的三个实验-第0课:目的和目标
学习
劈星斩月2 小时前
监督学习算法 之 决策树
学习·算法·决策树
hongmai6668882 小时前
ESP32-C61-WROOM-1-N8R2:Wi-Fi 6与RISC-V融合的中坚力量
人工智能·单片机·嵌入式硬件·物联网·智能家居·risc-v
AOwhisky2 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算