版本:STM32F429 Hal库v1.10

  在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output 、通用输入/输出)了,在STM32中,除了除去ADC以外的复用功能,剩下的几乎就是GPIO了。

下面给出GPIO的基本使用步骤:

初始化

1.声明一个GPIO属性结构体,设置各成员属性

  这个结构体的属性是这样的:

typedef struct
{
  uint32_t Pin;         /*指定的引脚号,右值表达式可以是GPIO_PIN_0到~GPIO_PIN_15任意相或 */
  uint32_t Mode;        /*    模式    GPIO_MODE_INPUT       输入模式    GPIO_MODE_OUTPUT_PP    推挽输出模式(输出较大电流)    GPIO_MODE_OUTPUT_OD    开漏输出模式(一般外接上拉电阻)    GPIO_MODE_AF_PP       复用推挽输出模式    GPIO_MODE_OUTPUT_OD    复用开漏输出模式    GPIO_MODE_ANALOG      复用模拟输入输出模式(ADC/DAC专用)  */
  uint32_t Pull;    /*    上/下拉模式      上拉电阻是指当pin接到VCC(高电平)时所接的电阻即为Pull up 电阻,      反之亦然,pin接地时所接的电阻即pull down电阻    GPIO_NOPULL   无    GPIO_PULLUP   上拉    GPIO_PULLDOWN  下拉  */
  uint32_t Speed;  /*    IO口速率(I/O口驱动电路的速度)    当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。    高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。    STM32F429的端口输出速率为括号内容
    GPIO_SPEED_LOW;    (2)   2MHz注意:    GPIO_SPEED_MEDIUM;  (25)  12.5MHz ~ 50MHz     GPIO_SPEED_FAST;   (50)  25MHz ~ 100 MHz     GPIO_SPEED_HIGH;   (100)  50MHz ~ 200MHz 
  */

  uint32_t Alternate;    /*    复用功能,本节省略不讲   */
}GPIO_InitTypeDef;

2.使能GPIOx对应的时钟(如果没有使能将会导致配置无效)

  __HAL_RCC_GPIOB_CLK_ENABLE(void);           //开启GPIOB时钟

3.调用void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init) 函数

初始化例程

void LED_Init(void)
{
  // 初始化函数
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_GPIOB_CLK_ENABLE();           //开启GPIOB时钟

    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}

IO口的读写

读:

  GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  Pxin(GPIO_Pin);   // x 可以是ABCD等端口

写:

  void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
  Pxout(GPIO_Pin);   // x 可以是ABCD等端口
  void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);

读写例程

#include "stm32f4xx.h"
#define  LED0 PAout(0)
,,,); ); ;                 //LED0亮
    delay_ms();
    LED0=;                   //LED0灭
      delay_ms();
    }
}

STM32学习笔记:【003】GPIO的更多相关文章

  1. stm32学习笔记之GPIO功能框图分析

    GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 芯片的GPIO被分 ...

  2. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  3. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  4. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  5. STM32学习笔记(四)——串口控制LED(中断方式)

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

  6. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  7. STM32学习笔记-NVIC中断知识点

    STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...

  8. STM32学习笔记(三) STM32的GPIO的深入学习

    STM32的开发学习主要涉及软硬件两个部分的实现,包含众多外设和总线的理解配置.STM32的整个学习曲线并不陡峭,但入门却相当困难,因此在学习之初,多动手实验和测试相当重要,GPIO作为整个STM32 ...

  9. STM32学习笔记之一(初窥STM32)

    怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个 ...

  10. STM32学习笔记(一)——点亮一个LED

    引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...

随机推荐

  1. 洛谷P1216数字三角形题解

    题目 这道题是一个典型的DP,可以用倒推,顺推的方法,来解这道题.当然用不同的方法他的循环次序是不一样的,所以我们一定要深刻地理解题目的大意,再采用状态转移方程与边界每次求出最优解,并记录循环一遍后就 ...

  2. BZOJ 3261 最大异或和(算竞进阶习题)

    可持久化Trie 需要知道一个异或的特点,和前缀和差不多 a[p] xor a[p+1] xor....xor a[n] xor x = a[p-1] xor a[n] xor x 所以我们把a[1. ...

  3. #565. 「LibreOJ Round #10」mathematican 的二进制(期望 + 分治NTT)

    题面 戳这里,题意简单易懂. 题解 首先我们发现,操作是可以不考虑顺序的,因为每次操作会加一个 \(1\) ,每次进位会减少一个 \(1\) ,我们就可以考虑最后 \(1\) 的个数(也就是最后的和) ...

  4. Python中使用operator模块实现对象的多级排序

    Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...

  5. wcf 发布到iis后报错

    HTTP Error 404.3 - Not Found http://iweb.adefwebserver.com/Default.aspx?tabid=57&EntryID=34 未能从程 ...

  6. 【dp】P1434 [SHOI2002]滑雪

    题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...

  7. bzoj1066 蜥蜴 (dinic)

    最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...

  8. 使用指针来实现变长数组(VLA)

    实现代码: #include <cstdio> #include <cstdlib> void usePtoImplementVLA(int SIZE) { scanf(&qu ...

  9. wildfly tomcat 服务器不响应 不返回 死住了 查看tcp CLOSE_WAIT 暴多

    I'm also having the same issue with a very latest Tomcat server (7.0.40). It goes non-responsive onc ...

  10. 用lemon测交互题

    题目类型:传统. 答案比较类型:逐行比较类型(忽略多余空格和制表符). 配置:交互. 编译器参数: -o %s %s.* ..\..\data\%s\judge.cpp -Wl,--stack= ju ...