【STM32F407学习笔记】GPIO(一)

  • 1. GPIO基础知识
    • 1.1 GPIO工作方式
    • 1.2 GPIO相关配置寄存器
      • 1.2.1 端口模式寄存器:GPIOx_MODER
      • 1.2.2 输出类型寄存器:GPIOx_OTYPER
      • 1.2.3 输出速度寄存器:GPIOx_OSPEEDR
      • 1.2.4 上拉/下拉寄存器:GPIOx_PUPDR
      • 1.2.5 输入数据寄存器:GPIOx_IDR
      • 1.2.6 端口置位/复位寄存器:GPIOx_BSRR(包含BSSRH和BSSRL)
  • 2. GPIO输出的相关库函数
    • 重要函数
  • 3 实验操作
    • 3.1 使用库函数进行操作
    • 3.2 使用寄存器操作

1. GPIO基础知识

1.1 GPIO工作方式

  • 4种输入模式:

    1. 输入浮空
    2. 输入上拉
    3. 输入下拉
    4. 模拟输入
  • 4种输出模式:
    1. 开漏输出(带上拉或下拉)
    2. 开漏复用功能(带上拉或下拉)
    3. 推挽输出(带上拉或下拉)
    4. 推挽复用功能(带上拉或下拉)
  • 4种最大输出速度:
    1. 2MHz
    2. 25MHz
    3. 50MHz
    4. 100MHz

上电复位后GPIO默认为浮空状态,部分特殊功能引脚为特定状态。
推挽输出:可以输出强高低电平,连接数字器件
开漏输出:只可以输出强电平,高电平需要靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型驱动

1.2 GPIO相关配置寄存器

每组GPIO端口的寄存器包括10个寄存器:

  • 4个32位配置寄存器

    • GPIOx_MODER:端口模式寄存器
    • GPIOx_OTYPER:输出类型寄存器
    • GPIOx_OSPEEDR:输出速度寄存器
    • GPIOx_PUPDR:输出上下拉寄存器
  • 2个32位数据寄存器
    • GPIOx_IDR:输入数据寄存器
    • GPIOx_ODR:输出数据寄存器
  • 1个端口置位/复位寄存器
    • GPIOx_BSRR
  • 1个端口配置锁存寄存器
    • GPIOx_LCKR
  • 2个端口复用功能寄存器
    • GPIOx_AFRL
    • GPIOx_AFRH

通过这10个寄存器,可以控制一组GPIO的16个IO口

1.2.1 端口模式寄存器:GPIOx_MODER

位2y:2y+1 MODERy[1:0]:端口x配置位(y=0,1,…,15)

  • 00:输入(复位状态)
  • 01:通用输出
  • 10:复用功能模式
  • 11:模拟模式

1.2.2 输出类型寄存器:GPIOx_OTYPER

位32:16保留,必须为复位值
位15:0 OTy[1:0]:端口x配置位(y=0,1,…,15)

  • 0:输出推挽(复位状态)
  • 1:输出开漏

1.2.3 输出速度寄存器:GPIOx_OSPEEDR

位2y:2y+1 OSPEEDRy[1:0]:端口x配置位(y=0,1,…,15)

  • 00:2MHz(低速)
  • 01:25MHz(中速)
  • 10:50MHz(快速)
  • 11:100MHz(高速)

1.2.4 上拉/下拉寄存器:GPIOx_PUPDR

位2y:2y+1 PUPDRy[1:0]:端口x配置位(y=0,1,…,15)

  • 00:无上下拉
  • 01:上拉
  • 10:下拉
  • 11:保留

1.2.5 输入数据寄存器:GPIOx_IDR

位32:16保留,必须保持复位值
位15:0 IDRy[15:0]:端口输入数据(y=0,1,…,15)
这些位为只读形式,只能在字模式下访问,它们包含相应IO口的输入值

1.2.6 端口置位/复位寄存器:GPIOx_BSRR(包含BSSRH和BSSRL)

