STM32 学习笔记 — 之 GPIO 端口篇 最近刚开始学习 STM32,所以从最基本的 GPIO 开始学起;首先看看 STM32 的 datasheet 上对GPIO 口的简单介绍:每个 GPI/O 端口有两个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个 32 位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个 32 位置位/复位寄存器(GPIOx_BSRR),一个 16 位复位寄存器(GPIOx_BRR)和一个 32 位锁定寄存器(GPIOx_LCKR)。 GPIO 端口的每个位可以由软件分别配置成多种模式。每个 I/O 端口位可以自由编程,然而 I/0 端口寄存器必须按 32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和 GPIOx_BRR 寄存器允许对任何GPIO 寄存器的读/更改的独立访问;这样,在读和更改访问之间产生 IRQ 时不会发生危险。 端口位配置 CNFx[1:0]=xxb,MODEx[1:0]=xxb再看 GPIO 功能很强大:1.通用 I/O(GPIO):最最基本的功能,可以驱动 LED、可以产生 PWM、可以驱动蜂鸣器等等;2.单独的位设置或位清除:方便软体作业,程序简单。端口配置好以后只需 GPIO_SetBits(GPIOx, GPIO_Pin_x)就可以实现对 GPIOx 的 pinx 位为高电平;3.外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;4.复用功能(AF):复用功能的端口兼有 IO 功能等。复位期间和刚复位后,复用功能未开启,I/O 端口被配置成浮空输入模式:(CNFx[1:0]=01b,MODEx[1:0]=00b)。5.软件重新映射 I/O 复用功能:为了使不同器件封装的外设 I/O 功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了;6.GPIO 锁定机制:主要针对复位设定的,当某端口位 lock 后,复位后将不改变的此端口的位配置。 GPIO 基本设置GPIOMode_TypeDef GPIO mode 定义及偏移地址GPIO_Mode_AIN = 0x0, //模拟输入 GPIO_Mode_IN_FLOATING = 0x04, //悬空输入 GPIO_Mode_IPD = 0x28, //下拉输入 GPIO_Mode_IPU = 0x48, //上拉输入 GPIO_Mode_Out_OD = 0x14, //开漏输出 GPIO_Mode_Out_PP = 0x10, //推挽输出 GPIO_Mode_AF_OD = 0x1C, //开漏复用 GPIO_Mode_AF_PP = 0x18 //推挽复用 GPIO 输入输出速度选择:typedef enum{ GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; #define IS_GPIO_SPEED(SPEED) ((SPEED =...