突然想到了个问题 既然通信的信息都是高低电平组成的,那我直接使用GPIO输入时一直读取管脚电平,发送的时候输出高低电平不就行了,还要那些usart之类的通信协议干啥(网上也确实搜到了 GPIO模拟多路I2C总线之类的教程验证了我的想法)
高低电平之间是有时序的要求的,不是随意的高低电平的!如果没有协议,干扰怎么去判断呢?到时候数据通讯都不能保证的!
不知道你这个问题是否已经解决, 如果还没有解决的话:从电路图上可以看出:
这个一般硬件工程师都会在电路图上标出来吧。
另外如果只标出了使用的GPIO引脚,也可以通过 《STM32F4xx中文数据手册》 查找相关GPIO的复用得知所挂的I2C总线。
可以直接使用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的外围时钟