注意:同时对BSy和BRy进行操作,则置位操作BSy优先级更高。
位32:16 BRy:端口x复位位y(y=0,1,…,15)(BSSRH)

  • 0:不会对ODRx位进行任何操作
  • 1:对相应的ODRx位进行复位操作

位15:0 BSy:端口x置位位y(y=0,1,…,15)(BSSRL)

  • 0:不会对ODRx位进行任何操作
  • 1:对相应的ODRx位进行置位操作

2. GPIO输出的相关库函数

重要函数

  • GPIO初始化

    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
    

    作用:初始化一个或多个IO口(同一组的GPIO)的工作模式,输出类型,速度以及上下拉方式。

    typedef struct
    {uint32_t GPIO_Pin//指定要初始化的端口GPIOMode_TypeDef GPIO_Mode;//端口模式GPIOSpeed_TypeDef GPIO_Speed;//速度GPIOOType_TypeDef GPIO_OType; //输出类型GPIOPuPd_TypeDef GPIO_PuPd;//上拉或者下拉
    }GPIO_InitTypeDef;
    /*端口模式*/
    typedef enum
    { GPIO_Mode_IN   = 0x00, // 输入GPIO_Mode_OUT  = 0x01, // 普通输出模式GPIO_Mode_AF   = 0x02, // 复用功能GPIO_Mode_AN   = 0x03  // 模拟功能
    }GPIOMode_TypeDef;
    /*速度*/
    typedef enum
    { GPIO_Low_Speed     = 0x00, /*!< Low speed    */GPIO_Medium_Speed  = 0x01, /*!< Medium speed */GPIO_Fast_Speed    = 0x02, /*!< Fast speed   */GPIO_High_Speed    = 0x03  /*!< High speed   */
    }GPIOSpeed_TypeDef;
    /*输出类型*/
    typedef enum
    { GPIO_OType_PP = 0x00,// 推挽输出GPIO_OType_OD = 0x01 // 开漏输出
    }GPIOOType_TypeDef;
    /*上下拉*/
    typedef enum
    { GPIO_PuPd_NOPULL = 0x00, // 浮空GPIO_PuPd_UP     = 0x01, // 上拉GPIO_PuPd_DOWN   = 0x02  // 下拉
    }GPIOPuPd_TypeDef;
    
  • 设置输出电平
    void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //置位 实际操作BSRRL寄存器
    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//复位 实际操作BSRRH寄存器
    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//设置值
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);// 写入端口的值
    

3 实验操作

3.1 使用库函数进行操作

// 挂载时钟
// GPIOD
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
// 配置端口PD13,14,15;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;// 普通输出模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100Mhz
GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_DOWN;// 上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;// 引脚
GPIO_Init(GPIOD,&GPIO_InitStructure);
delay_init(128);
while(1)
{GPIO_SetBits(GPIOD,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);delay_ms(200);GPIO_ResetBits(GPIOD,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);delay_ms(200);
}

3.2 使用寄存器操作

// 挂载时钟
RCC->AHB1ENR|=(1<<3); //GPIOD
// 配置端口13
// 01:普通输出模式
GPIOD->MODER&=~(3<<(13*2));
GPIOD->MODER|=(1<<(13*2));
// 0:推挽输出
GPIOD->OTYPER|=(0<<13);
// 11:高速
GPIOD->OSPEEDR|=(3<<(13*2));
// 01:上拉­
GPIOD->PUPDR|=(1<<(13*2)); delay_init(128);
while(1)
{GPIOD->BSRRL|=(1<<13);// 置位PD13delay_ms(200);GPIOD->BSRRH|=(1<<13);// 复位PD13delay_ms(200);
}

