STM32 I/O口配置和寄存器

第一:STM32 I/O 口的配置

1-.1:I/O可以配置成8中不同的模式,输入四种:模拟输入,输入上拉,输入下拉,输入浮空; 输出四种:推挽输出,开漏输出,推挽式复用输出,开漏复用输出。
具体的配置如下表
在这里插入图片描述
新手看这个图 还是很懵的,CNF1/CNF0; MODE1/MODE0;PxODR寄存器这些是什么?答案是:控制I/O的寄存器。

第二:STM32 I/O口寄存器

STM32 每个I/O 都由7个寄存器控制:2个 32位的端口配置寄存器(CRL和CRH);2个32的数据存储(IDR和ODR);一个32的置位/复位寄存器(BSRR);1个16位的复位寄存器(BRR);一个32位的锁存寄存器(LCKR)。

2-1:端口配置寄存器(CRL):CRL寄存器控制的是低8位,CRH寄存器控制的是高8位;
在这里插入图片描述如果需要设置 PIN 5脚为通用推挽输出模式 速率 50MHz,那么对应的位为:00 00 00 00 00 11 00 00 00 00 00 00 可以看出PIN5 是低位 由CRL寄存器控制,只需要设置PIN 5 对应的CNF5 和 MODE5的数据 即可设置PIN 5

如何使用固件库控制寄存器——》通过GPIO的初始化函数完成
void GPIO_Init(GPIO_TypeDef * GPIOx,GPIO_InitTypeDef * GPIO_InitStruct);
GPIO_TypeDef * GPIOx:是用来指定GPIO,取值的范围是GPIOA~GPIOG;
GPIO_InitTypeDef * GPIO_InitStruct:是用来初始化参数结构体指针,结构体类型为GPIO_InitTypeDef

GPIO初始化实例

GPIO_InitTypeDef   GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED0 --> PB.5推挽输出
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速率
	GPIO_Init(GPIOB,&GPIO_InitStructure); //LED1-->PE.5推挽输出
	

代码的意思是设置GPIOB的第五个脚为推挽输出,速率为50MHz。
GPIO_Pin 用来设置要初始化的I/O口
GPIO_Mode 用来设置对应I/O端口的输出输入模式
GPIO_Speed 用来设置I/O 速率

2-2.数据存储寄存器(IDR/ODR):IDR控制低16位 只能读取,ODR控制高16位,可读/写,反应当前I/O 的输出状态
在这里插入图片描述
固件库操作IDR 读取I/O 数据的函数是: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)
假设要读取GBIOB.5的电平状态程序为: GPIO_ReadInputDataBit( GPIOB,GPIO_Pin_5)返回值为1或者0
2-2.1 ODR:端口输出数据寄存器,一般用来一次性往一组GPIO下的多个I/O设值
在这里插入图片描述
2-3.置位/复位寄存器(BSRR):设置GPIO端口输出位是1还是0

在这里插入图片描述
举例说明:如果需要设置GPIOB的第一个端口值为1,只需要往寄存器BSRR的低16位对应位写 1
GPIOB - > BSRR = 1<<1;
如果要设置GPIOB的第一个端口的值为0,只需要往寄存器BSRR的高16位对应位写1,
GPIOB - > BSRR = 1 <<(16+1)

注意:这个寄存器往对应位写0 是没有影响的,所以要设置某些位时,不用管其他位的值。

2-4、端口位清除寄存器(BRR)
在这里插入图片描述
在这里插入图片描述
作用跟BSRR的高16位类似,在固件库中,通过BSRR和BRR寄存器设置GPIO端口输出主要是两个函数:GPIO_SetBits()和GPIO_ResetBits()来完成。
void GPIO_SetBits(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)
void GPIO_ResetBits(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)
举个栗子:设置GPIOB.5 输出1:
GPIO_Setbits(GPIOB,GPIO_Pin_5)
设置GPIOB.5 输出0:
GPIO_ResetBits(GPIOB,GPIO_Pin_5)

2-5.端口配置锁定寄存器(LCKR);
在这里插入图片描述
暂未了解 后期补上

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值