• C语言 cortex-A7核 点LED灯 (附 汇编实现、使用C语言 循环实现、使用C语言 封装函数实现【重要、常用】)


    1 汇编实现

    1. text
    2. global _start
    3. start:
    4. ************** LED1点灯 ---> PE10 **************/
    5. ************** RCC章节初始化 **************/
    6. CC_INIT:
    7. @1.使能GPIOE组控制器,通过RCC_MP_AHB4ENSETR寄存器设置GPIOE组使能0x50000A28[4]= 1
    8. ldr r0,=0x50000A28 @准备一块地址空间0x50000A28
    9. ldr r1,[r0] @将0x50000A28这块地址中的内容,读到目标寄存器r1中
    10. orr r1,r1,#(0x3 << 4) @将r1寄存器第[5:4] = 11,保证其他位不变
    11. str r1,[r0] @将r1寄存器中的值,写回0x50000A28这块地址空间中
    12. ************** LED1对应GPIO章节初始化 **************/
    13. ED1_INIT:
    14. @1.通过GPIOE_MODER寄存器,设置PE10引脚为 输出模式 0x50006000[21:20] = 01
    15. ldr r0,=0x50006000
    16. ldr r1,[r0]
    17. orr r1,r1,#(0x3 << 20)
    18. and r1,r1,#(~(0x1 << 21))
    19. str r1,[r0]
    20. @2.通过GPIOE_OTYPER寄存器,设置PE10引脚为 推挽输出类型 0x50006004[10] = 0
    21. ldr r0,=0x50006004
    22. ldr r1,[r0]
    23. and r1,r1,#(~(0x1 << 10))
    24. str r1,[r0]
    25. @3.通过GPIOE_OSPEEDR寄存器,设置PE10引脚为 低速输出 0x50006008[21:20] = 00
    26. ldr r0,=0x50006008
    27. ldr r1,[r0]
    28. and r1,r1,#(~(0x3 << 20))
    29. str r1,[r0]
    30. @4.通过GPIOE_PUPDR寄存器,设置PE10引脚 禁止上下拉电阻 0x5000600C[21:20] = 00
    31. ldr r0,=0x5000600C
    32. ldr r1,[r0]
    33. and r1,r1,#(~(0x3 << 20))
    34. str r1,[r0]
    35. ************** LED2对应GPIO章节初始化 **************/
    36. ED2_INIT:
    37. @1.通过GPIOE_MODER寄存器,设置PF10引脚为 输出模式 0x50007000[21:20] = 01
    38. ldr r0,=0x50007000
    39. ldr r1,[r0]
    40. orr r1,r1,#(0x3 << 20)
    41. and r1,r1,#(~(0x1 << 21))
    42. str r1,[r0]
    43. @2.通过GPIOE_OTYPER寄存器,设置PF10引脚为 推挽输出类型 0x50007004[10] = 0
    44. ldr r0,=0x50007004
    45. ldr r1,[r0]
    46. and r1,r1,#(~(0x1 << 10))
    47. str r1,[r0]
    48. @3.通过GPIOE_OSPEEDR寄存器,设置PF10引脚为 低速输出 0x50007008[21:20] = 00
    49. ldr r0,=0x50007008
    50. ldr r1,[r0]
    51. and r1,r1,#(~(0x3 << 20))
    52. str r1,[r0]
    53. @4.通过GPIOE_PUPDR寄存器,设置PF10引脚 禁止上下拉电阻 0x5000700C[21:20] = 00
    54. ldr r0,=0x5000700C
    55. ldr r1,[r0]
    56. and r1,r1,#(~(0x3 << 20))
    57. str r1,[r0]
    58. /************** LED3对应GPIO章节初始化 **************/
    59. ED3_INIT:
    60. @1.通过GPIOE_MODER寄存器,设置PE8引脚为 输出模式 0x50006000[17:16] = 01
    61. ldr r0,=0x50006000
    62. ldr r1,[r0]
    63. orr r1,r1,#(0x3 << 16)
    64. and r1,r1,#(~(0x1 << 17))
    65. str r1,[r0]
    66. @2.通过GPIOE_OTYPER寄存器,设置PE8引脚为 推挽输出类型 0x50006004[8] = 0
    67. ldr r0,=0x50006004
    68. ldr r1,[r0]
    69. and r1,r1,#(~(0x1 << 8))
    70. str r1,[r0]
    71. @3.通过GPIOE_OSPEEDR寄存器,设置PE8引脚为 低速输出 0x50006008[17:16] = 00
    72. ldr r0,=0x50006008
    73. ldr r1,[r0]
    74. and r1,r1,#(~(0x3 << 16))
    75. str r1,[r0]
    76. @4.通过GPIOE_PUPDR寄存器,设置PE8引脚 禁止上下拉电阻 0x5000600C[17:16] = 00
    77. ldr r0,=0x5000600C
    78. ldr r1,[r0]
    79. and r1,r1,#(~(0x3 <<16))
    80. str r1,[r0]
    81. oop:
    82. bl LED1_ON
    83. bl delay_1s
    84. bl LED1_OFF
    85. bl delay_1s
    86. bl LED2_ON
    87. bl delay_1s
    88. bl LED2_OFF
    89. bl delay_1s
    90. bl LED3_ON
    91. bl delay_1s
    92. bl LED3_OFF
    93. bl delay_1s
    94. b Loop
    95. /************** LED1点亮 **************/
    96. ED1_ON:
    97. @1.通过GPIOE_ODR寄存器,设置PE10引脚输出高电平 0x50006014[10] = 1
    98. ldr r0,=0x50006014
    99. ldr r1,[r0]
    100. orr r1,r1,#(0x1 << 10)
    101. str r1,[r0]
    102. mov pc,lr
    103. /************** LED1熄灭 **************/
    104. ED1_OFF:
    105. @1.通过GPIOE_ODR寄存器,设置PE10引脚输出低电平 0x50006014[10] = 0
    106. ldr r0,=0x50006014
    107. ldr r1,[r0]
    108. bic r1,r1,#(0x1 << 10)
    109. str r1,[r0]
    110. mov pc,lr
    111. /************** LED2点亮 **************/
    112. ED2_ON:
    113. @1.通过GPIOF_ODR寄存器,设置PE10引脚输出高电平 0x50007014[10] = 1
    114. ldr r0,=0x50007014
    115. ldr r1,[r0]
    116. orr r1,r1,#(0x1 << 10)
    117. str r1,[r0]
    118. mov pc,lr
    119. /************** LED2熄灭 **************/
    120. ED2_OFF:
    121. @1.通过GPIOF_ODR寄存器,设置PE10引脚输出低电平 0x50006014[10] = 0
    122. ldr r0,=0x50007014
    123. ldr r1,[r0]
    124. bic r1,r1,#(0x1 << 10)
    125. str r1,[r0]
    126. mov pc,lr
    127. /************** LED3点亮 **************/
    128. ED3_ON:
    129. @1.通过GPIOF_ODR寄存器,设置PE10引脚输出高电平 0x50006014[8] = 1
    130. ldr r0,=0x50006014
    131. ldr r1,[r0]
    132. orr r1,r1,#(0x1 << 8)
    133. str r1,[r0]
    134. mov pc,lr
    135. /************** LED3熄灭 **************/
    136. ED3_OFF:
    137. @1.通过GPIOE_ODR寄存器,设置PE10引脚输出低电平 0x50006014[8] = 0
    138. ldr r0,=0x50006014
    139. ldr r1,[r0]
    140. bic r1,r1,#(0x1 << 8)
    141. str r1,[r0]
    142. mov pc,lr
    143. 大概1s的延时函数
    144. elay_1s:
    145. mov r3, #0x10000000
    146. mm:
    147. cmp r3, #0
    148. subne r3, r3, #1
    149. bne mm
    150. mov pc, lr
    151. end

    2 C语言实现

    led.h

    1. #ifndef __LED_H__
    2. #define __LED_H__
    3. //结构体封装
    4. typedef struct{
    5. volatile unsigned int MODER;
    6. volatile unsigned int OTYPER;
    7. volatile unsigned int OSPEEDR;
    8. volatile unsigned int PUPDR;
    9. volatile unsigned int IDR;
    10. volatile unsigned int ODR;
    11. }gpio_t;
    12. #define GPIOE ((gpio_t*)0x50006000)
    13. #define GPIOF ((gpio_t*)0x50007000)
    14. #define RCC_MP_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28)
    15. //LED1 ===> PE10
    16. //RCC/GPIO章节初始化
    17. void led1_rcc_gpio_init();
    18. //LED1点亮
    19. void led1_on();
    20. //LED1熄灭
    21. void led1_off();
    22. //LED1 ===> PE10
    23. //LED2 ===> PF10
    24. //RCC/GPIO章节初始化
    25. void led2_rcc_gpio_init();
    26. //LED2点亮
    27. void led2_on();
    28. //LED2熄灭
    29. void led2_off();
    30. //LED3 ===> PE8
    31. //RCC/GPIO章节初始化
    32. void led3_rcc_gpio_init();
    33. //LED3点亮
    34. void led3_on();
    35. //LED3熄灭
    36. void led3_off();
    37. #endif

    led.c

    1. #include "led.h"
    2. //LED1 ---> PE10
    3. //RCC/GPIO章节初始化
    4. void led1_rcc_gpio_init()
    5. {
    6. //0、使能GPIOE组控制器,通过RCC_MP_AHB4_ENSETR寄存器设置GPIOE组使能0x50000A28[4] = 1
    7. RCC_MP_AHB4_ENSETR |= (0X1 << 4);
    8. //1、通过GPIOE_MODER寄存器,设置PE10引脚为输出模式 0x50006000[21:20] = 01
    9. GPIOE->MODER &= (~(0x1 << 21)); //21位清0
    10. GPIOE->MODER |= (0x1 << 20); //20位置1
    11. //2、通过GPIOE_OTYPER寄存器,设置PE10引脚为推挽输出类型 0x50006004[10] = 0
    12. GPIOE->OTYPER &= (~(0x1 << 10));
    13. //3、通过GPIOE_OSPEEDR寄存器,设置PE10引脚为低速输出 0x50006008[21:20] = 00
    14. GPIOE->OSPEEDR &= (~(0x3 << 20));
    15. //4、通过GPIOE_PUPDR寄存器,设置PE10引脚禁止上下拉电阻 0x5000600C[21:20] = 00
    16. GPIOE->PUPDR &= (~(0x3 << 20));
    17. }
    18. //LED1点亮
    19. void led1_on()
    20. {
    21. //通过GPIOE_ODR寄存器,设置PE10引脚输出高电平 0x50006014[10] = 1
    22. GPIOE->ODR |= (0x1 << 10);
    23. }
    24. //LED1熄灭
    25. void led1_off()
    26. {
    27. //通过GPIOE_ODR寄存器,设置PE10引脚输出低电平 0x50006014[10] = 0
    28. GPIOE->ODR &= (~(0x1) << 10);
    29. }
    30. //LED2 ---> PF10
    31. //RCC/GPIO章节初始化
    32. void led2_rcc_gpio_init()
    33. {
    34. //0、使能GPIOE组控制器,通过RCC_MP_AHB4_ENSETR寄存器设置GPIOE组使能0x50000A28[5] = 1
    35. RCC_MP_AHB4_ENSETR |= (0X1 << 5);
    36. //1、通过GPIOF_MODER寄存器,设置PF10引脚为输出模式 0x50007000[21:20] = 01
    37. GPIOF->MODER &= (~(0x1 << 21)); //21位清0
    38. GPIOF->MODER |= (0x1 << 20); //20位置1
    39. //2、通过GPIOE_OTYPER寄存器,设置PF10引脚为推挽输出类型 0x50007004[10] = 0
    40. GPIOF->OTYPER &= (~(0x1 << 10));
    41. //3、通过GPIOE_OSPEEDR寄存器,设置PF10引脚为低速输出 0x50007008[21:20] = 00
    42. GPIOF->OSPEEDR &= (~(0x3 << 20));
    43. //4、通过GPIOE_PUPDR寄存器,设置PF10引脚禁止上下拉电阻 0x5000700C[21:20] = 00
    44. GPIOF->PUPDR &= (~(0x3 << 20));
    45. }
    46. //LED2点亮
    47. void led2_on()
    48. {
    49. //通过GPIOF_ODR寄存器,设置PF10引脚输出高电平 0x50007014[10] = 1
    50. GPIOF->ODR |= (0x1 << 10);
    51. }
    52. //LED2熄灭
    53. void led2_off()
    54. {
    55. //通过GPIOF_ODR寄存器,设置PF10引脚输出低电平 0x50007014[10] = 0
    56. GPIOF->ODR &= (~(0x1) << 10);
    57. }
    58. //LED3 ---> PE8
    59. //RCC/GPIO章节初始化
    60. void led3_rcc_gpio_init()
    61. {
    62. //0、使能GPIOE组控制器,通过RCC_MP_AHB4_ENSETR寄存器设置GPIOE组使能0x50000A28[4] = 1
    63. RCC_MP_AHB4_ENSETR |= (0X1 << 4);
    64. //1、通过GPIOE_MODER寄存器,设置PE10引脚为输出模式 0x50006000[17:16] = 01
    65. GPIOE->MODER &= (~(0x1 << 17)); //17位清0
    66. GPIOE->MODER |= (0x1 << 16); //16位置1
    67. //2、通过GPIOE_OTYPER寄存器,设置PE10引脚为推挽输出类型 0x50006004[8] = 0
    68. GPIOE->OTYPER &= (~(0x1 << 8));
    69. //3、通过GPIOE_OSPEEDR寄存器,设置PE10引脚为低速输出 0x50006008[17:16] = 00
    70. GPIOE->OSPEEDR &= (~(0x3 << 16));
    71. //4、通过GPIOE_PUPDR寄存器,设置PE10引脚禁止上下拉电阻 0x5000600C[17:16] = 00
    72. GPIOE->PUPDR &= (~(0x3 << 16));
    73. }
    74. //LED1点亮
    75. void led3_on()
    76. {
    77. //通过GPIOE_ODR寄存器,设置PE10引脚输出高电平 0x50006014[8] = 1
    78. GPIOE->ODR |= (0x1 << 8);
    79. }
    80. //LED1熄灭
    81. void led3_off()
    82. {
    83. //通过GPIOE_ODR寄存器,设置PE10引脚输出低电平 0x50006014[8] = 0
    84. GPIOE->ODR &= (~(0x1) << 8);
    85. }

    main.c

    1. #include "led.h"
    2. extern void printf(const char *fmt, ...);
    3. void delay_ms(int ms)
    4. {
    5. int i,j;
    6. for(i = 0; i < ms;i++)
    7. for (j = 0; j < 1800; j++);
    8. }
    9. int main()
    10. {
    11. led1_rcc_gpio_init(); // LED灯初始化
    12. led2_rcc_gpio_init(); // LED灯初始化
    13. led3_rcc_gpio_init(); // LED灯初始化
    14. while(1)
    15. {
    16. led1_on();
    17. delay_ms(500);
    18. led1_off();
    19. delay_ms(500);
    20. led2_on();
    21. delay_ms(500);
    22. led2_off();
    23. delay_ms(500);
    24. led3_on();
    25. delay_ms(500);
    26. led3_off();
    27. delay_ms(500);
    28. }
    29. return 0;
    30. }

    3 循环实现

    led.h

    1. #ifndef __LED_H__
    2. #define __LED_H__
    3. #define RCC_MP_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28)
    4. //结构体封装
    5. typedef struct{
    6. volatile unsigned int MODER;
    7. volatile unsigned int OTYPER;
    8. volatile unsigned int OSPEEDR;
    9. volatile unsigned int PUPDR;
    10. volatile unsigned int IDR;
    11. volatile unsigned int ODR;
    12. }gpio_t;
    13. typedef enum{
    14. LED_OFF=0,
    15. LED_ON,
    16. }LED_C;
    17. typedef enum{
    18. LED1=0,
    19. LED2,
    20. LED3
    21. }LED;
    22. #define GPIOE ((gpio_t*)0x50006000)
    23. #define GPIOF ((gpio_t*)0x50007000)
    24. void led_init(LED l);
    25. void led_con(LED l,LED_C c);
    26. #endif

    led.c

    1. #include "led.h"
    2. //初始化灯
    3. void led_init(LED led)
    4. {
    5. switch(led)
    6. {
    7. case LED1:
    8. RCC_MP_AHB4_ENSETR |= (0X1 << 4);
    9. GPIOE->MODER &= (~(0x1 << 21)); //21位清0
    10. GPIOE->MODER |= (0x1 << 20); //20位置1
    11. GPIOE->OTYPER &= (~(0x1 << 10));
    12. GPIOE->OSPEEDR &= (~(0x3 << 20));
    13. GPIOE->PUPDR &= (~(0x3 << 20));
    14. break;
    15. case LED2:
    16. RCC_MP_AHB4_ENSETR |= (0X1 << 5);
    17. GPIOF->MODER &= (~(0x1 << 21)); //21位清0
    18. GPIOF->MODER |= (0x1 << 20); //20位置1
    19. GPIOF->OTYPER &= (~(0x1 << 10));
    20. GPIOF->OSPEEDR &= (~(0x3 << 20));
    21. GPIOF->PUPDR &= (~(0x3 << 20));
    22. break;
    23. case LED3:
    24. RCC_MP_AHB4_ENSETR |= (0X1 << 4);
    25. GPIOE->MODER &= (~(0x1 << 17)); //17位清0
    26. GPIOE->MODER |= (0x1 << 16); //16位置1
    27. GPIOE->OTYPER &= (~(0x1 << 8));
    28. GPIOE->OSPEEDR &= (~(0x3 << 16));
    29. GPIOE->PUPDR &= (~(0x3 << 16));
    30. break;
    31. }
    32. }
    33. //控制灯
    34. void led_con(LED led,LED_C c)
    35. {
    36. switch(led)
    37. {
    38. case LED1:
    39. switch(c)
    40. {
    41. case LED_OFF:
    42. GPIOE->ODR &= (~(0X1 << 10));
    43. break;
    44. case LED_ON:
    45. GPIOE->ODR |= (0X1 << 10);
    46. break;
    47. }
    48. break;
    49. case LED2:
    50. switch(c)
    51. {
    52. case LED_OFF:
    53. GPIOF->ODR &= (~(0X1 << 10));
    54. break;
    55. case LED_ON:
    56. GPIOF->ODR |= (0X1 << 10);
    57. break;
    58. }
    59. break;
    60. case LED3:
    61. switch(c)
    62. {
    63. case LED_OFF:
    64. GPIOE->ODR &= (~(0X1 << 8));
    65. break;
    66. case LED_ON:
    67. GPIOE->ODR |= (0X1 << 8);
    68. break;
    69. }
    70. break;
    71. }
    72. }

    main.c

    1. #include "led.h"
    2. extern void printf(const char *fmt, ...);
    3. void delay_ms(int ms)
    4. {
    5. int i,j;
    6. for(i = 0; i < ms;i++)
    7. for (j = 0; j < 1800; j++);
    8. }
    9. int main()
    10. {
    11. led_init(LED1);
    12. led_init(LED2);
    13. led_init(LED3);
    14. while(1)
    15. {
    16. led_con(LED1,LED_ON);
    17. delay_ms(200);
    18. led_con(LED1,LED_OFF);
    19. delay_ms(200);
    20. led_con(LED2,LED_ON);
    21. delay_ms(200);
    22. led_con(LED2,LED_OFF);
    23. delay_ms(200);
    24. led_con(LED3,LED_ON);
    25. delay_ms(200);
    26. led_con(LED3,LED_OFF);
    27. delay_ms(200);
    28. }
    29. return 0;
    30. }

    4 封装函数实现【重要】【常用】

    初始化函数函数===>函数参数、函数实现

    led.h

    1. #ifndef __LED_H__
    2. #define __LED_H__
    3. //LED1 ---> PE10
    4. //LED2 ---> PF10
    5. //LED3 ---> PE8
    6. //结构体封装
    7. typedef struct{
    8. volatile unsigned int MODER; //0x00
    9. volatile unsigned int OTYPER; //0x04
    10. volatile unsigned int OSPEEDR; //0x08
    11. volatile unsigned int PUPDR; //0x0c
    12. volatile unsigned int IDR; //0x10
    13. volatile unsigned int ODR; //0x14
    14. }gpio_t;
    15. //GPIOE组基地址 0x50006000
    16. #define GPIOE ((gpio_t*)0x50006000)
    17. //GPIOF组基地址 0x50007000
    18. #define GPIOF ((gpio_t*)0x50007000)
    19. #define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000A28)
    20. //引脚编号封装
    21. #define GPIO_PIN_0 0
    22. #define GPIO_PIN_1 1
    23. #define GPIO_PIN_2 2
    24. #define GPIO_PIN_3 3
    25. #define GPIO_PIN_4 4
    26. #define GPIO_PIN_5 5
    27. #define GPIO_PIN_6 6
    28. #define GPIO_PIN_7 7
    29. #define GPIO_PIN_8 8
    30. #define GPIO_PIN_9 9
    31. #define GPIO_PIN_10 10
    32. #define GPIO_PIN_11 11
    33. #define GPIO_PIN_12 12
    34. #define GPIO_PIN_13 13
    35. #define GPIO_PIN_14 14
    36. #define GPIO_PIN_15 15
    37. //模式寄存器封装
    38. typedef enum{
    39. INPUT, //输入模式
    40. OUTPUT, //输出模式
    41. ALT, //复用功能模式
    42. ANALOG, //模拟功能模式
    43. }gpio_moder_t;
    44. //输出类型寄存器封装
    45. typedef enum{
    46. PP, //推挽
    47. OD, //开漏
    48. }gpio_otyper_t;
    49. //输出速率寄存器封装
    50. typedef enum{
    51. LOW, //低速
    52. MED, //中速
    53. HIGH, //高速
    54. VERY_HIGH, //快速
    55. }gpio_ospeedr_t;
    56. //是否需要上下拉电阻进行封装
    57. typedef enum{
    58. NO_PU_PD, //禁止上下拉电阻
    59. PU, //上拉
    60. PD, //下拉
    61. }gpio_pupdr_t;
    62. //封装初始化结构体
    63. typedef struct{
    64. gpio_moder_t moder; //模式相关寄存器
    65. gpio_otyper_t otyper; //输出类型寄存器
    66. gpio_ospeedr_t ospeedr; //输出速率寄存器
    67. gpio_pupdr_t pupdr; //是否需要上下拉电阻寄存器
    68. }gpio_init_t;
    69. //输出高低电平
    70. typedef enum{
    71. GPIO_RESET_T, //低电平
    72. GPIO_SET_T, //高电平
    73. }gpio_status_t;
    74. //函数功能:gpio相关初始化工作
    75. //参数1:GPIO组编号
    76. //参数2:GPIO引脚编号
    77. //参数3:初始化相关内容
    78. //返回值:无
    79. void hal_gpio_init(gpio_t * gpiox,unsigned int pin,gpio_init_t* init);
    80. //函数功能:gpio写相关操作
    81. //参数1:GPIO组编号
    82. //参数2:GPIO引脚编号
    83. //参数3:写值 写1高电平 写0低电平
    84. //返回值:无
    85. void hal_gpio_write(gpio_t* gpiox,unsigned int pin,gpio_status_t status);
    86. #endif

    led.c

    1. #include "led.h"
    2. void hal_gpio_init(gpio_t * gpiox,unsigned int pin,gpio_init_t* init)
    3. {
    4. //设置模式
    5. gpiox->MODER &= (~(0x3 << (pin * 2)));
    6. gpiox->MODER |= (init->moder << (pin * 2));
    7. //设置输出类型
    8. gpiox->OTYPER &= (~(0x1 << pin));
    9. gpiox->OTYPER |= (init->otyper << pin);
    10. //设置输出速率
    11. gpiox->OSPEEDR &= (~(0x3 << pin));
    12. gpiox->OSPEEDR |= (init->ospeedr << pin);
    13. //设置是否需要上下拉电阻
    14. gpiox->PUPDR &= (~(0x3 << pin));
    15. gpiox->PUPDR |= (init->pupdr << pin);
    16. }
    17. void hal_gpio_write(gpio_t* gpiox,unsigned int pin,gpio_status_t status)
    18. {
    19. if(status == GPIO_RESET_T)
    20. {
    21. //熄灭
    22. gpiox->ODR &= (~(0X1 << pin));
    23. }
    24. else
    25. {
    26. //点亮
    27. gpiox->ODR |= (0x1 << pin);
    28. }
    29. }

    main.c

    1. #include "led.h"
    2. extern void printf(const char *fmt, ...);
    3. void delay_ms(int ms)
    4. {
    5. int i,j;
    6. for(i = 0; i < ms;i++)
    7. for (j = 0; j < 1800; j++);
    8. }
    9. void led_init()
    10. {
    11. //GPIOE组 / GPIOF组使能
    12. RCC_MP_AHB4ENSETR |= (0x3 << 4);
    13. //结构体初始化
    14. gpio_init_t init = {OUTPUT,PP,LOW,NO_PU_PD};
    15. hal_gpio_init(GPIOE,GPIO_PIN_10,&init);
    16. hal_gpio_init(GPIOF,GPIO_PIN_10,&init);
    17. hal_gpio_init(GPIOE,GPIO_PIN_8,&init);
    18. }
    19. int main()
    20. {
    21. led_init(); //LED灯初始化
    22. while(1)
    23. {
    24. hal_gpio_write(GPIOE,GPIO_PIN_10,GPIO_SET_T);
    25. delay_ms(200);
    26. hal_gpio_write(GPIOE,GPIO_PIN_10,GPIO_RESET_T);
    27. delay_ms(200);
    28. hal_gpio_write(GPIOF,GPIO_PIN_10,GPIO_SET_T);
    29. delay_ms(200);
    30. hal_gpio_write(GPIOF,GPIO_PIN_10,GPIO_RESET_T);
    31. delay_ms(200);
    32. hal_gpio_write(GPIOE,GPIO_PIN_8,GPIO_SET_T);
    33. delay_ms(200);
    34. hal_gpio_write(GPIOE,GPIO_PIN_8,GPIO_RESET_T);
    35. delay_ms(200);
    36. }
    37. return 0;
    38. }

  • 相关阅读:
    聊聊如何利用springcloud gateway实现简易版灰度路由
    Can Language Models Make Fun? A Case Study in Chinese Comical Crosstalk
    福伦王梅花代工爱马仕新款自行车售价16.5万售罄,交不了货?
    【Django笔记】5 Django模板
    单细胞测序原理
    上证50期权开户条件有哪些呢?开户必看!
    要想实现超视距低延时图数传输,你还需要一款Mini Homer
    云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购
    Python3 基础语法
    电源硬件设计----电源组件基本知识
  • 原文地址:https://blog.csdn.net/Smallxu_/article/details/133043051