【STM32】HAL库 LED闪烁、流水灯

该博客介绍了通过HAL库实现STM32的LED闪烁和流水灯效果。在LED闪烁部分,设置PA0为输出,使用相关函数设置引脚电平并翻转引脚;流水灯部分则设置PA0到PA7为输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

【STM32】HAL库 新建MDK工程


前言

通过HAL库实现stm32的LED闪烁和流水灯效果

一、闪烁

在这里插入图片描述设置PA0为输出

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

    /* USER CODE BEGIN 3 */
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
		HAL_Delay(500);
		
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);
		HAL_Delay(500);
  }
  /* USER CODE END 3 */

HAL_GPIO_WritePin 设置引脚
GPIO_PIN_RESET低电平 GPIO_PIN_SET高电平

HAL_GPIO_TogglePin 翻转引脚

二、流水灯

在这里插入图片描述
设置PA0到PA7为输出

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

    /* USER CODE BEGIN 3 */
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
		HAL_Delay(100);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
		HAL_Delay(100);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
		HAL_Delay(100);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
		HAL_Delay(100);

		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
		HAL_Delay(100);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
		HAL_Delay(100);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
		HAL_Delay(100);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
		HAL_Delay(100);

  }
  /* USER CODE END 3 */
STM32HAL是一个针对STM32微控制器设备的软件开发工具包,它提供了一套高级API,简化了硬件访问和基本功能的配置。如果你想通过STM32HAL点亮流水灯,你可以按照以下步骤操作: 1. **初始化GPIO**:首先,你需要初始化GPIO,选择你要使用的端口和模式(输入/输出),并设置灯泡的GPIO作为输出。 ```c HAL_GPIO_Init(GPIOA, &GPIO_PIN_0); // 示例:假设灯泡连接在PA0 ``` 2. **配置定时器**:使用定时器来控制灯的亮灭周期。例如,可以使用TIM2定时器,设置预分频器、计数器值等。 ```c HAL_TIM_PWM_Init(&htim2); HAL_TIM_PWM_MspInit(&htim2); ``` 3. **配置PWM**:配置PWM脉宽调制信号,这将用于控制LED灯的亮度。 ```c HAL_TIM_PWM_ConfigChannel(&htim2, &htim2_channels[0], PWM_MODE魇); ``` 4. **设置占空比**:设置PWM的周期和占空比,以实现灯的闪烁效果。 ```c uint16_t dutyCycle = (uint16_t)(USART_BAUDRATE / (16 * HAL_RCC_GetPCLK1Freq())); HAL_TIM_PWM_SetCompare(&htim2, &htim2_channels[0], dutyCycle); ``` 5. **开启定时器**:启动定时器,开始灯的闪烁。 ```c HAL_TIM_Start(&htim2); ``` 6. **主循环中更新占空比**:在主程序循环中不断调整占空比,实现流水灯的效果。 ```c while (1) { dutyCycle += 1; // 每次增加1,改变灯的亮度 if (dutyCycle > USART_BAUDRATE / (16 * HAL_RCC_GetPCLK1Freq())) { dutyCycle = 0; // 当超过最大值时,恢复到最小 } HAL_TIM_PWM_SetCompare(&htim2, &htim2_channels[0], dutyCycle); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youuuuvvu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值