登录/注册

stm32单片机led灯闪烁

stm32单片机led灯闪烁

更多

要实现STM32单片机的LED灯闪烁,通常需要以下步骤(以常用的STM32F103系列和HAL库为例):

1. 硬件连接

2. 代码实现(使用STM32CubeIDE)

#include "main.h"
#include "stm32f1xx_hal.h"  // 根据实际芯片型号调整

// 定义LED引脚
#define LED_PIN GPIO_PIN_13
#define LED_PORT GPIOC

// 系统时钟初始化函数(由CubeMX生成)
void SystemClock_Config(void);

int main(void) {
  // HAL库初始化
  HAL_Init();

  // 配置系统时钟(72MHz)
  SystemClock_Config();

  // 使能GPIOC时钟
  __HAL_RCC_GPIOC_CLK_ENABLE();

  // 配置PC13为推挽输出
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = LED_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;   // 推挽输出
  GPIO_InitStruct.Pull = GPIO_NOPULL;           // 无上拉/下拉
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  // 低速
  HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);

  while (1) {
    // LED亮(PC13低电平)
    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
    HAL_Delay(500);  // 延时500ms

    // LED灭(PC13高电平)
    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
    HAL_Delay(500);  // 延时500ms
  }
}

// 系统时钟配置函数(示例代码)
void SystemClock_Config(void) {
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  // 配置HSE晶振(8MHz)作为时钟源
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 8MHz * 9 = 72MHz
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  // 配置系统时钟
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
                                RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;     // HCLK = 72MHz
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;      // PCLK1 = 36MHz
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;      // PCLK2 = 72MHz
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}

3. 关键步骤说明

  1. 时钟配置

    • 必须使能GPIO端口的时钟(__HAL_RCC_GPIOC_CLK_ENABLE()
    • 系统时钟推荐配置为72MHz(STM32F103最大值)
  2. GPIO初始化

    • 设置为输出模式 GPIO_MODE_OUTPUT_PP
    • 注意开发板LED连接方式(部分板子是低电平点亮)
  3. 闪烁逻辑

    • 使用 HAL_GPIO_WritePin() 控制电平
    • 通过 HAL_Delay() 实现延时(阻塞式延时)

4. 替代方案(寄存器版)

// 使能GPIOC时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

// 配置PC13为推挽输出(50MHz)
GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13);
GPIOC->CRH |= GPIO_CRH_MODE13_1 | GPIO_CRH_MODE13_0;  // 输出模式,50MHz

while(1) {
  GPIOC->ODR ^= GPIO_ODR_ODR13;  // 翻转PC13电平
  for(int i=0; i<1000000; i++);  // 简单延时
}

5. 常见问题解决

  1. LED不亮

    • 检查硬件连接是否正确
    • 确认GPIO配置模式(输出/输入)
    • 测量引脚电压(亮:0V,灭:3.3V)
  2. 闪烁频率不对

    • 检查系统时钟配置
    • 确认 HAL_Delay() 的时钟源(通常依赖SysTick)
  3. 使用其他引脚

    • 修改 LED_PINLED_PORT 定义
    • 使能对应端口的时钟(如PA使用 __HAL_RCC_GPIOA_CLK_ENABLE()

推荐使用STM32CubeMX工具生成初始化代码,可自动完成时钟和引脚配置。

51单片机如何让led闪烁

51单片机如何让led灯闪烁​

2023-11-01 06:32:19

使用51单片机实现延时控制LED闪烁

这篇文章我们讲解使用51单片机控制LED灯的闪烁。那么为了方便理解,我们

2023-07-11 11:39:33

51单片机使用C语言点亮闪烁LED

下面是点亮51单片机使用C语言闪烁LED灯的的一段代码,也是我们迈入C5

2022-08-16 08:59:16

单片机led闪烁实验总结_Linux下单片机开发2(C51):LED闪烁

:/**************************************************************************************然后make 代码没有什么问题就写入单片机中效果如下L

资料下载 李巍 2022-01-17 10:51:29

51单片机如何跳出wile循环_51单片机闪烁LED

闪烁LED灯 51单片机是较为简单的8位

资料下载 佚名 2021-11-23 10:06:02

使用51单片机控制LED的花式闪烁的程序免费下载

本文档的主要内容详细介绍的是使用51单片机控制LED灯的花式闪烁的程序免

资料下载 张亮 2019-08-29 17:29:00

使用51单片机闪烁LED的代码免费下载

本文档的主要内容详细介绍的是使用51单片机闪烁LED灯的代码免费下载。

资料下载 131594 2019-07-03 17:41:00

使用51单片机定时器实现LED闪烁的应用源代码免费下载

本文档的主要内容详细介绍的是使用51单片机定时器实现LED灯闪烁的应用源

资料下载 贾伟刚 2019-06-28 17:42:00

如何实现单片机led闪烁

如何实现单片机led灯闪烁?

2022-01-19 07:42:53

单片机led闪烁实验的相关资料分享

:/**************************************************************************************然后make 代码没有什么问题就写入单片机中效果如下L

2022-01-17 06:20:52

单片机实现LED闪烁的过程

上期回顾:上篇文章我写了单片机入门(2):点亮奇数位/偶数位LED灯,这篇文章实现LE

2021-11-25 08:09:54

如何利用AVR单片机实现LED闪烁

如何利用AVR单片机实现LED灯闪烁?

2021-10-29 07:29:52

如何利用51单片机实现LED闪烁

如何利用51单片机实现LED灯闪烁?

2021-10-19 09:23:08

如何利用51单片机实现LED闪烁

如何利用51单片机实现LED灯闪烁?

2021-10-19 09:18:49

单片机闪烁设计的源代码

本文档的主要内容详细介绍的是单片机闪烁灯设计的源代码。

2020-06-07 11:33:33

7天热门专题 换一换
相关标签