F物的自我救赎(笑) 2023-04-23 21:22 采纳率: 73.9%
浏览 7
已结题

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

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

  • 写回答

2条回答 默认 最新

  • 少林and叔叔 2023-04-23 21:56
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-25 00:52
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇博客: 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的外围时钟
      

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

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥60 PCDN如何使用宽带的电视业务通道拨号叠加带宽?
  • ¥15 遇到这种校园宽带网络应该怎么样解决?
  • ¥30 AXI VIP验证多余打印问题
  • ¥15 利用加权最小二乘法求某品牌手机价格指标,已按照总销量计算出权重,各类型号手机价格已知,如何求得价格指标?
  • ¥15 如何自制一个硬件钱包,有兴趣的朋友一起交流
  • ¥15 (关键词-聊天软件)
  • ¥15 求大家看看这个编程的编法没有思路啊
  • ¥20 WSL打开图形化程序子窗口无法点击
  • ¥15 Jupyter Notebook 数学公式不渲染
  • ¥20 ERR_CACHE_MISS 确认重新提交表单