你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)

[复制链接]
STMCU小助手 发布时间:2022-5-8 17:00
记录学习

df3da9d19e3c40a3a40eac9e18f58665.gif

点灯大师

原理图:


I_`C[GUEUEYK{TAOY36`VNM.png
05b197271d894d4d8f60a54b8c0ad499.png

e474daef686d4e81b4def02a152df15a.png

工程

8H_H)6MMGRJ8PJJDX]ECH`5.png

在自定义库文件中新建led,c和,h文件(文件名字和存放位置根据自己喜好和习惯)

编程逻辑

1.使能 GPIO 端口时钟;
2.初始化 GPIO 目标引脚为推挽输出模式;
3.编写简单测试程序,控制 GPIO 引脚输出高、低电平;


源代码

led.h

  1. #ifndef __LED_H
  2. #define        __LED_H

  3. #include "stm32f4xx.h"

  4. //引脚定义

  5. // 绿色灯
  6. #define LED1_PIN                  GPIO_Pin_0                 
  7. #define LED1_GPIO_PORT            GPIOB                     
  8. #define LED1_GPIO_CLK             RCC_AHB1Periph_GPIOB

  9. // 红色灯
  10. #define LED0_PIN                  GPIO_Pin_1                 
  11. #define LED0_GPIO_PORT            GPIOB                     
  12. #define LED0_GPIO_CLK             RCC_AHB1Periph_GPIOB


  13. /************************************************************/


  14. /** 控制LED灯亮灭的宏
  15.         * LED低电平亮,设置ON=0,OFF=1
  16.         * 若LED高电平亮,把宏设置成ON=1,OFF=0
  17.         */
  18. #define ON  0
  19. #define OFF 1

  20. /* 带参宏 像内联函数一样使用*/
  21. #define LED0(a)        if (a)        \
  22.                                         GPIO_SetBits(LED0_GPIO_PORT,LED0_PIN);\
  23.                                         else                \
  24.                                         GPIO_ResetBits(LED0_GPIO_PORT,LED0_PIN)

  25. #define LED1(a)        if (a)        \
  26.                                         GPIO_SetBits(LED1_GPIO_PORT,LED1_PIN);\
  27.                                         else                \
  28.                                         GPIO_ResetBits(LED1_GPIO_PORT,LED1_PIN)


  29. /* Ö±½Ó²Ù×÷¼Ä´æÆ÷µÄ·½·¨¿ØÖÆIO */
  30. #define        digitalHi(p,i)                         {p->BSRRL=i;}                //设置为高电平
  31. #define digitalLo(p,i)                         {p->BSRRH=i;}                //输出低电平
  32. #define digitalToggle(p,i)         {p->ODR ^=i;}                //输出反转状态

  33. /* ¶¨Òå¿ØÖÆIOµÄºê */
  34. #define LED0_TOGGLE                digitalToggle(LED0_GPIO_PORT,LED0_PIN)
  35. #define LED0_OFF                        digitalHi(LED0_GPIO_PORT,LED0_PIN)
  36. #define LED0_ON                                digitalLo(LED0_GPIO_PORT,LED0_PIN)

  37. #define LED1_TOGGLE                digitalToggle(LED1_GPIO_PORT,LED1_PIN)
  38. #define LED1_OFF                        digitalHi(LED1_GPIO_PORT,LED1_PIN)
  39. #define LED1_ON                                digitalLo(LED1_GPIO_PORT,LED1_PIN)


  40. #define LED_RED  \
  41.                                         LED0_ON;\
  42.                                         LED1_OFF;\
  43.                                        

  44. //ÂÌ
  45. #define LED_GREEN                \
  46.                                         LED0_OFF;\
  47.                                         LED1_ON;\
  48.                                        
  49. //全部点亮                                       
  50. #define LED_all        \
  51.                                         LED0_ON;\
  52.                                         LED1_ON;\
  53.                                        
  54. //全部点灭
  55. #define LED_allOFF        \
  56.                                         LED0_OFF;\
  57.                                         LED1_OFF;\
  58.                                                         




  59. void LED_GPIO_Config(void);

  60. #endif /* __LED_H */
复制代码

led.c

  1. #include "led.h"   


  2. void LED_GPIO_Config(void)
  3. {               
  4.                 /*  定义一个GPIO_InitTypeDef类型的结构体 初始化*/
  5.                 GPIO_InitTypeDef GPIO_InitStructure;

  6.                 /*  开启LED相关的GPIO外设时钟 */
  7.                 RCC_AHB1PeriphClockCmd ( LED0_GPIO_CLK|
  8.                                    LED1_GPIO_CLK, ENABLE);
  9.                                                                                                                   
  10.                 GPIO_InitStructure.GPIO_Pin = LED0_PIN;        //选择要控制的GPIO引脚
  11.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   //设置引脚模式为输出模式
  12.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //设置引脚的输出类型为推挽输出
  13.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //设置引脚为上拉模式
  14.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //设置引脚速率为2MHz
  15.         
  16.                 GPIO_Init(LED0_GPIO_PORT, &GPIO_InitStructure);        
  17.                                                                                                                        
  18.                 GPIO_InitStructure.GPIO_Pin = LED1_PIN;        
  19.     GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);        

  20.                
  21. }
复制代码

main.c

  1. #include "stm32f4xx.h"
  2. #include "led.h"

  3. void Delay(__IO u32 nCount);


  4. int main(void)
  5. {
  6.         /* LED 端口初始化 */
  7.         LED_GPIO_Config();

  8.         /* 控制LED灯 */
  9.         while (1)
  10.         {
  11.       LED0( ON );    //点亮
  12.                   Delay(0xFFFFFF);
  13.                   LED0( OFF );    //熄灭
  14.                
  15.                   LED1( ON );    //点亮
  16.                   Delay(0xFFFFFF);
  17.                   LED1( OFF );    //熄灭
  18.                
  19.         }
  20. }

  21. void Delay(__IO uint32_t nCount)         //简单的延时函数
  22. {
  23.         for(; nCount != 0; nCount--);
  24. }
  25. /*********************************************   END    ******************************************/
复制代码





收藏 评论0 发布时间:2022-5-8 17:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版