| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法 -> 正文阅读 |
|
[嵌入式]一.STM32嵌入式学习--GPIO口(1)--IO口的基础知识以及配置程序的方法 |
? ? ? ? 学习单片机,从学习GPIO口开始。 ????????我们在日常的编写程序时离不开IO口的配置,而IO口的学习是在stm32中比较基础,对初学者比较友好,又比较全面的一个基础功能,所以我们都是从GPIO口的学习开始接触stm32。 ? ? ? ? 首先我们要确定我们的学习方法,在stm32的学习中,我们是基于不同的芯片进行配置和使用,所以我们需要从三个方向来学习。 ????????什么是GPIO口? ? ? ? ? 怎么去配置GPIO口? ????????GPIO口的具体应用在哪里? 1.什么是GPIO? IO口:I:input 输入? ? ? ? ? O:output 输出 作用:是芯片与外界做信息交换的唯一通道。 数量:以STM32F407VGT6为例,该芯片有100引脚,其中包括5组IO口 5组:GPIOA,GPIOB到E ?每一组有0~15号(16个)? GPIOA:0 1 2 3......15 ????????????16个 ??? GPIOB:0 1 2 3......15 ????????????16个 GPIOC:0 1 2 3......15 ????????????16个 ??? GPIOD:0 1 2 3......15 ????????????16个 GPIOE:0 1 2 3......15 ????????????16个 ??? ??PA5表示:GPIOA组的5号IO口? ? ? ?? 2.如何去配置IO 口 我们在学习嵌入式的过程中,需要通过数据手册来查看芯片框图,通过查看具体中文参考手册来查看具体IO口的功能和配置。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GPIO控制器(STM32F101xx为例) ?初学者在尝试看图时,发现没有头绪。此时我们应该将图分割成不同的部分来看。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GPIO口输入部分框图 1.保护二极管:防止击穿; 2.肖特基触发器:将输入的连续信号转换为离散信号。 我们通过该图不难看出:我们的信息or电平从IO口输入经过三条不同的道路到芯片内核进行处理。 其中我根据写程序的经验将这“三条路”分为三个输入方式: 通用输入:直接检测IO口的电平状态(如果需要读取外界给IO口的电平状态,就要用通用输入) 复用输入:从IO进来的数据信号要经过片上外设(串口控制器),再到核心。IO就要用复用输入模式 模拟输入:外界的模拟量(电压)通过IO口进入到ADC控制器,ADC控制器转换成数字量(模数转换) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GPIO口输出部分 我们通过输入部分总结出来的概念不难区分: 从内核直接读取或者写入的为通用输出部分,而从片上外设间接从内核读取或者写入的输出为复用输出。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GPIO通用输出(两条路径都可) 从而我们总结出: 通用输出:核心直接控制IO输出高低电平,就用通用输出模式 复用输出:核心将数据信号发送到片上外设,片上外设再通过IO口传送出去.IO口复用输出模式 在其他的芯片中我们还可能看到模拟输出,通过DAC片上外设进行数模转换,再将模拟数据通过IO口传输出去。 我们还看到输出相对于输入有输出类型的选择,包括推挽输出和开漏输出。 推挽输出:IO口可以输出高电平,也可以输出低电平。 开漏输出:IO口只能输出低电平。 至此,我们总结了GPIO口信息交换的几种方式,还可以通过更形象的图像来显示: 我们把IO口信息交换的具体工作方式理清楚了,我们也懂了有多少种输入输出方式。 通过这些,我们应该懂得如何使用IO口,而且要根据需求来确定选择哪一种模式。 那我们来看看IO口对应的寄存器有哪些 学会查看寄存器要从以下几点做起: 1.寄存器的名字 2.寄存器的功能 3.寄存器有多少位,几位控制一个IO 4.具体如何配置 ?1.寄存器的名字 在具体编写程序时应写成对应IO口指向该寄存器,譬如: PA5:GPIOA->CRL PE0:GPIOE->CRL ?2.寄存器的功能 如图所示,在寄存器的下方有该寄存器的具体功能在哪一位; 在该寄存器下方主要配置IO口的具体的输入/输出模式和输出的速度, 譬如我要配置PA0的通用输入:GPIOA->MODE &= ~(3<<0);(直接清零即可) 譬如我要配置PC6的复用输出:GPIOC->MODE &=~(3<<24); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GPIOC->MODE |=(2<<24); (上述代码使用了c语言的位运算的知识) 3.寄存器有多少位,几位控制一个IO 我们要清楚寄存器有几位,而且哪位配置哪些功能,其次,我们也要看清楚几位控制一个IO,如果是一位,我们可以直接对该位进行清零或者置一或者写值,如果是两位以上,我们需要先将其清零,再进行写值。 总结:回到我们最初的三个问题: ????????什么是GPIO口? ? ? ? ?是芯片与外界做信息交换的唯一通道。 ? ? ? ? 怎么去配置GPIO口? ? ? ? ? 根据自己的需求来确定信息交换的模式,再通过框图确定需要使用的寄存器进行配置 ????????GPIO口的具体应用在哪里? ????????通用输入:直接检测IO口的电平状态(如果需要读取外界给IO口的电平状态,就要用通用输入模式。 ????????复用输入:从IO进来的数据信号要经过片上外设(串口控制器),再到核心。IO就要用复用输入模式。 ????????模拟输入:外界的模拟量(电压)通过IO口进入到ADC控制器,ADC控制器转换成数字量(模数转换) ????????通用输出:核心直接控制IO输出高低电平,就用通用输出模式 ????????复用输出:核心将数据信号发送到片上外设,片上外设再通过IO口传送出去.IO口复用输出模式 ????????模拟输出:通过DAC片上外设进行数模转换,再将模拟数据通过IO口传输出去。 最后进行知识补充:位运算 如果需要某个变量的某一位变为0,其他位不改变 a = a & ~(1 << x); ????????????// a &= ~(1<<x) ? 公式: 如果需要某个变量的某一位变为1,其他位不改变 a = a | (1 << x); ?????????????//a |= (1<<x) ? 公式: 如果对某两位写入某个值,其他位不变, 一定要先清零两位 再或上具体值 a = a & ~(3<<x); //清零 ???//a &= ~(3<<x) ; ??? a = a | (n << x) ??????????// a |= (n<<x); 01 ????n:1 10 ????n:2 11 ????n:3 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:40:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |