首页 > 其他分享 >HAL库学习梳理——GPIO

HAL库学习梳理——GPIO

时间:2024-09-12 17:54:28浏览次数:3  
标签:输出 CODE HAL PIN USER GPIO 梳理

  笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。有一说一,这个教程自诩为“最佳教程,没有之一~”,确实有点东西。像我这种看视频想睡觉的入门小白来说,感觉捡到宝了。下面对这些课程的应用做一个梳理。

省流:

 HAL_Delay(500);

延时函数:延时500ms 。

HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_RESET);

 设置IO引脚:将GPIOG的G6引脚置低电平GPIO_PIN_RESET。

if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET)

 读取IO引脚:判断 GPIOC的C13引脚 是否为 低电平GPIO_PIN_RESET(GPIO_PIN_SET)。

1、电源MOS命名

 2、GPIO口的通用和复用

通用(直接控制)、复用(其他模块托管)
引脚的复用功能示意图

 IO复用就是同一个IO引脚具备多个不同的功能,它既可以被用户直接编程,也可以给芯片的其他模块使用。

IO口重映射

 3、GPIO工作模式

8种工作模式

3.1 推挽输出和开漏输出

推挽输出和开漏输出

 推挽输出模式下,一对MOS管交替导通,对外输出低电压高电压

 开漏输出模式下,PMOS保持关断,可以对外输出低电压高阻抗

 3.2 最大输出速度选择

低速、中速、高速三种输出速度选择

3.3 输入模式

三种输入模式
上拉、下拉模式

4、示例

4.1 LED灯闪烁 

(1)LED灯输出配置

引脚示意图

PC13  阳极接高电压(Vdd),需要使用开漏输出,写0输出低电压写1输出高阻态

PA9    阴极接低电压(Vss),需要使用推挽输出,写0输出低电压写1输出高电压

GPIO输出引脚配置

(2)编写程序

GPIO HAL库编程接口
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);   // 点亮LED,C13置0,开漏输出低电压
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);      // 点亮LED,C9置1,推挽输出高电压
      HAL_Delay(500);

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);     // 熄灭LED,C13置1,开漏输出高阻态
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);    // 熄灭LED,C9置0,推挽输出低电压
      HAL_Delay(500);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 4.2 按键控制LED灯亮灭

(1)按键输入配置

按键输入示意图

GPIO输入引脚配置

(2)程序 

GPIO HAL库编程接口
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET)   // 判断 按键输入引脚C13 是否为低电平
    {
      HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_RESET);     // 置 LED输出引脚G6 为低电平
     
    }
    else if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_SET)
    {
      HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_SET);

    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

标签:输出,CODE,HAL,PIN,USER,GPIO,梳理
From: https://blog.csdn.net/hjlkklk/article/details/142177393

相关文章

  • 科普文:软件架构数据库系列之【MySQL5.7的系统表梳理】
    概叙MySQL5.7的系统中包含了多个重要的系统表,这些表分布在不同的数据库中,提供了关于数据库结构、权限、性能等关键信息的访问。mysql>\s;--------------mysqlVer14.14Distrib5.7.21,forWin64(x86_64)Connectionid:3Currentdatabase:Currentuser:......
  • 基于STM32C8T6的CubeMX:HAL库点亮LED
    三个可能的问题和解决方法:大家完成之后回来看,每一种改错误都是一种成长,不要畏惧,要快乐,积极面对,要耐心对待STMCuBeMX新建项目的两种匪夷所思的问题https://mp.csdn.net/mp_blog/creation/editor/142151511STMCubeMX文件下载后会出现其他项目无法下载的问题https://mp.csdn.ne......
  • 第5讲:Halcon 测量点线距离
    一、概述    点线距离测量在3D测量项目中处于基础地位,必须要掌握。以下为可直接运行的代码。二、效果        三、Halcon代码*初始化窗口dev_update_off()dev_close_window()dev_open_window(0,0,768,512,'black',WindowHandle)*给点的大小......
  • 蓝桥杯【物联网】零基础到国奖之路:三. GPIO输出之LED
    蓝桥杯【物联网】零基础到国奖之路:三.LED蓝桥杯【物联网】零基础到国奖之路:三.LED第一节硬件解读第二节cubeMX配置第三节代码部分1,配置下载器2,下载程序3,代码管理4,控制小灯代码蓝桥杯【物联网】零基础到国奖之路:三.LED第一节硬件解读STM32GPIO有四种输......
  • 【ZYNQ MPSoC Linux开发】为什么ZYNQ的EMIO不需要配置pinctrl子系统而只需要配置GPIO
        要细究这个问题,首先要知道pinctrl子系统和GPIO子系统究竟是干什么的,pinctrl子系统主要用于配置引脚的状态(如功能复用、电气属性等),而在Linux的软件架构中,GPIO子系统提供了对GPIO引脚的直接操作接口,如设置引脚方向、读取/写入引脚值等。    我们知道,在使用......
  • 一文梳理RAG(检索增强生成)的现状与挑战
    一RAG简介大模型相较于过去的语言模型具备更加强大的能力,但在实际应用中,例如在准确性、知识更新速度和答案透明度方面,仍存在不少问题,比如典型的幻觉现象。因此,检索增强生成(Retrieval-AugmentedGeneration,RAG)被当作于大模型应用开发的一种新范式。RAG是指在利用大语言模型......
  • 论文框架梳理(二)——密集场景下旋转小目标检测
    前言研究型论文写作指导教材参考链接论文结构梳理(e.g.)论文:《SCRDet++:DetectingSmall,ClutteredandRotatedObjectsviaInstance-LevelFeatureDenoisingandRotationLossSmoothing》期刊:IEEETransactionsonPatternAnalysisandMachineIntelligence出......
  • Docker 知识梳理及其安装使用EE
    目录Docker介绍为什么Docker很受欢迎?Docker的关键组件Docker架构以及Docker的工作原理?DockerDaemonDockerClientDockerHostDockerRegistryDockerObjectsDockerImagesDockerContainersDockerStorageDocker网络Docker安装方式准备环境在线YU......
  • Docker 知识梳理及其安装使用
    Docker介绍Docker是一个强大的工具,用于高效开发、打包和部署应用程序。Docker是一种容器管理服务。Docker于2013年发布。它是开源的,可用于Windows、macOS和Linux等不同平台。Docker正在快速交付、测试和部署代码。这样可以减少编写代码和在生产环境中运行代码之间的延......
  • STM32 PWM 详解(基于 STM32F429 HAL 库)
    目录前言一、PWM简介二、STM32F429的PWM功能1.定时器资源2.PWM模式3.PWM原理图三、使用HAL库配置STM32F429的PWM1.开启时钟2.配置定时器3.配置通道 4.启动定时器 5.PWM占空比的调节 四、应用实例五、总结前言        在嵌入式系统开......