STM32 IIC没有ACK信息回送

2019-07-21 04:49发布

请教原子哥,STM32的ACK这个信号我一直收不到是为什么呢,我是硬件IIC1,读PCF8563芯片,但是没有办法收到那个ACK信号
void I2C_Mode_config(void)
{

I2C_InitTypeDef I2C_InitStructure;//?¨??I2C?á????

//?ò??I2C1?±??
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);


I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;//????I2C??I2C????

I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;//?????????ì???¤×÷?????????§

I2C_InitStructure.I2C_OwnAddress1 =0x0A;//???è???·

I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ;//????????

I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;//ATC24C02???·??7??

I2C_InitStructure.I2C_ClockSpeed = 400000;//×?????400KHz

I2C_Cmd(I2C1, ENABLE);//????I2C

I2C_Init(I2C1, &I2C_InitStructure);
}


unsigned char i2c_write_n_bytes(unsigned char SLA_W, unsigned int ADDR,unsigned int N, unsigned char *DAT)
{
unsigned int i;

I2C_GenerateSTART(I2C1, ENABLE);//?ú?ú??????
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //

I2C_Send7bitAddress(I2C1, SLA_W, I2C_Direction_Transmitter);//

I2C_EE_WaitEepromStandbyState();

while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

I2C_SendData(I2C1, (unsigned char)ADDR); //

while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//
for(i=0;i<N;i++)
{

I2C_SendData(I2C1, *(DAT+i));

while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//

}

I2C_GenerateSTOP(I2C1, ENABLE);//
return 1;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
八度空间
1楼-- · 2019-07-21 10:01
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-21 12:49
硬件IIC已经被我抛弃了,所以,楼主慢慢解决吧。
styleno1
3楼-- · 2019-07-21 14:16
回复【3楼】正点原子:
---------------------------------
F3/F4的没必要弃之不用吧。
styleno1
4楼-- · 2019-07-21 19:27
楼主如果有设备,请测出波形。数据流正常情况下,有可能是8563的问题。
正点原子
5楼-- · 2019-07-22 00:12
回复【4楼】styleno1:
---------------------------------
不打算折腾,来简单的,呵呵。
misszhongy
6楼-- · 2019-07-22 05:59
那请教原子哥,我用示波器看过波形了,一个脚是正弦32768,一个脚是直流600mV,我想问下这样算是晶振起振了么,他的那个晶振是不是只有起振的时候才能写数据进去呢,那个晶振是程序控制他起振还是说上电就起振的呢,这是我板子的原理图

一周热门 更多>