关于stm32 通信与gpio的问题,如何解决?

突然想到了个问题 既然通信的信息都是高低电平组成的,那我直接使用GPIO输入时一直读取管脚电平,发送的时候输出高低电平不就行了,还要那些usart之类的通信协议干啥(网上也确实搜到了 GPIO模拟多路I2C总线之类的教程验证了我的想法)

高低电平之间是有时序的要求的,不是随意的高低电平的!如果没有协议,干扰怎么去判断呢?到时候数据通讯都不能保证的!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: STM32的I2C通讯配置(硬件实现)——学习笔记(6-2)中的 2、挂在哪个I2C总线以及哪个GPIO 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    从电路图上可以看出:

    • 挂载在I2C1上的
    • SDA接的是PB7引脚
    • SCL接的是PB6引脚

    这个一般硬件工程师都会在电路图上标出来吧。

    另外如果只标出了使用的GPIO引脚,也可以通过 《STM32F4xx中文数据手册》 查找相关GPIO的复用得知所挂的I2C总线。
    在这里插入图片描述

  • 以下回答来自chatgpt:

    可以直接使用GPIO输入读取管脚电平并在发送时输出高低电平,这是可行的。但需要注意GPIO的输入电路必须满足高阻态输入,可以考虑加入弱上拉电阻或下拉电阻,或者加入施密特触发器来减少抖动和增强输入的抗干扰能力。

    关于模拟多路I2C总线的方法,可以参考已有的教程,并注意要挂载在正确的GPIO和I2C总线上。如果不确定所挂载的GPIO和I2C总线,可以查找相关GPIO的复用并结合电路图来确定。

    在使能GPIO和I2C总线时钟时,需要使用相应API函数使能对应总线的时钟。具体实现可以参考以下示例代码:

    // 使能GPIO和I2C总线时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);  // 初始化GPIOB端口时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);   // 初始化I2C1的外围时钟
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^