Здравствуйте. Подскажите, ребята, кто может.
Что-то никак не получается запустить I2C на
STM32F103RC.
Никакой реакции на выводах. Только короткий импульс на SCL.
Где-то ошибка, но увидеть не могу.
Да, ещё BUSY в SR2 всё время в единице.
часть программы:
GPIOB-›CRL&=0x00000000;
GPIOB-›CRL|=0xff000000; //PB6,PB7-альтернативны функция SCL,SDA, открытый сток
RCC-›APB1ENR|=RCC_APB1ENR_I2C1EN;
I2C1-›CR2|=I2C_CR2_FREQ_1; //тактовая частота 2 мГц
I2C1-›CCR|=0x0a; //5000 нс
I2C1-›TRISE=0x03; //1000 нс
//************************************************** ********************************
while(1)
{
T_msec=10;
while(T_msec!=0) //пауза 10 мс
{}
I2C1-›CR1|=I2C_CR1_PE;
I2C1-›SR1=0;
I2C1-›CR1|=I2C_CR1_START; //старт
while((I2C1-›SR1&I2C_SR1_SB)==0) //ожидание установки бита SB
{}
I2C1-›SR1; //очистка бита SB
I2C1-›DR=0xa0; //адрес ведомого
24C04
while((I2C1-›SR1&I2C_SR1_ADDR)==0)
{}
I2C1-›SR1;
I2C1-›SR2; //сброс бита ADDR
I2C1-›DR=0x01; //адрес ячейки памяти
while((I2C1-›SR1&I2C_SR1_BTF)==0)
{}
I2C1-›CR1|=I2C_CR1_START; //повторный старт
while((I2C1-›SR1&I2C_SR1_SB)==0) //ожидание установки бита SB
{}
I2C1-›SR1; //очистка бита SR1
I2C1-›DR=0xa1; //адрес ведомого, 1 в младшем бите-чтение
while((I2C1-›SR1&I2C_SR1_ADDR)==0)
{}
I2C1-›SR1;
I2C1-›SR2;
while((I2C1-›SR1&I2C_SR1_RXNE)==0)
{}
data_eeprom=I2C1-›DR;
}
}