【STM32F407学习笔记】GPIO(一)相关推荐

  1. 华芯微特SWM181学习笔记--GPIO应用与环境搭建

    华芯微特SWM181 系列 32 位 MCU(以下简称 SWM181)内嵌 ARM® CortexTM-M0 内核, SWM181 支持片上包含精度为 1%以内的 24MHz.48MHz 时钟,并提供 ...

  2. RT-1052学习笔记 - GPIO架构分析

    RT-1052学习笔记 - GPIO架构分析 一.RT1052之GPIO与IOMUX 二.GPIO架构分析 分析GPIO的外设框架 库函数操作 1.初始化MUX 2.初始化PAD 3.初始化GPIO外 ...

  3. STM32F407学习笔记——MG90S舵机模块(基本控制)

    STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...

  4. 新唐芯片学习笔记——GPIO

    新唐芯片学习笔记--GPIO 概述 NuMicro®NUC029 最多有40个通用I/O引脚,这些引脚和其它功能共享.40个引脚分为6个端口,分别命名为P0, P1, P2, P3, P4和P5,每个 ...

  5. STM32学习笔记---GPIO

    STM32的学习笔记-GPIO 我使用的是STM32F401ZGT6,有7组IO口,每组16个引脚,共112个引脚. 因为太菜了,确实容易出错,还请赐教 参考官方文档:八种IO口模式区别 结构原理 该 ...

  6. 立创梁山派学习笔记——GPIO输出控制

    梁山派 前言 开发板简介 GD32F407ZGT6官方资源 数据手册 1.系统框图 2. 引脚复用表 3.命名规则 4.其他 用户手册 固件库与PACK包 开发环境搭建 立创官方的资料包 资料齐活,开 ...

  7. 树莓派学习笔记——GPIO功能学习

    0.前言 树莓派现在越来越火,网上树莓派的资料也越来越多.树莓派源自英国,国外嵌入式开源领域具有良好的分享精神,树莓派各种集成库也层出不穷,下面推荐几个. [ python GPIO ] [开发语言] ...

  8. 正点原子stm32F407学习笔记2——GPIO操作跑马灯实验

    一.库函数版本 1.硬件原理图 2.软件设计 打开上一节新建的库函数版本工程模板,直接点击工程下面的 USER 目录下面的 Template.uvproj. 跑马灯实验我们主要用到的固件库文件是: s ...

  9. AM335x(TQ335x)学习笔记——GPIO关键驱动移植

    或按照S5PV210学习秩序.我们首先解决的关键问题.TQ335x有六个用户按钮,每个上.下.剩下.对.Enter和ESC. 我想开始学习S5PV210当同一,写输入子系统驱动器的关键问题要解决,但浏 ...

最新文章

  1. c语言博客作业02--循环结构
  2. varnish 4.0 官方文档翻译12-VCL
  3. CMake基础 第7节 编译标志
  4. Hadoop之ReduceTask工作机制
  5. 这是一场数学、数学、数学的盛会
  6. 并发重复请求及幂等场景的实现总结
  7. Android开发笔记(五十)定时器AlarmManager
  8. 进程和线程(4)-进程 vs. 线程
  9. 网站生成EXE文件运行——PHP网站打包工具PHPWAMP
  10. 这8款数据恢复软件你见过吗?数据恢复软件推荐
  11. qq空间留言板删除 php,怎么批量删除QQ空间的说说
  12. HTML+CSS+JavaScript实现放大镜效果
  13. C# 同间字查询 (汉字转拼音 拼音转汉字 简体繁体互转 )
  14. 融合通信无人值守系统解决方案
  15. 去掉/隐藏 word的回车符
  16. python3小说爬虫之起点女生网
  17. 一份招聘公告暴露英特尔外包芯片计划
  18. 占豪--2010年的市场机会在哪里(兼谈股指期货与楼市)
  19. Scratch(三):跳一跳
  20. Java 程序员开发常用的工具

热门文章

  1. CSS系列之轮廓线outline
  2. Android学习之——Canvas画图
  3. centos7 学习第五天
  4. Git删除仓库.idea文件
  5. DSO(5)——零空间的计算与推导
  6. 基于零空间投影(NSB)行为法的多智能体控制
  7. fastadmin如何隐藏表格右上角的搜索,导出等功能按钮,如何实现多选变单选,如何实现点击表格行选中,如何实现双击表格行编辑
  8. WebSocket案例
  9. 1.程序员仪式与注释
  10. 美团智能客服核心技术与实践