STM32CUBEMX_基于PWM的呼吸灯

实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样

本节实验中,使用TIM2,输出一个PWM波形,用来驱动LED。TIM2的输出通道选择通道2,也就是PA1,输出PWM的占空比随时间变化,以此来实现一个呼吸灯的效果。LED选择板子上的LED2:

因为连接它的管脚PA1是TIM2的PWM输出通道,通道2,如图:

接下来打开STM32CUBEMX,进行相应操作:

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

参照实验1,芯片选择“STM32F103C8”。

打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。

选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、配置定时器2。如图,位置1选中定时器2;位置2选择时钟源为“Internal Clock”,通道2选择“PWM Generation CH2”

位置3设置分频系数为71,计数周期为500,其它默认。

位置4设置占空比初始值为10,其实这里不写也没影响。

3、时钟配置。参照实验1.

4、参照实验1的步骤7,进行相应配置,生成工程文件。

5、修改工程。打开工程,主要修改main.c文件。先是位置1,定义一个变量,用来存储占空比:

初值设为10.

uint16_t duty_num = 10;

位置2,开始TIM2的通道2,输出PWM。

代码:

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

位置3,每隔50毫秒,占空比加10,如果超过500(也就是PWM周期),自动变成0.

代码:

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(50);
		duty_num = duty_num + 10;
		if(duty_num > 500)
		{
			duty_num = 0;
		}
		__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,duty_num);
  }

修改后,保存,编译、下载,重新上电。可以看到LED2,从亮倒暗,逐渐变化。

整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据