你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
查看全部评分
stm1024 发表于 2018-3-28 18:07 你的STM32在作为主机发送数据到IIC总线上时,配置为输出模式,这个OK,但是需要从PCF8563中得到应答,相当 ...
wenyangzeng 发表于 2018-3-26 17:30 楼主在发送函数 I2C_Send_Byte()中的变量txd一会儿右移: (txd&0x80>>7) 一会儿左移:
你的STM32在作为主机发送数据到IIC总线上时,配置为输出模式,这个OK,但是需要从PCF8563中得到应答,相当于是要从总线上读取数据,这个时候GPIO应该配置为输入模式,但似乎并没有看到类似的语句或代码,SDA_IN吗?也不太清楚具体代码如何,所以不好判断。
评分
查看全部评分
没有收到应答原因:是晶振有问题,给的时钟不对
是的,有方向改变的语句
for(t=0;t<8;t++)
{
IIC_SDA=(txd&0x80)>>7;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
(txd&0x80)>>7是为了取txd的最高位, txd<<=1; 是将下一位数据移位到最高位,就可以(txd&0x80)>>7取走最高位
设置方向的确是SDA_IN
#define SDA_IN() {GPIOB->MODER&=~(3<<(7*2));GPIOB->MODER|=0<<7*2;}
#define SDA_OUT() {GPIOB->MODER&=~(3<<(7*2));GPIOB->MODER|=1<<7*2;}