一、简介 任何一块开发板,最基础的程序入门就是点灯程序,这里着重给大家介绍 MM32F0140 开发的入门:GPIO 的各个寄存器的配置。 MM32F0140 GPIO 系统框图如下: 二、MM32F0140 GPIO 介绍 MM32F0140 GPIO 寄存器总览,如下图所示,其中每个寄存器的作用会详细说明。 每个通用 I/O 端口都可以通过两个 32 位的控制寄存器(GPIOx_CRL/ GPIOx_CRH)和两个 32 位的复用控制寄存器(GPIOx_AFRL, GPIOx_AFRH)配置为 8 种模式:模拟输入,浮空输入,上拉输入, 下拉输入, GPIO 推挽输出, GPIO 开漏输出,复用推挽输出和复用开漏输出。 其中,GPIOx_CRL & GPIOx_CRH 的含义如下: L 表示的是每一组 GPIO 的低 16 位,即 0-15 Pin H 表示的是每一组 GPIO 的高 16 位,即 16-31 Pin GPIOx_CRL & GPIOx_CRH 寄存器的具体每一位如下图所示: 其中 MODE0 表示的是每一组 GPIO 的 Pin 0 引脚,其他的以此类推。 以某组 GPIO Pin 0 引脚为例: CNF0 & MODE0 : 4 bit不同值表示如下: 端口输入数据寄存器总共 32 bit,高 16 bit 保留,低 16 bit 代表每一组 GPIO 不同 Pin 引脚的数据输入电平,该寄存器的状态为只读,具体如下所示。通过该寄存器的每一位读取的数据,就可以知道那一组的 GPIO 的第几引脚的电平信号。 端口输出数据寄存器总共 32 bit,高 16 bit 保留,低 16 bit 代表每一组 GPIO 不同 Pin 引脚的数据输入电平,不同于输入数据寄存器,该寄存器的状态为读写,具体如下所示。 通过上述的介绍,可以知道读取的每一位的数据为某组 GPIO 的对应的引脚输出电平信号,写该寄存器的位时,并不是直接对该位进行写操作,而是通过以下介绍到的 GPIOx_BSRR 端口设置/清除寄存器(以下会详细介绍),实现对 GPIOx_ODR端口输出数据寄存器的每一位进行置 1 或者清除的操作。
4. 端口设置/清除寄存器 (GPIOx_BSRR)(x = A..D) 端口设置/清除寄存器总共 32 bit,分为高 16 bit ,低 16 bit,其中代表的配置如下: (1)高 16 bit BRy(16~31 bit)的每一位的数据的配置表示如下: 其中高 16 bit的每一位对应的是每一组 GPIO 相应的 Pin 引脚。 0:相应的 ODRY 位没有改变 (2)低 16 bit BSy(0~15 bit)的每一位的数据的配置表示如下: 其中低 16 bit的每一位对应的是每一组 GPIO 相应的 Pin 引脚。 0:相应的 ODRY 位没有改变 端口位清除寄存器总共 32 bit,分为高 16 bit 是保留状态,低 16 bit,该寄存器的转台为只写状态,其中每一位代表的配置如下: 可以通过该寄存器直接清除对应每一组 GPIO 的第几位的输出电平,对该寄存器的对应位写 1 可以直接清除输出的高电平状态为低电平。 当此寄存器的 bit16 被 Lock key 写入序列配置后, bit[0:15]便可用于 GPIO 端口的锁定,当端口被锁定后,只能在系统复位之后才能再次更改端口位的配置,且在规定的写入操作期间,不允许改变 bit[0:15],一个锁定位锁定端口配置寄存器中的 4 个位。 一般有特殊应用的要求才会用到这个寄存器。 端口复用功能高位寄存器的具体配置位说明如下图,该寄存器主要是配置 IO 口的复用功能,其中改寄存器分为高位和低位,每一个 32 位的寄存器当中,每 4 位作为一组控制引脚的复用功能选择,所以每一个 IO 口有 8 个复用工能可以选择,因此刚好对应每一组 GPIO 的 16 个 Pin 引脚。 端口的复用功能,主要是用来复用 IO 口作为其他外设使用,例如复用该 IO 口作为 SPI 通信接口或者 I2C 通信接口等,其中只能使用它的一个复用功能。后续博文介绍其他外设会有所介绍。 |