嵌入式蓝桥杯学习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

相关推荐
smartpi_ai32 分钟前
CI-73T 的三个串口怎么分?下载口固定的引脚账本、词条 150 条的“词数“口径与硬 PWM 控舵机的性能边界
单片机·嵌入式硬件·语音识别
艾芯微科技40 分钟前
ESDUNL24VC1 单向 ESD 静电保护二极管参数、电路设计与 PCB 防护布局
网络·单片机·嵌入式硬件·集成测试·51单片机
Kuakewei88842 分钟前
OVP/OCP过压过流保护芯片设计指南:过压关断、限流与短路保护
嵌入式硬件
佳児素花痴╮1 小时前
STM32(中断)
stm32·单片机·嵌入式硬件
传奇开心果编程1 小时前
【Rust入门知识点学与练】第36课:所有权——移动、借用、Copy、切片
开发语言·学习·rust
传奇开心果编程1 小时前
【Rust入门知识点学与练】第35课:工具链与反馈环——先学会读编译器在说什么
开发语言·学习·rust
ZLG_zhiyuan2 小时前
示波器探头选型指南:5大分类,3步正确适配(附避坑清单)
单片机·嵌入式硬件
优化Henry2 小时前
学习笔记之关于MME不通问题归纳
运维·网络·学习·5g·信息与通信
M78佐菲10 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
高亦真10 小时前
今天是学习嵌入式的第37天
linux·学习·算法