ARM裸机开发(GPIO标准库开发)
一、使用的硬件开发板
开发板名称(硬件平台):FS-MP1A (STM32MP157AAA开发板套件)
主控制器:STM32MP157AAA3 = Cortex-A7 * 2 + Cortex-M4 ———— 异构核
CPU主频:Cortex-A7最高650MHz Cortex-M4最高209MHz
硬盘:eMMC(4G) TF卡(32G)
DDR3:512MB
网卡:千兆网卡
屏幕:5寸、7寸、HDMI屏幕
摄像头:OV5640
1、核心板
2、拓展板
二、硬件术语
1、原理图
原理图/电路图用于绘制并呈现各个电气元件的硬件连接
2、PCB板
PCB板的中文名字是印制电路板
PCB板用于集成各种硬件外设并综合连接
3、芯片手册
4、丝印
丝印就是存在于PCB板上的白色字体
丝印是用于标志存在于PCB板上的各个电气元件的唯一标识,每个电气元件的丝印是唯一的PCB板硬件的电路图存在于电路图.pdf文档中,所以,可以直接查看电路图.pdf文档,他就是PCB板的硬件连接
在电路图中,蓝色字体代表的就是丝印,和PCB板上的白色字体是同一个东西不同电气元件的丝印标识:电阻 ----- R电容 ----- C二极管 ----- D发光二极管 ----- LD三极管 ----- Q接插件 ----- J集成IC芯片 ----- U
5、网络编号
在电路图中,红色字体就是网络编号
网络编号用于标志某个引脚或者某个引脚的功能存在于电路图中的网络编号都是两两对应的
6、二极管
二极管的特点:单向导通性
二极管的作用:保护电路,防止电流方向击穿电路
7、三极管
三极管:基极、集电极、发射极
三级管的特性:放大特性(模拟电路)、开关特性(数字电路)
三极管的分类:NPN三极管、PNP三极管模拟信号:连续变化的数值
数字信号:由0和1组成的电信号,0代表低电平信号,1代表高电平信号
当前FS-MP1A硬件平台是基于数字电路设计,也就是数据传输时,只能使用0和1组成的数字电信号进行数据传输
三、电路分析
分析电路图主要做两件事:1、分析当前硬件的有效电路的导通和截断情况2、找到控制当前外设的引脚(连接在主控芯片上的引脚)查找外设的引脚:实际外设(IO拓展板)——> 接插件(IO拓展板)——> 排线 ——> 接插件(核心板)——> 主控芯片(核心板)以查找LD1 —— LED1引脚为例:1、在PCB板上找到需要控制的实际外设的丝印:LD12、在IO资源拓展板原理图中找到LD1对应的电路,分析当前电路的导通/截断情况,得到人为可控制的引脚:LED13、在IO资源拓展板原理图中的接插件上,寻找和LED1网络编号亮亮对应的引脚:接插件上的第38号引脚LED14、在接插件原理图中,找到拓展板接插件第38号引脚LED1/PE10,被连接到,核心板接插件上的第4号引脚PE10上5、在核心板原理图中的第14页接插件上,可以找到:第4号引脚PE106、在核心板原理图中的第5页STM32MP157A主控芯片上,可以找到:PE10引脚
总结:PE10 ——> LED1 ——> 控制LD1的有效电路是否导通
四、分析芯片手册
1、框图分析
2、MP157芯片内部框图
3、物理地址隐射表
4、RCC章节
5、GPIO章节
打开数据手册,看目录可以找到专门将GPIO的章节,也就是第13章节
1)GPIO介绍
GPIO口的八种工作模式:
输入模式 1. 浮空输入(Floating Input) FI 无内部上拉 / 下拉,电平由外部电路决定,易受干扰2. 上拉输入(Pull-Up Input) PU 内部接拉电阻到 VDD,无外部信号时默认输出高电平3. 下拉输入(Pull-Down Input) PD 内部接拉电阻到 GND,无外部信号时默认输出低电平4. 模拟输入(Analog Input) AI 引脚直接连接 ADC,用于采集模拟电压信号,不进行数字电平检测
输出模式 5. 推挽输出(Push-Pull Output) PP 可输出高 / 低电平,驱动能力强,适合直接驱动 LED、继电器等6. 开漏输出(Open-Drain Output) OD 仅能输出低电平,高电平需外部上拉电阻,适合电平转换、总线通信(如 I²C)7. 复用推挽输出(Alternate Push-Pull) AF_PP 引脚功能复用为外设(如 UART_TX、SPI_MOSI),输出结构为推挽8. 复用开漏输出(Alternate Open-Drain) AF_OD 引脚功能复用为外设(如 I²C_SDA/SCL),输出结构为开漏
2)上拉电阻
电路的悬空状态(高阻态):当前电路的阻值无限大,并不清楚当前电路处于高电平状态还是低电平状态
上拉电阻就是由一个电阻和电源相连
悬空状态的电路,存在不清楚是高电平还是低电平的问题,当外接上拉电阻以后,可以稳定当前电路处于高电平状态
3)下拉电阻
下拉电阻就是一个电阻与GND相连接
当一个电路处于悬空状态时,外接一个下拉电阻,可以时当前电路处于稳定的低电平状态,用于保护电路
4)推挽输出
使用推挽输出时
GPIO外设控制器中的N-MOS管和P-MOS管都可以正常工作
可以正常的输出高电平信号和低电平信号
5)开漏输出
使用开漏输出时
GPIO外设控制器中的P-MOS管不工作,N-MOS管正常工作
无法输出高电平信号,可以输出低电平信号如果一定要用开漏输出模式输出高电平,可以外接上拉电阻
这样在GPIO口悬空时会被上拉电阻拉到高电平
6)GPIO内部框图输出分析
7)GPIO内部框图输入分析
8)配置使能GPIO的寄存器
根据上图中,数据手册的描述,我们可以得知用于硬件初始化的寄存器有:
GPIOx_MODER寄存器 用于选择GPIO的工作模式(输入、输出、复用、模拟)
GPIOx_OTYPER寄存器 用于选择GPIO的输出模式(推挽、开漏)
GPIOx_OSPEEDR寄存器 用于选择GPIO输出速率(低速、中速、高速、超高速)
GPIOx_PUPDR寄存器 用于选择GPIO是否外接上拉/下拉电阻
(1)GPIOx_MODER(工作模式)
(2)GPIOx_OTYPER(输出模式)
(3)GPIOx_OSPEEDR(输出速率)
(4)GPIOx_PUPDR(上拉/下拉电阻)
9)存储GPIO读写值的寄存器
根据上图中,数据手册的描述,我们可以得知可以存储读GPIO写值的寄存器有:
GPIOx_IDR寄存器 ———— 这是一个只读寄存器 ———— 用于存储被输入的(读取到的)数据
GPIOx_ORD寄存器 ———— 这是一个读写寄存器 ———— 用于存储要输出的数据