• LED灯实验


    1分析LED灯的电路图

    1> 再扩展板的PCB板上找到LED灯对应的位置,查看LED灯对应的丝印编号。查找LED1灯对应的丝印为”LD1”.

    2> 打开扩展版的原理图,再原理图上搜索“LD1”丝印,找到LD1对应的原理图,如下所示:

    再扩展板的原理图上搜索”LED1“网络标号,如下图所示:

    3> 打开转接板的原理图,再转接板的原理图上搜索”LED1“网络标号,如下图所示:

    再转接板的原理图上搜索”PE10“网络标号,得到以下图:

    4> 打开主板的原理图,搜索”PE10“网络标号,如下图所示:

    5> 通过电路图的分析可知,LED1灯接到SOC的PE10引脚之上,编写程序让PE10引脚输出高低电平即可。

    1. PE10的含义:
    2. P : Pin, gpio引脚(通用的输入输出引脚)
    3. E : 引脚的所属的组,E组, 每组最多有16个引脚,引脚的编号为0-15.
    4. 10 : PE组的第10个引脚

    6> 分析LED2, LED3,蜂鸣器,风扇,马达,KEY1, KEY2,KEY3,分别接到SOC的哪个引脚之上。

    1. LED1 ----> PE10
    2. LED2 ----> PF10
    3. LED3 ----> PE8
    4. 蜂鸣器 ----> PB6
    5. 风扇 ----> PE9
    6. 马达 ----> PF6
    7. KEY1 ----> PF9
    8. KEY2 ----> PF7
    9. KEY3 ----> PF8

    2分析电路图-->电路的工作原理

    1. 通过对led1灯的电路图分析可知,
    2. 当PE10引脚输出高电平时,NPN三极管导通,LED1灯亮;
    3. 当PE10引脚输出低电平时,NPN三极管截止,LED1灯灭。

    3分析芯片手册-->如何编程驱动硬件

    4 分析GPIO章节

    5 分析GPIOx_MODER寄存器

    1. #ifndef __GPIO_H__
    2. #define __GPIO_H__
    3. #include "stm32mp1xx_gpio.h"
    4. // 1. 封装RCC_MP_AHB4ENSETR寄存器,封装GPIOE,GPIOF寄存器
    5. #define RCC_MP_AHB4ENSETR (*(volatile unsigned int *)0x50000A28)
    6. // 2. 封装LED灯控制的函数
    7. #define GPIO_PIN_0 0U
    8. #define GPIO_PIN_1 1U
    9. #define GPIO_PIN_2 2U
    10. #define GPIO_PIN_3 3U
    11. #define GPIO_PIN_4 4U
    12. #define GPIO_PIN_5 5U
    13. #define GPIO_PIN_6 6U
    14. #define GPIO_PIN_7 7U
    15. #define GPIO_PIN_8 8U
    16. #define GPIO_PIN_9 9U
    17. #define GPIO_PIN_10 10U
    18. #define GPIO_PIN_11 11U
    19. #define GPIO_PIN_12 12U
    20. #define GPIO_PIN_13 13U
    21. #define GPIO_PIN_14 14U
    22. #define GPIO_PIN_15 15U
    23. typedef enum
    24. {
    25. GPIO_INPUT = 0,
    26. GPIO_OUTPUT,
    27. GPIO_AF,
    28. GPIO_ANALOG,
    29. } gpio_mode_t; // gpio引脚模式的枚举类型
    30. typedef enum
    31. {
    32. GPIO_PP = 0,
    33. GPIO_OD,
    34. } gpio_type_t; // gpio引脚的类型
    35. typedef enum
    36. {
    37. GPIO_LOW_SPEED = 0,
    38. GPIO_MEDIUM_SPEED,
    39. GPIO_HIGH_SPEED,
    40. GPIO_VERY_HIGH_SPEED,
    41. } gpio_speed_t; // gpio引脚的速度
    42. typedef enum
    43. {
    44. GPIO_NO_PUPD = 0,
    45. GPIO_UP,
    46. GPIO_DOWN,
    47. } gpio_pupd_t;
    48. typedef enum
    49. {
    50. GPIO_RESET = 0,
    51. GPIO_SET,
    52. } gpio_statues_t;
    53. typedef struct
    54. {
    55. unsigned int pins; // 哪个引脚
    56. gpio_mode_t mode; // 引脚的模式
    57. gpio_type_t type; // 引脚的类型
    58. gpio_speed_t speed; // 引脚的速度
    59. gpio_pupd_t pupd; // 引脚的上拉和下拉
    60. } gpio_init_t; // gpio引脚初始化的结构体
    61. /*
    62. 功能:GPIO引脚的初始化
    63. 参数:
    64. gpios : 哪个组的gpio引脚
    65. gpio_init : 引脚初始化的结构体
    66. */
    67. void hal_gpio_init(gpio_t *gpios, gpio_init_t *gpio_init);
    68. /*
    69. 功能:写gpio引脚的状态函数
    70. 参数:
    71. gpios : 哪个组的gpio引脚
    72. pins : 哪个引脚
    73. statues : 引脚的状态
    74. */
    75. void hal_gpio_write(gpio_t *gpios, unsigned int pins, gpio_statues_t statues);
    76. /*
    77. 功能:读gpio引脚状态的函数
    78. 参数:
    79. gpios : 哪个组的gpio引脚
    80. pins : 哪个引脚
    81. 返回值:
    82. statues : 引脚的状态
    83. */
    84. gpio_statues_t hal_gpio_read(gpio_t *gpios, unsigned int pins);
    85. void hal_gpio_toggle(gpio_t *gpios, unsigned int pins);
    86. #endif

    led.h

    1. #ifndef __LED_H__
    2. #define __LED_H__
    3. #include "gpio.h"
    4. void hal_led_init(void);
    5. void hal_led_on(void);
    6. void hal_led_off(void);
    7. #endif

    gpio.c

    1. #include "../include/gpio.h"
    2. /*
    3. 功能:GPIO引脚的初始化
    4. 参数:
    5. gpios : 哪个组的gpio引脚
    6. gpio_init : 引脚初始化的结构体
    7. */
    8. void hal_gpio_init(gpio_t *gpios, gpio_init_t *gpio_init)
    9. {
    10. gpios->MODER &= (~(0x3 << (gpio_init->pins * 2)));
    11. gpios->MODER |= (gpio_init->mode << (gpio_init->pins * 2));
    12. gpios->OTYPER &= (~(0x1 << gpio_init->pins));
    13. gpios->OTYPER |= (gpio_init->type << gpio_init->pins);
    14. gpios->OSPEEDR &= (~(0x3 << (gpio_init->pins * 2)));
    15. gpios->OSPEEDR |= (gpio_init->speed << (gpio_init->pins * 2));
    16. gpios->PUPDR &= (~(0x3 << (gpio_init->pins * 2)));
    17. gpios->PUPDR |= (gpio_init->pupd << (gpio_init->pins * 2));
    18. }
    19. /*
    20. 功能:LED灯的开关状态的函数
    21. 参数:
    22. gpios : 哪个组的gpio引脚
    23. pins : 哪个引脚
    24. statues : 引脚的状态
    25. */
    26. void hal_gpio_write(gpio_t *gpios, unsigned int pins, gpio_statues_t statues)
    27. {
    28. if (!statues)
    29. {
    30. gpios->ODR &= (~(0x1 << pins));
    31. }
    32. else
    33. {
    34. gpios->ODR |= (0x1 << pins);
    35. }
    36. }
    37. gpio_statues_t hal_gpio_read(gpio_t *gpios, unsigned int pins)
    38. {
    39. gpio_statues_t statu;
    40. if (gpios->IDR & (0x1 << pins))
    41. {
    42. statu = GPIO_SET;
    43. }
    44. else
    45. {
    46. statu = GPIO_RESET;
    47. }
    48. return statu;
    49. }
    50. void hal_gpio_toggle(gpio_t *gpios, unsigned int pins)
    51. {
    52. gpios->ODR ^= (0x1 << pins);
    53. }

    led.c

    1. #include "../include/led.h"
    2. void hal_led_init(void)
    3. {
    4. RCC_MP_AHB4ENSETR |= (0x3 << 4);
    5. gpio_init_t init = {
    6. .pins = GPIO_PIN_10,
    7. .mode = GPIO_OUTPUT,
    8. .type = GPIO_PP,
    9. .speed = GPIO_LOW_SPEED,
    10. .pupd = GPIO_NO_PUPD,
    11. };
    12. hal_gpio_init(GPIOE, &init);
    13. hal_gpio_init(GPIOF, &init);
    14. init.pins = GPIO_PIN_8;
    15. hal_gpio_init(GPIOE, &init);
    16. }
    17. void hal_led_on(void)
    18. {
    19. hal_gpio_write(GPIOE, GPIO_PIN_10, GPIO_SET);
    20. hal_gpio_write(GPIOF, GPIO_PIN_10, GPIO_SET);
    21. hal_gpio_write(GPIOE, GPIO_PIN_8, GPIO_SET);
    22. }
    23. void hal_led_off(void)
    24. {
    25. hal_gpio_write(GPIOE, GPIO_PIN_10, GPIO_RESET);
    26. hal_gpio_write(GPIOF, GPIO_PIN_10, GPIO_RESET);
    27. hal_gpio_write(GPIOE, GPIO_PIN_8, GPIO_RESET);
    28. }

  • 相关阅读:
    【SpringBoot】 环境准备
    如何选币与确定对应策略研究
    A-level放榜,考生整体成绩大滑坡
    arcgis栅格计算器:将栅格图层指定值设置为Nodata及栅格图层求交
    被玩坏的数组排序之sort函数
    2303.计算应缴税款总额-297地平线周赛回顾
    展示日志log4.properties
    数据结构与算法—单链表
    Java中如何获取一个HashMap中指定key对应的值呢?
    minio之分布式安装
  • 原文地址:https://blog.csdn.net/a2998658795/article/details/126681130