Вот проблемный кусок кода:
CODE
void Accel::init()
{
RCC->APB1ENR |= (RCC_APB1Periph_I2C1);//Вкл. тактирование И2Ц
I2C1->CR2 |= 36;//36 MHz входит в модуль I2C
// I2C использует две ноги микроконтроллера, их тоже нужно настроить
GPIOB->CRL &=~(GPIO_CRL_MODE6|GPIO_CRL_MODE7|GPIO_CRL_CNF6|GPIO_CRL_CNF7);
GPIOB->CRL |= (GPIO_CRL_MODE6|GPIO_CRL_MODE7|GPIO_CRL_CNF6|GPIO_CRL_CNF7);
GPIOB->BSRR=GPIO_BSRR_BS6|GPIO_BSRR_BS7;
I2C1->CR1 &= ~0x000F;// I2C mode, Peripheral disable
I2C1->CR1 &= ~0x0400;//No acknowledge returned
I2C1->CR2 |= 36;//36 MHz входит в модуль I2C
I2C1->CCR &= ~0xFFFF;
I2C1->CCR |= 180;// Получаем 100kHz из 36MHz
I2C1->CCR &= ~0xC000; //Standart Master Mode, Fast mode 2/1
I2C1->TRISE = 37;//Maximum rise time 1000;
I2C1->OAR1 &= ~(0x00fe);
I2C1->OAR1 &= ~(0x8000);//7-bit slave address
I2C1->OAR1 |= 0x4000; // Must be configured and kept at 1.
I2C1->OAR1 |= (0x15<<1);//Адрес выставим 0х15 на всякий
I2C1->CR1 |= 0x0001;//Peripheral enable
outBuf.point=0;
TH_INIT();
}
{
RCC->APB1ENR |= (RCC_APB1Periph_I2C1);//Вкл. тактирование И2Ц
I2C1->CR2 |= 36;//36 MHz входит в модуль I2C
// I2C использует две ноги микроконтроллера, их тоже нужно настроить
GPIOB->CRL &=~(GPIO_CRL_MODE6|GPIO_CRL_MODE7|GPIO_CRL_CNF6|GPIO_CRL_CNF7);
GPIOB->CRL |= (GPIO_CRL_MODE6|GPIO_CRL_MODE7|GPIO_CRL_CNF6|GPIO_CRL_CNF7);
GPIOB->BSRR=GPIO_BSRR_BS6|GPIO_BSRR_BS7;
I2C1->CR1 &= ~0x000F;// I2C mode, Peripheral disable
I2C1->CR1 &= ~0x0400;//No acknowledge returned
I2C1->CR2 |= 36;//36 MHz входит в модуль I2C
I2C1->CCR &= ~0xFFFF;
I2C1->CCR |= 180;// Получаем 100kHz из 36MHz
I2C1->CCR &= ~0xC000; //Standart Master Mode, Fast mode 2/1
I2C1->TRISE = 37;//Maximum rise time 1000;
I2C1->OAR1 &= ~(0x00fe);
I2C1->OAR1 &= ~(0x8000);//7-bit slave address
I2C1->OAR1 |= 0x4000; // Must be configured and kept at 1.
I2C1->OAR1 |= (0x15<<1);//Адрес выставим 0х15 на всякий
I2C1->CR1 |= 0x0001;//Peripheral enable
outBuf.point=0;
TH_INIT();
}
После строчки
GPIOB->CRL &=~(GPIO_CRL_MODE6|GPIO_CRL_MODE7|GPIO_CRL_CNF6|GPIO_CRL_CNF7);
I2C выставляет в регистре статуса состояние шины Busy и больше не меняет его.
Если закомментировать эту строчку всё начинает работать нормально.
Никто не сталкивался с подобной проблемой? Очень странно, что МК из предыдущих партий работали отлично и без комментирования этой строчки.