一篇笔记带你了解STM32GPIO

目录

一、GPIO结构与模式介绍

1.肖特基触发器(施密特触发器)

2.GPIO八种工作模式

a.四种输入(输入驱动器)

b.四种输出(输出驱动器)

二、GPIO寄存器(F1系列每个GPIOx有七个寄存器)

1. 端口配置低寄存器(GPIOX_CRL)

2. 端口配置高寄存器(GPIOX_CRL)

3. 端口输入数据寄存器(GPIOX_IDR(input data register))

4. 端口输出数据寄存器(GPIOX_ODR(output data register))

5. 端口位设置/清除寄存器(GPIOX_BSRR(bit set reset register))

三、通用外设驱动模型(四步法)GPIO配置步骤

1.通用外设驱动模型

 a.初始化

 b.读函数(可选)

 c.写函数(可选)

 d.中断服务函数(可选)

2.GPIO配置步骤(4个函数)

 a. 使能时钟  

 b.设置工作模式

c. 设置输出状态(可选)

d.读取输入状态(可选)


***************************************GPIO*************************************


一、GPIO结构与模式介绍

1.肖特基触发器(施密特触发器)


   肖特基管
   P-MOS N-MOS

2.GPIO八种工作模式


(参见GPIO工作原理图)

a.四种输入(输入驱动器)


输入浮空 上下拉电阻关闭,肖特基触发器打开,空闲时状态不确定(高阻态),由外部环境确定 
输入上拉 上拉电阻打开,下拉电阻关闭,肖特基触发器打开,    IO无输入时,高电平
输入下拉 上拉电阻关闭,下拉电阻打开,肖特基触发器打开,    IO无输入时,低电平
模拟功能  上下拉电阻关闭,肖特基触发器关闭,输入到片上外设(ADC DAC)

b.四种输出(输出驱动器)


(输入驱动器的上下拉电阻关闭,肖特基触发器打开,故输出模式时可以读IO的状态)
开漏输出 CPU输出,P-MOS管始终不导通,不能输出高电平(除非有外部或内部(F4、F7、H7)上拉),软件IIC的SDL、SCL
推挽输出    驱动能力强(Vdd),25mA,通用输出(可输出高低电平)
开漏式复用功能 片上外设输出,P-MOS始终不导通,不能输出高电平(除非有外部或内部(F4、F7、H7)上拉)
推挽式复用功能  片上外设输出,驱动能力强(Vdd),25mA,通用输出(可输出高低电平)
++++++++++++++++++++++++++++++++++++++++++++++++++++++


二、GPIO寄存器(F1系列每个GPIOx有七个寄存器)


---------------------------------------------------------------------------------------------
    (F1系列)GPIO通用寄存器GPIOx_yyy
---------------------------------------------------------------------------------------------
CRL    CRH   |      IDR      |      ODR     |    BSRR       |         BRR      |   LCKR
---------------------------------------------------------------------------------------------
配置工作模式      | 输入数据   | 输出数据  |   设置ODR  |          |   CRL、CRH            
输出速度                 寄存器的值              配置锁定
---------------------------------------------------------------------------------------------

1. 端口配置低寄存器(GPIOX_CRL)

(配置PX0-7引脚)共32位
   [3:2]、[7:6]~[31:30] :  CNFy[1:0]
   [1:0]、[5:4]~[29:28] : MODEy[1:0]
   4个位控制一个IO口 (CNFy[1:0] MODEy[1:0])--->控制PXy
例 对于GPIOA_CRL(CNF2[1:0] MODE2[1:0])--->控制PA2引脚的工作模式与速度
 上下拉输入模式时,由ODR寄存器来确定上下拉 若PxODR为0 则下拉输入,为1则上拉输入

2. 端口配置高寄存器(GPIOX_CRL)

(配置PX8-15引脚)共32位
   [3:2]、[7:6]~[31:30] :  CNFy[1:0]
   [1:0]、[5:4]~[29:28] : MODEy[1:0]

3. 端口输入数据寄存器(GPIOX_IDR(input data register))

共32位
[0:15] 只读 只能以字(16位)读出,值为IO口状态
[16:31] 保留 

4. 端口输出数据寄存器(GPIOX_ODR(output data register))

共32位
ODRy [0:15] 即对 PXy设置
[0:15] 可读可写 只能以字(16位)操作
[16:31] 保留 

5. 端口位设置/清除寄存器(GPIOX_BSRR(bit set reset register))

共32位
[31:16] BRy 清除端口x的位y 写“1”有效  例:对端口A的BR10写“1”,则对应ODR10=0
[15:  0] BSy 设置端口x的位y 写“1”有效  例:对端口A的BR10写“1”,则对应ODR10=1

ODR和BSRR寄存器控制输出的区别:
使用ODR在读和修改访问之间产生中断时,可能会发生风险;BSRR无风险
BSRR VS ODR
ODR修改:读->改->写    GPIOB->ODR |=1<<3;/* PB3=1 */
BSRR修改:写                  GPIOB->BSRR=0x 0000 0000 0000 1000;/* PB3=1 */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


三、通用外设驱动模型(四步法)GPIO配置步骤


1.通用外设驱动模型


 a.初始化


    时钟设置(选择时钟源(对于有默认时钟源的外设,忽略此步),开启时钟)、
    参数(工作模式)设置、 
            (可选)IO设置(复用) 中断设置(开中断、设置NVIC)


 b.读函数(可选)


    从外设读取数据


 c.写函数(可选)


    向外设写入数据


 d.中断服务函数(可选)


    根据中断标志,处理外设各种中断事务

2.GPIO配置步骤(4个函数)


 a. 使能时钟  


    __HAL_RCC_GPIOx_CLK_ENABLE();(GPIO有默认时钟源,固定挂载在APB2总线上)
    功能:开启GPIO时钟
    寄存器:(F1)RCC_APB2ENR


 b.设置工作模式


    HAL_GPIO_Init();
    功能:初始化GPIO
    寄存器:CRL CRH  ODR 


c. 设置输出状态(可选)


    HAL_GPIO_WritePin();
    功能:控制IO输出高低电平
    HAL_GPIO_TogglePin();
    功能:每次调用IO输出电平翻转
    寄存器:BSRR


d.读取输入状态(可选)


    HAL_GPIO_ReadPin();
    功能:读取IO状态
    寄存器:IDR
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
总结
1.什么是GPIO?
  General Purpose Input Output 通用输入输出 
2.STM32 GPIO简介
3.IO端口基本介绍
4.GPIO八种模式
5.GPIO寄存器介绍
6.通用外设驱动模型
7.GPIO配置关键步骤
8.点亮一个LED
9.通过一个按键控制一个LED灯亮灭

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值