STM32的开发学习主要涉及软硬件两个部分的实现,包含众多外设和总线的理解配置。STM32的整个学习曲线并不陡峭,但入门却相当困难,因此在学习之初,多动手实验和测试相当重要,GPIO作为整个STM32与外部连接的端口,难度不高,却十分重要。从深入解析GPIO外设开始,一步步熟悉掌握STM32各个模块,就是STM32的整个学习流程。

GPIO模块回顾

在嵌入式软件开发中,几乎所有功能的实现都需要GPIO端口输出才能发挥作用。GPIO端口的操作包括时钟使能,寄存器配置,端口信息修改。这些基础的东西上一章已经讲过,我这里就不在细说,我这里主要讲GPIO涉及到的其它库函数。

1. 读取GPIO端口数据函数

GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_y);//读取单个输入端口的数据

 GPIO_ReadInputData(GPIOx);//读取整个输入端口的数据

GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin_y);//读取单个输出端口的数据

 GPIO_ReadOutputData (GPIOx);//读取整个输入出端口的位数据

这4个库函数是用来直接读取端口数据的,其中x:A-G y: 0~15

上面的函数实现的是读取当前GPIO口或位的输入输出数据,库函数没有什么可说的。

但这几个函数涉及到下面两个寄存器:

端口数据输入寄存器(GPIOA_IDR~GPIOG_IDR);

端口数据输出寄存器(GPIOA_ODR~GPIOG_ODR);

这两个寄存器都是16位的,高16位保留,读取值为0,低16位代表着对应GPIO端口位[15:0]的状态,偏移值位0cH,具体地址可参考寄存器表。上面的库函数读取Data就是读取这两个寄存器中选定那个的低16位,读取DataBit就是读取选定寄存器16位中的任意选定位。

2 . 写入GPIO端口数据函数

GPIO_WriteBit(GPIOx, GPIO_Pin_y,BIT_SET/BIT_RESET);//置位或者复位单个输出端口的数据

GPIO_Write(GPIOx, 0x1111);//置位或者复位整个输出端口的数据

其中x:A-G y: 0~15

这两个函数是对GPIO_SetBits和GPIO_ResetBits的补充,可以满足对多个端口同时设置状态的特性。

端口复位置位寄存器(GPIOA_BSRR~GPIOG_BSRR) ,32bit复位置位寄存器,w(只写,下同),

[31~16]写0无效,写1对应GPIOx_ODR位置0

[15~0]写0无效,写1对应GPIOx_ODR位置1

端口复位寄存器(GPIOA_BRR~GPIOG_BRR),32bit复位寄存器w

  高16位保留,低16位

[15~0]写0无效,写1对应GPIOx_ODR位置0 若GPIOx_BRR和GPIOx_BSRR同时设置,以GPIOx_BSRR为准。

3. GPIO功能锁存函数

GPIO_PinLockConfig(GPIOx, GPIO_Pin_y);//锁存选择端口配置寄存器的对应位

 端口锁存寄存器(GPIOA_LCKR~GPIOG_LCKR),32bit寄存器,高16位保留,低16可随时读出,1代表对应配置位被激活锁存,0代表可以被激活,激活是有固定的写入顺序的。锁存是不能乱用的,如果锁存了一个端口的功能寄存器,那么在下次系统复位前,端口的功能就不可更改,这在某些情况下是有利的,特别是在程序中如果重新定义某些GPIO口的功能时,在确定其中某一GPIO端口在整个系统运行中状态保持不变,锁存就避免误修改,但是如果锁存的GPIO在后续的代码段中有不同的功能,就会无法修改,产生错误。因此锁存和GPIO_StructInit, GPIO_DeInit,GPIO_AFIODeInit这些初始化函数一样,使用前要考虑清楚。

4.GPIO特殊功能函数

函数GPIO_EventOutputConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcey);事件输出。

函数GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcey); 外设端口作为中断线号输入

这两个函数我就不多说了,在EXTI-NVIC中会有详细解释。

函数GPIO_PinRemapConfig(u32GPIO_Remap, FunctionalState NewState);改变指定管脚的映射,很多复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变的。就是上面库函数。

函数GPIO_AFIODeInit(); 取消所有的复用功能。

STM32学习笔记(三) STM32的GPIO的深入学习相关推荐

  1. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  2. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  3. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  4. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  5. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  6. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  7. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

  8. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  9. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

最新文章

  1. C++、C#控制台应用程序暂停下来的方法
  2. .net Remoting(1)基本内容
  3. 《HTML5 Canvas开发详解》——导读
  4. POJ - 3080 Blue Jeans(暴力+KMP)
  5. 二.java下使用RabbitMQ实现hello world
  6. plupload怎么设置属性_腾达无线路由器怎么设置,这些是你要知道的
  7. Elasticsearch--高级-映射mapping_添加行的字段映射---全文检索引擎ElasticSearch工作笔记018
  8. FFmpeg的编解码(二)
  9. 计算机网络管理员初级是几级,计算机网络管理员初级操作技能考核试题
  10. Js~弹出框插件jquery.boxy
  11. 必备技能!聊聊二维码扫码登录的原理
  12. Style笔记(css, stylus,less)
  13. 商务与经济统计_电子商务类北大核心期刊目录大汇总!(推荐收藏!)
  14. python lisp_随笔:code.org与python,FoxDot,Lisp
  15. Vitalik Buterin:我的 40 升背包旅行指南
  16. MTCNN中的IOU详解
  17. 微信打不开第三方二维码或链接的解决办法
  18. 一本通题解——1251:仙岛求药
  19. Shotgun/Shotgrid入门学习笔记一
  20. 4位数码管显示模块TM1637芯片C语言驱动程序

热门文章

  1. 给你一份长长长的 Spring Boot 知识清单(上)
  2. Underscore.js 入门
  3. 框架:SpringMVC的工作原理
  4. 系统设计:性能指标、伸缩性、扩展性、可用性、安全性
  5. 【Python】青少年蓝桥杯_每日一题_10.03_输出数据
  6. Java 多态中成员变量与成员属性的特点【复习】
  7. java添加时间,如何通过Java中的addHours()方法添加时间
  8. mysql主从数据库怎么还口令,mysql数据库主从同步方法讲解
  9. 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享
  10. 统计123出现次数_如何使用 count 统计词条出现次数?