STM32学习笔记(三) STM32的GPIO的深入学习
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(); 取消所有的复用功能。
相关代码参考:按键控制LED灯
STM32学习笔记(三) STM32的GPIO的深入学习的更多相关文章
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
随机推荐
- c#播放器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- C#字符串题目
老师给小学生门布置了一些作业,让它们按照一个模版写一些字符串交上来,同学们把作业交上来了,问题来了,这么多的作业老师批改不过来,现在请你帮老师写一个程序,帮助老师确定各个字符串是否合格.首先老师有一个 ...
- [Django_1_1]第一个app
Django 第一个app 本篇负责介绍添加第一个Django app. 本篇文章的上一篇为:Django 初次见面 关于App和Project 简单的来说,一个项目(Project)可以由很多个应用 ...
- 2017年1月7日 星期六 --出埃及记 Exodus 21:33
2017年1月7日 星期六 --出埃及记 Exodus 21:33 "If a man uncovers a pit or digs one and fails to cover it an ...
- Tomcate配置单向双向SSL
1.单向SSL 一.在Tomcate的service.xml文件中放开SSL配置 <!-- <Connector port="8443" protocol=" ...
- windows下的mysql客户端mysqlworkbench链接虚拟机上CentOS的mysql服务器
本人在虚拟机上CentOS的Linux环境下安装了mysql服务器,在本地Windows下安装了mysql的客户端mysqlworkbench ,所以就想让windows下的mysql客户端mysql ...
- ZOJ 2182 Cable TV Network(无向图点割-最大流)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2182 题意:给出一个无向图,问最少删掉多少个顶点之后图变得不连通 ...
- HDU 5810 Balls and Boxes(盒子与球)
Balls and Boxes(盒子与球) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- 读Effective Java笔记之one:static Factory methods instead of Constructors (静态工厂方与构造器)
获取类的实例的方法有很多种,在这很多种方法中,它们各有优缺,各有特点.这里,只介绍2中方法 1.使用构造方法 public class Person { private String sex; /** ...
- 复制选中的listbox内容
private void lt_log_MouseClick(object sender, MouseEventArgs e) { Clipboard.SetDataObject(lt_log.Sel ...