请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G431CBU6如何设置IO口的方向?

[复制链接]
shymeet 提问时间:2021-9-6 16:16 /
我在使用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口方向?
还请各位大佬指教。

收藏 评论6 发布时间:2021-9-6 16:16

举报

6个回答
废鱼 最优答案 回答时间:2021-9-7 10:45:35
楼主,您好请查阅手册,GPIO寄存器使用GPIOx_BSRR写入1或者0进行输出设置。

1.png
另外也可以参考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:28
从手册上看,可以改变寄存器的某些位,如附图所示。 没有直接对应的函数或定义,自己对寄存器操作也行。
butterflyspring 回答时间:2021-9-7 11:45:16
butterflyspring 发表于 2021-9-7 11:44
从手册上看,可以改变寄存器的某些位,如附图所示。 没有直接对应的函数或定义,自己对寄存器操作也行。
...

补上附图
STM32G4模拟I2CIO.PNG
xmshao 回答时间:2021-9-7 15:15:28
如果不是特别喜好寄存器操作,建议使用Cubemx进行配置。这里涉及到2个寄存器,它们是GPIOx_MODER和GPIOx_OTYPER。至于是否使用内部上下拉电阻,还涉及到GPIOx_PUPDR寄存器,你稍微看看相关内容。
shymeet 回答时间:2021-9-8 09:31:25
飞羽一条 发表于 2021-9-7 10:45
楼主,您好请查阅手册,GPIO寄存器使用GPIOx_BSRR写入1或者0进行输出设置。

好的 谢谢指教
至暗时刻 回答时间:2021-11-18 15:00:00

图片.png

图片.png图片.png

仅供参考

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版