当前位置: 首页 > news >正文

STM32(二):GPIO

GPIO(General Purpose Input Output)通用输入输出口

1.可配置为8种输入输出模式,引脚电平:0V~3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。

2.STM引脚定义:带FT 就是可以容纳5V电压的引脚

3.APB2外设总线:STM32中所有GPIO都是挂载在APB2总线上,每个GPIO外设有16个引脚;寄存器为32位,高16位未使用;驱动器:负责增大驱动能力(点灯 )施密特触发器。

        IO引脚接两个保护二极管,这是对输入电压进行限幅。VDD=3.3V  VSS=0V;输入电压>3.3V 上方二极管导通,输入电压<0V 下方二极管导通。不会从内部电路吸取电流。

        上拉电阻,下拉电阻(给输入提供一个默认的输入电平):上闭下开:上拉输入模式;下闭上开:下拉输入模式,都闭合:浮空输入模式。

        施密特触发器(整形):电压大于上限,输出高电平,电压小于下限,输出低电平,然后输入寄存器可以读取某一位的数据。

        模拟输入接ADC,复用功能输入:连接到其他外设输入端口的引脚上

        输出寄存器:控制16个端口,只能整体读写。

        推挽输出模式(PN-MOS都有效)下,高低电平都有驱动能力,STM32对IO口具有绝对的控制权,高低电平都由STM32说了算。数据寄存器为1,上管导通,下官断开,输出直接街道VDD输出高电平。

        开漏输出模式下,P-MOS无效,只有N-MOS工作,只有低电平有驱动能力。作用:输出5V电平信号(输出端口加一个5v的上拉电阻)、I2C通讯

默认低电平输出

模拟输入:ADC模数转换器专属配置。开漏、推挽输出时,输入也是有效的。

使用GPIO的三个步骤:

    1. 使用RCC开启GPIO时钟

        RCC外设常用的三个函数:AHB、APB2、APB1

    2. 使用GPIO_Init函数初始化GPIO

    3. 使用输出或者输入的函数控制GPIO口

四个常用GPIO输出函数:

    void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 指定端口设置为高电平

    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);指定端口设置为低电平

    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);根据第三个参数的值设置指定的端口。

    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);第一个参数选择外设,第二个参数__,这个函数可以停驶对16个端口进行写入操作。

GPIO的输出模式:

     GPIO_Mode_AIN = 0x0,模拟输入

      GPIO_Mode_IN_FLOATING = 0x04,浮空输入

      GPIO_Mode_IPD = 0x28,下拉输入

      GPIO_Mode_IPU = 0x48,上拉输入

      GPIO_Mode_Out_OD = 0x14,开漏输出

      GPIO_Mode_Out_PP = 0x10,推免输出

      GPIO_Mode_AF_OD = 0x1C,复用开漏

      GPIO_Mode_AF_PP = 0x18复用推免

A15,B3,B4 端口不能直接使用,这几个端口默认是JTAG调试端口,需要特殊配置。

按键(输入设备)

 

电路中,电容一边接地,一边接入电路,考虑是否是滤波电容作用。

 

51单片机中,int是16位;STM32中,int占32位,long占32位

typedef只能对变量的名字进行重命名,define宏定义任何都可以

GPIO读取函数

        uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);返回值代表这个端口的高低电平。

        uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);返回值16位数据,每一位代表一个端口值

        uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);读取输出寄存器

        uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构:线性结构之顺序表、链表篇
  • 零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?
  • mac如何恢复被同名替换掉的文件夹 mac文件被替换如何恢复
  • 【Hadoop】建立圈内组件的宏观认识
  • PostgreSQL的 log_min_messages 和 log_min_error_statement 参数
  • 怎么在网络攻击中屹立不倒
  • Django-rest-framework(DRF)怎么使用celery
  • C#身份核验接口-身份证查询接口-身份证实名制API
  • TinaSDKV2.0 Kernel基本开发
  • 算法【Java】 —— 滑动窗口
  • C# 将Dll嵌入exe中发布
  • xss.function靶场(hard)
  • ECMAScript6块级声明:let声明、const声明
  • zabbix7.0 设置中文语言( Debian GNU/Linux 12)
  • pox破晓工作流部署过程
  • [数据结构]链表的实现在PHP中
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 2017届校招提前批面试回顾
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Codepen 每日精选(2018-3-25)
  • export和import的用法总结
  • JavaScript-Array类型
  • Median of Two Sorted Arrays
  • Object.assign方法不能实现深复制
  • Quartz初级教程
  • React as a UI Runtime(五、列表)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 基于axios的vue插件,让http请求更简单
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 深入浅出webpack学习(1)--核心概念
  • 算法系列——算法入门之递归分而治之思想的实现
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 硬币翻转问题,区间操作
  • 中文输入法与React文本输入框的问题与解决方案
  • 最近的计划
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​决定德拉瓦州地区版图的关键历史事件
  • #includecmath
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (26)4.7 字符函数和字符串函数
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Java入门)学生管理系统
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (不用互三)AI绘画工具应该如何选择
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四) 虚拟摄像头vivi体验
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.01.09
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。