这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32WBA55PWM控制LED灯亮度

共5条 1/1 1 跳转至

STM32WBA55PWM控制LED灯亮度

助工
2025-01-02 02:25:19     打赏

简介

在本章节中我们将根据刘工的视频演示来使用STM32CUBE MX结合STM32CUBEIDE快速的初始化PWM以及输出PWM波形从而通过不同的占空比配置来控制LED灯的亮度。之后将使用示波器对输出进行验证。


1- 项目导入, 首先我们使用stm32CUBE IDE导入官方提供的P2P-server的项目。

image.png


2- STM32CUBEMX 配置定时器和PWM输出

image.png

在电脑上已经安装好CUBEMX的前提下打开这个CUBEMX工程。


3- 配置PWM和定时器输出

image.png

在TIMER2 通道4 处使能PWM输出, 当我们配置完这个输出之后我们可以看到右侧的Pinout的overview 已经被配置到了TIM2通道4.


4- PWM参数配置。image.png

根据上图配置, 使用的HSI作为系统时钟(未使用HSE), 之后经过一系列的分频和倍频等。在APB1 和APB2 总线上的定时器主频都为16MHZ。


之后我们需要配置PWM的相关配置。

image.png

STM32 定时器的分频器寄存器(PSC)的值表示的分频因子是 (PSC + 1)。也就是说:

  • 如果 PSC 设置为 0,则分频因子为 1,表示不分频。

  • 如果 PSC 设置为 1,则分频因子为 2。

  • 如果 PSC 设置为 xx,则分频因子为 xx + 1。

因此,当目标分频因子为 xx 时,PSC 的值需要配置为 xx - 1。

所以PSC设置为16。根据PWM的频率计算公式我们可以根据上述参数来计算出PWM的实际频率。 即Frequence (pwm) = Frequence(Sys) / (PSC + 1) * (APR + 1) 即结果为1K。 所以PWM的频率为1KHZ。

占空比的实际计算可以通过Pulse / Counter  所以上图默认的占空比为50%。

之后我们点击生成代码, 在Main.c中进行测试。

5- 测试(测试代码如下)

int main(void)
{

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

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

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
MX_APPE_Config();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

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

/* Configure the peripherals common clocks */
PeriphCommonClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_GPDMA1_Init();
MX_RAMCFG_Init();
MX_RTC_Init();
MX_RNG_Init();
MX_ICACHE_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/* Init code for STM32_WPAN */
MX_APPE_Init(NULL);

__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 100);  // 设置占空比
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);           // 启动PWM输出

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
MX_APPE_Process();

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}


在上述代码中我们手动修改占空比为 10 % ,即 100 / 1000. 同时我们需要使能PWM输出。根据原理图得知PA6的Pin 对应Arduino接口的A1.

image.png


因此我们可以硬件按照以下接线。

0cd682858ebdf96af3c0b2401d344b1.jpg


烧录代码, 观察示波器的波形。

image.png


如上图所示, 占空比为10%, 频率为1Khz 和期望的实验结果相符。 之后我们便可以通过蓝牙设备等来动态的调整占空比信息。来改变LED的亮度。 如下图所示,占空比为90%。


__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 900);  // 设置占空比

image.png



专家
2025-01-02 05:26:30     打赏
2楼

学习了


高工
2025-01-02 06:49:19     打赏
3楼

感谢楼主分享


高工
2025-01-02 08:22:30     打赏
4楼

谢谢分享


专家
2025-01-02 09:54:34     打赏
5楼

感谢楼主分享


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]