STM32G431CBU6如何设置IO口的方向?
我在使用STM32G431CBU6时,需要使用两个IO口模拟I2C通信,需要像F103系列一样如下设置io口方向:#define MPU_SDA_IN(){GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=8<<12;}
#define MPU_SDA_OUT() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=3<<12;}
但是出现报错CRL,我顺势查找了stm32g4xx.h文件,与stm32f1xx.h文件对比,发现g确实没有CRL,CRH的寄存器字段,所以不知该如何像F103一样配置IO口方向?
还请各位大佬指教。
楼主,您好请查阅手册,GPIO寄存器使用GPIOx_BSRR写入1或者0进行输出设置。
另外也可以参考HAL库中对于IO操作的函数:
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
assert_param(IS_GPIO_PIN_ACTION(PinState));
if (PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
else
{
GPIOx->BRR = (uint32_t)GPIO_Pin;
}
}
从手册上看,可以改变寄存器的某些位,如附图所示。 没有直接对应的函数或定义,自己对寄存器操作也行。
butterflyspring 发表于 2021-9-7 11:44
从手册上看,可以改变寄存器的某些位,如附图所示。 没有直接对应的函数或定义,自己对寄存器操作也行。
...
补上附图
如果不是特别喜好寄存器操作,建议使用Cubemx进行配置。这里涉及到2个寄存器,它们是GPIOx_MODER和GPIOx_OTYPER。至于是否使用内部上下拉电阻,还涉及到GPIOx_PUPDR寄存器,你稍微看看相关内容。 飞羽一条 发表于 2021-9-7 10:45
楼主,您好请查阅手册,GPIO寄存器使用GPIOx_BSRR写入1或者0进行输出设置。
好的 谢谢指教
![图片.png](data/attachment/forum/202111/18/145732di9oihweo5n1if1a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
![图片.png](data/attachment/forum/202111/18/145859jaafabza9ajl9oqb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")![图片.png](data/attachment/forum/202111/18/145943x6naq0rf4fu4n60r.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
仅供参考
页:
[1]