此篇顺序记录为听课
参考文章:【stm32】史上最详细的8种IO口模式_等不到星光等时光呀的博客-CSDN博客_io口模式
目录
一、GPIO
我现在这块板有144个引脚
(有7组IO口:GPIOA-GPIOG,每个IO口有16个IO:例PA0-PA15,共有112个IO)
(STM32的每一个IO口都可以实现外部中断输入)
(每组GPIO有7个寄存器:两个32位配置寄存器——GPIOx_CRL、GPIOx_CRH
两个32位数据寄存器——GPIOx_IDR、GPIOx_ODR
一个32位置位\复位寄存器——GPIOx_BSRR
一个16位复位寄存器——GPIOx_BRR
一个32位锁定寄存器——GPIOx_LCKR)
(看stm32中文参考手册的GPIO的寄存器配置)
GPIOx_CRL(端口配置低寄存器)+GPIOx_CRH(端口配置高寄存器)
每一个IO口控制16个IO,每4位控制一个IO,所以这两个寄存器都为32位,总共控制16个IO(CRL控制0-7,CRH控制8-15)
关于每四位控制一个IO,两位控制选择输入or输出以及速度,两位控制输入\出的方式
GPIOx_IDR(端口输入数据寄存器)
这个寄存器为32位寄存器,他的低16位,每一位控制一个IO口,对应的是输入的是高电平还是低电平
GPIOx_ODR(端口输出数据寄存器)
与IDR相反,他的低16位,每一位控制输出的是高电平还是低电平
这个寄存器在输入模式下,可以决定输入是上拉还是下拉
GPIOx_BSRR(端口位设置\清除寄存器)
BSRR主要是控制ODR对应位的输出,BSRR的低16位为设置寄存器,为1对应位输出高电平,为0对ODR该位不产生影响;高16位为清除寄存器,为1对应的ODR为输出为低电平,为0不产生影响
【为什么ODR自己可以控制输出IO的高低电平,还需要BSRR呢?