#include 'stm32f10x.h' // Device header

void LED_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;//ÉùÃ÷Ò»¸ö½á¹¹Ìå
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4);

}

void LED1_ON(void) { GPIO_ResetBits(GPIOA, GPIO_Pin_1);//µÍµçƽµãÁÁÒý½Å1µÄµÆ }

void LED1_OFF(void) { GPIO_SetBits(GPIOA, GPIO_Pin_1); }

void LED1_Turn(void) { if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)//¶ÁÈ¡Òý½Å1µÄÊä³öµçƽ״̬£¬Èç¹û·µ»ØÖµÎª0£¬¾Í±íʾΪµÍµçƽ£¬µÆÒѵãÁÁ { GPIO_SetBits(GPIOA, GPIO_Pin_1);//½«µçƽÖÃ¸ß } else { GPIO_ResetBits(GPIOA, GPIO_Pin_1);//½«µçƽÖÃµÍ } }

void LED2_ON(void) { GPIO_ResetBits(GPIOA, GPIO_Pin_2); }

void LED2_OFF(void) { GPIO_SetBits(GPIOA, GPIO_Pin_2); }

void LED2_Turn(void) { if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0) { GPIO_SetBits(GPIOA, GPIO_Pin_2); } else { GPIO_ResetBits(GPIOA, GPIO_Pin_2); } } void LED3_ON(void) { GPIO_ResetBits(GPIOA, GPIO_Pin_3); }

void LED3_OFF(void) { GPIO_SetBits(GPIOA, GPIO_Pin_3); }

void LED3_Turn(void) { if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_3) == 0) { GPIO_SetBits(GPIOA, GPIO_Pin_3); } else { GPIO_ResetBits(GPIOA, GPIO_Pin_3); } }

void LED4_ON(void) { GPIO_ResetBits(GPIOA, GPIO_Pin_4); }

void LED4_OFF(void) { GPIO_SetBits(GPIOA, GPIO_Pin_4); }

