• 蓝桥杯嵌入式基础模块——GPIO的使用(新板)STM32G431(HAL库开发)


    开发环境利用,STM32CubeMX工具开发,最简单的一个开发工具,学STM32必须会使,可以简化我们敲代码的过程。

    目录

    1、GPIO

    2、GPIO的八种工作模式

    3、GPIO的应用

    4、功能实现

    5、硬件连接

     6、STM32CubeMX的配置

    7、 程序


    1、GPIO

    GPIO(英语:General-purpose input/output),通用型之输入输出的简称,其接脚可以 供使用者由程控自由使用,PIN 脚依现实考量可作为通用输入(GPI)或通用输出(GPO) 或通用输入与输出(GPIO)

    2、GPIO的八种工作模式

    GPIO_Mode_AIN 模拟输入

    GPIO_Mode_IN_FLOATING 浮空输入

    GPIO_Mode_IPD 下拉输入

    GPIO_Mode_IPU 上拉输入

    GPIO_Mode_Out_OD 开漏输出

    GPIO_Mode_Out_PP 推挽输出

    GPIO_Mode_AF_OD 复用开漏输出

    GPIO_Mode_AF_PP 复用推挽输出

    3、GPIO的应用

    1、上拉输入、下拉输入可以用来检测外部信号,例如,按键等;

    2、浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的 I2C、 USART 的接收端;

    3、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。而普通开漏输出模 式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电 阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输 出 5V 电平。

    4、对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来 选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。 如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。

    5、在使用任何一种开漏模式时,都需要接上拉电阻。

    4、功能实现

    流水灯,从右到左依次点亮,然后依次熄灭;

     

    5、硬件连接

    LED:低电平点亮,连接GPIOPC8~PC15;

    锁存器573:PD2控制锁存器的使能;

    锁存器作用:PD2高电平使能锁存器,可以保留D1~D8八个引脚的状态(只有在锁存器使能情况下才保存);并且在Q1~Q8一直输出此状态(无论使能锁存器还是不使能锁存器,都输出原先的状态)

     6、STM32CubeMX的配置

    1、先配置下载调试接口;

    2、然后开启时钟——外部高速时钟;

     3、配置GPIO——推挽输出模式,一共有八个,PC8~PC15

    4、配置GPIO初始化参数;

    5、配置时钟树;官方要求80MHZ,我们就配置80MHZ

     

     6、文件配置;

     

    7、 程序

    1、相关初始化函数

    1. //初始化引脚
    2. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
    3. //重置引脚
    4. void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

    2、配置函数

    1. //读取电平状态
    2. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    3. //设置引脚状态
    4. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState
    5. PinState);
    6. //转换引脚状态
    7. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    8. //锁定引脚状态
    9. HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

    主程序: 

    1. while(1){
    2. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
    3. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    4. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    5. HAL_Delay(DELAY_TIME);
    6. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
    7. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    8. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    9. HAL_Delay(DELAY_TIME);
    10. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_10);
    11. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    12. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    13. HAL_Delay(DELAY_TIME);
    14. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_11);
    15. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    16. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    17. HAL_Delay(DELAY_TIME);
    18. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_12);
    19. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    20. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    21. HAL_Delay(DELAY_TIME);
    22. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    23. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    24. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    25. HAL_Delay(DELAY_TIME);
    26. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_14);
    27. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    28. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    29. HAL_Delay(DELAY_TIME);
    30. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15);
    31. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    32. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    33. HAL_Delay(DELAY_TIME);
    34. }

  • 相关阅读:
    leetcode872. 叶子相似的树(java)
    Metabase学习教程:仪表盘-5
    【微信读书】数据内容接口逆向调试01
    看交互设计如何集成到Scrum敏捷流程中
    一百八十一、Hive——海豚调度HiveSQL任务时当Hive的计算引擎是mr或spark时脚本的区别(踩坑,附截图)
    WPF旋转变换
    使用python实现短线选股
    小程序开发时:getLocation:fail require permission desc
    计算机组成原理——系统总线
    [附源码]计算机毕业设计JAVA成都团结石材城商家协作系统
  • 原文地址:https://blog.csdn.net/m0_58832575/article/details/126363114