GPIOx_CRL/CRH(配置寄存器低/高):配置引脚的模式和功能。 GPIOx_IDR(输入数据寄存器):读取引脚的输入状态。 GPIOx_ODR(输出数据寄存器):设置引脚的输出状态。 GPIOx_BSRR(位设置/复位寄存器):原子性地设置和复位引脚。 GPIOx_BRR(位复位寄存器):复位引脚。 GPIOx_LCKR(配置锁定寄存器):锁定引脚的配置。 3. ...
例如本寄存器中有两种寄存器位,分别为 BRy及 BSy,其中的 y数值可以是 0-15,这里的 0-15表示端口的引脚号,如 BR0、BS0 用于控制 GPIOx的第 0 个引脚,若 x 表示 GPIOA,那就是控制 GPIOA的第 0 引脚,而 BR1、BS1就是控制 GPIOA 第 1个引脚。 其中 BRy 引脚的说明是“0:不会对相应的 ODRx 位执...
端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 也用于控制GPIO口的输出状态,每个GPIO口占用两个比特位,第一个比特位为0时代表置位(设置为1),为1时代表复位(设置为0),第二个比特位用于选择GPIO口,当该比特位被置为1时,对应的GPIO口输出电平被控制。 位31:16BRy: 清除端口x的位y (y =0…15) (Port...
STM32f103zet6 的portB的起始地址 GPIOC_CRL和GPIOC_CRH 偏移量 GPIOC_CRL 0x00, 寄存器地址为0x4001 1000 GPIOC_ODR 0X0C 寄存器地址为0x4001 100C ARM是内存与IO统一编址的,所以ARM中的所有外设都是通过寄存器来操作的 每个寄存器都有地址,C语言通过位操作和指针来进行操作。 常见面试题:用c语言向内存地...
GPIOx_ODRxa0输出数据寄存器 一个32位置位/复位寄存器 GPIOx_BSRR 一个16位复位寄存器 GPIOx_BRR 一个32位锁定寄存器 GPIOx_LCKR 六,STM32-IO口相关寄存器讲解 1,端口配置寄存器: STM32每组GPIO位16个IO口,每4位控制一个IO口,所以32位控制8个IO口 分为低16位:GPIOx_CRL和高16位:GPIOx_CRH共32位控制...
本寄存器可以通过写入GPIOx_BSRR寄存器值,可以对GPIOx_ODR的对应位进行置位和复位。 既然GPIOx_ODR 能控制管脚高低电平,为什么还需要GPIOx_BSRR寄存器? 原因是GPIOx_BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。 也就不需要关闭中断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状...
三、寄存器映射操作步骤 1. 找到外设基地址 2. 找到 GPIOC 的地址 3. GPIO的寄存器 4. 设置GPIO口工作模式 5. 开启时钟 6. 寄存器映射示例 本文通过介绍GPIO寄存器,介绍寄存器编程方法,实现与前一章库函数编程类似的控制功能。 本系列源码地址: https://gitee.com/xundh/stm32_arm_learn ...
(2)两个32位数据寄存器 GPIOx_IDR:输入数据寄存器,读取端口引脚的电平状态。GPIOx_ODR:输出数据寄存器,设置端口引脚的电平状态。(3)一个32位置位/复位寄存器:GPIOx_BSRR 用于设置或复位端口引脚的电平。(4)一个16位复位寄存器:GPIOx_BRR 用于复位端口引脚的电平。(5)一个32位锁定寄存器:GPIOx_LCKR...
ODR寄存器只用低16位,就能控制引脚的高、低电平,还能读寄存器的值,用以判断引脚电平状态; 那么, 为什么要存在一个BSRR! 还分高、低16位! 还不能读寄存器的值! 写了几年的STM32代码, 一直在使用ODR, 几乎没用过BSRR. 直到今天查找F1和F4的GPIO操作区别时, 才发现BSRR的神奇之处。