void LED4_Turn(void) { if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4) == 0) { GPIO_SetBits(GPIOA, GPIO_Pin_4); } else { GPIO_ResetBits(GPIOA, GPIO_Pin_4); } } 解析每段代码

  1. ' #include 'stm32f10x.h' ': 包含了 STM32F10x 系列芯片的头文件。

  2. ' void LED_Init(void) ': 定义了初始化 LED 灯的函数。

  3. ' RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); ': 开启 GPIOA 的时钟。

  4. ' GPIO_InitTypeDef GPIO_InitStructure; ': 定义了一个 GPIO 初始化结构体。

  5. ' GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ': 设置 GPIO 的模式为推挽输出。

  6. ' GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4; ': 设置 GPIO 的引脚为 PA1、PA2、PA3、PA4。

  7. ' GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ': 设置 GPIO 的速度为 50MHz。

  8. ' GPIO_Init(GPIOA, &GPIO_InitStructure); ': 将 GPIO 初始化结构体应用到 GPIOA 上。

  9. ' GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4); ': 将 GPIOA 的 PA1、PA2、PA3、PA4 引脚全部设置为高电平,即关闭 LED 灯。

  10. ' void LED1_ON(void) ': 定义了打开 LED1 灯的函数。

  11. ' GPIO_ResetBits(GPIOA, GPIO_Pin_1); ': 将 GPIOA 的 PA1 引脚设置为低电平,即打开 LED1 灯。

  12. ' void LED1_OFF(void) ': 定义了关闭 LED1 灯的函数。

  13. ' GPIO_SetBits(GPIOA, GPIO_Pin_1); ': 将 GPIOA 的 PA1 引脚设置为高电平,即关闭 LED1 灯。

  14. ' void LED1_Turn(void) ': 定义了翻转 LED1 灯状态的函数。

  15. ' if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0) ': 判断 GPIOA 的 PA1 引脚是否为低电平,即 LED1 灯是否打开。

  16. ' GPIO_SetBits(GPIOA, GPIO_Pin_1); ': 将 GPIOA 的 PA1 引脚设置为高电平,即关闭 LED1 灯。

  17. ' GPIO_ResetBits(GPIOA, GPIO_Pin_1); ': 将 GPIOA 的 PA1 引脚设置为低电平,即打开 LED1 灯。

  18. ' void LED2_ON(void) ': 定义了打开 LED2 灯的函数。

  19. ' GPIO_ResetBits(GPIOA, GPIO_Pin_2); ': 将 GPIOA 的 PA2 引脚设置为低电平,即打开 LED2 灯。

  20. ' void LED2_OFF(void) ': 定义了关闭 LED2 灯的函数。

  21. ' GPIO_SetBits(GPIOA, GPIO_Pin_2); ': 将 GPIOA 的 PA2 引脚设置为高电平,即关闭 LED2 灯。

  22. ' void LED2_Turn(void) ': 定义了翻转 LED2 灯状态的函数。

  23. ' if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0) ': 判断 GPIOA 的 PA2 引脚是否为低电平,即 LED2 灯是否打开。

  24. ' GPIO_SetBits(GPIOA, GPIO_Pin_2); ': 将 GPIOA 的 PA2 引脚设置为高电平,即关闭 LED2 灯。

  25. ' GPIO_ResetBits(GPIOA, GPIO_Pin_2); ': 将 GPIOA 的 PA2 引脚设置为低电平,即打开 LED2 灯。

  26. ' void LED3_ON(void) ': 定义了打开 LED3 灯的函数。

  27. ' GPIO_ResetBits(GPIOA, GPIO_Pin_3); ': 将 GPIOA 的 PA3 引脚设置为低电平,即打开 LED3 灯。

  28. ' void LED3_OFF(void) ': 定义了关闭 LED3 灯的函数。

  29. ' GPIO_SetBits(GPIOA, GPIO_Pin_3); ': 将 GPIOA 的 PA3 引脚设置为高电平,即关闭 LED3 灯。

  30. ' void LED3_Turn(void) ': 定义了翻转 LED3 灯状态的函数。

  31. ' if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_3) == 0) ': 判断 GPIOA 的 PA3 引脚是否为低电平,即 LED3 灯是否打开。

  32. ' GPIO_SetBits(GPIOA, GPIO_Pin_3); ': 将 GPIOA 的 PA3 引脚设置为高电平,即关闭 LED3 灯。

  33. ' GPIO_ResetBits(GPIOA, GPIO_Pin_3); ': 将 GPIOA 的 PA3 引脚设置为低电平,即打开 LED3 灯。

  34. ' void LED4_ON(void) ': 定义了打开 LED4 灯的函数。

  35. ' GPIO_ResetBits(GPIOA, GPIO_Pin_4); ': 将 GPIOA 的 PA4 引脚设置为低电平,即打开 LED4 灯。

  36. ' void LED4_OFF(void) ': 定义了关闭 LED4 灯的函数。

  37. ' GPIO_SetBits(GPIOA, GPIO_Pin_4); ': 将 GPIOA 的 PA4 引脚设置为高电平,即关闭 LED4 灯。

  38. ' void LED4_Turn(void) ': 定义了翻转 LED4 灯状态的函数。

  39. ' if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4) == 0) ': 判断 GPIOA 的 PA4 引脚是否为低电平,即 LED4 灯是否打开。

  40. ' GPIO_SetBits(GPIOA, GPIO_Pin_4); ': 将 GPIOA 的 PA4 引脚设置为高电平,即关闭 LED4 灯。

  41. ' GPIO_ResetBits(GPIOA, GPIO_Pin_4); ': 将 GPIOA 的 PA4 引脚设置为低电平,即打开 LED4 灯。

STM32F10x GPIO 控制 LED 灯示例 - 使用 GPIOA 控制 4 个 LED

原文地址: https://www.cveoy.top/t/topic/oAXK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录