配置完成后STP位置1,但在总线运行一段时间后,STP位会置0,后续再次置1,直到停止位发送完毕,再次置0
I2caRegs.I2CSTR.bit.SCD = 1;
I2caRegs.I2CCNT = data_num + 2;
I2caRegs.I2CSAR = slave_addr;
I2caRegs.I2CDXR = (Uint16)((addr >> 8) & 0xff); // 高8位地址
I2caRegs.I2CMDR.all = 0x6E20; // FREE,STT,STP,MST,TRX,IRS
I2caRegs.I2CDXR = (Uint16)(addr & 0xff); // 低8位地址
for (i = 0; i < data_num; i++)
{
I2caRegs.I2CDXR = (Uint16)(send_data[i]); // 数据
}
time_cnt = SysTickUsGet();
while (I2caRegs.I2CMDR.bit.STP == 1);
return I2C_SUCCESS;
源代码如上,STP提前置0会导致程序提前退出。
另外STP和SCD信号的跳转时序是什么样的,STP信号会比SCD信号延时几个us再跳转吗,像下面这张图所示: