问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用STM32和HAL库实现呼吸灯效果

创作时间:
作者:
@小白创作中心

使用STM32和HAL库实现呼吸灯效果

引用
1
来源
1.
https://www.cnblogs.com/hack747/p/18508491

本文将介绍如何使用STM32F103C8微控制器和HAL库实现呼吸灯效果。通过配置通用定时器生成PWM信号,可以控制LED的亮度变化,实现渐亮渐灭的效果。

硬件环境

  • 开发板:STM32F103C8
  • 仿真软件:Proteus 8
  • 开发平台:STM32CubeMX + Keil

1. 新建STM32CubeMX工程

1.1 配置系统时钟RCC

1.2 配置定时器

这里使用PB3和PA15一对引脚。在TIM2定时器中,选择内部时钟作为时钟源,并配置通道1和通道2为PWM输出模式。

2. 代码实现

2.1 定义变量

uint16_t pulse=0; /*占空比,重装载值设置为999*/
uint8_t flag=1; /*LED标志位,用于判断是渐亮还是渐灭*/

2.2 主函数

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();
 /* USER CODE BEGIN Init */
 /* USER CODE END Init */
 /* Configure the system clock */
 SystemClock_Config();
 /* USER CODE BEGIN SysInit */
 /* USER CODE END SysInit */
 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 MX_TIM2_Init();
 /* USER CODE BEGIN 2 */
 //启动定时器2通道1的PWM
 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
 //启动定时器2通道2的PWM
 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
 uint16_t pulse=0; /*占空比,重装载值设置为999*/
 uint8_t flag=1; /*LED标志位,用于判断是渐亮还是渐灭*/
 /* USER CODE END 2 */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */
 /* USER CODE BEGIN 3 */
 if (flag==1) /*执行LED渐亮*/
 {
 if (pulse<1000)
 {
 pulse+=50; /*占空比增大*/
 __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse); /*修改占空比*/
 HAL_Delay(100);
 }
 else
 flag=0; /*切换为渐灭模式*/
 }
 else /*执行LED渐灭*/
 {
 pulse-=50; /*占空比减小*/
 __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse); /*修改占空比*/
 HAL_Delay(100);
 if (pulse==0)
 {
 flag=1; /*切换为渐亮模式*/
 }
 }
 }
}

通过上述配置和代码实现,可以成功实现LED的呼吸灯效果。这个项目展示了如何使用STM32的通用定时器生成PWM信号,并通过软件控制实现LED的渐亮渐灭效果。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号