 и никак не получу результат. Отлаживаюсь в keil v 4.10. Проблема следующая: имеется STM32F103Rx и термодатчик LM76. Пытаюсь общаться по I2C. Отправляю адрес на I2C, осцилографом вижу его. Когда дело доходит до отправки команды процесс виснет, результаты безуспешны!! Вот кусочек где виснет:
  и никак не получу результат. Отлаживаюсь в keil v 4.10. Проблема следующая: имеется STM32F103Rx и термодатчик LM76. Пытаюсь общаться по I2C. Отправляю адрес на I2C, осцилографом вижу его. Когда дело доходит до отправки команды процесс виснет, результаты безуспешны!! Вот кусочек где виснет:- Код: Выделить всё • Развернуть
- while(!I2C_CheckEvent(LM76_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
Проверил адреса, вроде ничего не напутал. Заметил такую странную особенность отправляю адрес 7-битовый смотрю в отладке перефирий I2C вижу, что адрес записывается не в 7-битовую ячейку, а в 10. Пытался понять в каком месте она перекидывает ее в 10, ведь отправляю как 7.
Вот код:
- Код: Выделить всё • Развернуть
- /* LM76 - Temperature Sensore----------------------------------------------*/
 I2C_TypeDef* LM76_I2C;
 void LM76Init(I2C_TypeDef* LM76_I2Cx)
 {
 GPIO_InitTypeDef GPIO_InitStructure;
 I2C_InitTypeDef I2C_InitStructure;
 
 LM76_I2C = LM76_I2Cx;
 I2C_Cmd(LM76_I2C, DISABLE);
 I2C_DeInit(LM76_I2C);
 
 /* Configure I2C1 pins: SCL and SDA ----------------------------------------*/
 Set_System(); // HSE clock
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
 /* Configure I2C1 pins: SCL and SDA ----------------------------------------*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 /* I2C1 configuration ------------------------------------------------------*/
 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
 I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
 I2C_InitStructure.I2C_OwnAddress1 = 0x0;
 I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
 I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
 I2C_InitStructure.I2C_ClockSpeed = ClockSpeed;
 
 I2C_Init(LM76_I2C, &I2C_InitStructure);
 I2C_Cmd(LM76_I2C, ENABLE);
 }
 /*******************************************************************************
 * Function Name : main
 * Description : Main program
 * Input : None
 * Output : None
 * Return : None
 *******************************************************************************/
 int main(void) {
 LM76Init(I2C1);
 // Enable I2C1 and I2C2 PEC Transmission
 I2C_CalculatePEC(LM76_I2C, ENABLE);
 //----- Transmission Phase -----
 // Send I2C1 START condition
 I2C_GenerateSTART(LM76_I2C, ENABLE);
 // Test on I2C1 EV5 and clear it
 while(!I2C_CheckEvent(LM76_I2C, I2C_EVENT_MASTER_MODE_SELECT));
 // Send Slave address
 I2C_Send7bitAddress(LM76_I2C, WriteAddress, I2C_Direction_Transmitter);
 // Test on I2C1 EV6 and clear it
 while(!I2C_CheckEvent(LM76_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
 // Send Command
 I2C_SendData(LM76_I2C, Command);
 // Test on I2C1 EV8 and clear it
 while(!I2C_CheckEvent(LM76_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 I2C_SendData(LM76_I2C, Command);
 
 while(!I2C_CheckEvent(LM76_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 I2C_SendData(LM76_I2C, Command);
 // Enable Transfer PEC next for I2C1 and I2C2
 I2C_TransmitPEC(LM76_I2C, ENABLE);
 // Test on I2C1 EV8 and clear it
 while(!I2C_CheckEvent(LM76_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 // Send I2C1 STOP Condition
 I2C_GenerateSTOP(LM76_I2C, ENABLE);
 while (1);
 }
может, я что-то упустил?? Печатная плата исправна! Физически все верно. Пожалуйста подскажите, люди добрые!

