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

相关推荐
云上艺旅8 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
你觉得2058 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
微信153237942438 小时前
离线语音识别 ( 小语种国家都支持)可定制词组
嵌入式硬件
weixin_508821659 小时前
1ms软延时,不用定时器,stm32
stm32·单片机·嵌入式硬件
A旧城以西9 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ9 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000759 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
月阳羊10 小时前
【无人机】无人机PX4飞控系统高级软件架构
嵌入式硬件·架构·系统架构·无人机
Naive_710 小时前
蓝桥杯准备(前缀和差分)
java·职场和发展·蓝桥杯
吴梓穆10 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5