STM32输出寄存器注意事项

本文详细介绍了GPIO输出寄存器BSRR与ODR的区别。通过对比两种寄存器的操作方式,阐述了它们在控制GPIO电平方面的不同之处。使用BSRR可以直接设置或清除指定引脚的状态,而使用ODR则需要先读取整个端口状态再进行修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.GPIO输出寄存器 BSRR与ODR区别
	名称:
	BSSR:位设置/清除寄存器
	ODR:输出数据寄存器
       操作BSRR与ODR寄存器操作都能实现对引脚的电平操作,但使用ODR直接对外设寄存器操作的话,
    得获取其他GPIO的状态,然后对获取的数据值进行"或"运算操作。而使用BSSR进行操作的话,
    不用读取该端口其它引脚的状态 。
    

在这里插入图片描述

在这里插入图片描述

### STM32寄存器配置教程 在STM32微控制器中,通过直接操作寄存器来控制硬件是一种高效的方式。以下是关于如何配置STM32寄存器的具体说明以及示例代码。 #### 配置GPIO端口为高电平的步骤解析 为了使GPIOB端口的16个引脚输出高电平,需要完成以下几个方面的配置: 1. **启用外设时钟** 使用`RCC_APB2ENR`寄存器来开启GPIOB外设的时钟。这一步非常重要,因为只有在外设时钟被激活的情况下,才能正常访问该外设的相关寄存器[^2]。 2. **初始化GPIO模式** 将GPIOB端口的所有引脚配置为通用推挽输出模式。可以通过设置`GPIOx_CRL``GPIOx_CRH`寄存器中的相应位来实现这一目标[^1]。 3. **设置输出状态** 利用`GPIOx_BSRR`寄存器将指定引脚的状态设置为高电平。此寄存器允许分别对高低字节进行独立写入,从而简化了批量设置的操作过程。 #### 示例代码展示 下面提供了一段完整的C语言程序用于演示上述逻辑的实际应用情况: ```c #include "stm32f10x.h" void GPIO_Configuration(void){ // Enable clock for GPIOB peripheral RCC->APB2ENR |= (1 << 3); /* Bit 3 corresponds to IOPBEN bit in APB2ENR register */ // Configure all pins of Port B as output push-pull mode at max speed 50MHz. // For lower bits(Pin_0 ~ Pin_7), configure using CRL Register GPIOB->CRL &= ~(0xFFFFFFFF); GPIOB->CRL |= (0xBAAAAAAAA); // Similarly, do it for higher bits(Pin_8 ~ Pin_15) via CRH Register GPIOB->CRH &= ~(0xFFFFFFFF); GPIOB->CRH |= (0xBAAAAAAAA); // Set all the outputs high by writing into BSRR register directly without affecting other registers' states. GPIOB->BSRR = 0xFFFF; // Writing '1's sets corresponding pin(s). } int main(){ GPIO_Configuration(); while(1){} // Infinite loop after configuration is done. } ``` 以上代码片段展示了如何利用裸机方式去操控STM32芯片上的GPIO资源,并实现了让整个Port B都处于高电平的功能需求。 #### 注意事项 - 在实际开发过程中,建议先查阅官方数据手册确认各个寄存器的确切定义及其作用范围。 - 如果项目规模较大或者追求更高的可移植性易维护性,则推荐采用HAL库或LL API等方式来进行驱动层设计而不是完全依赖于底层寄存器级编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值