STM32F302 Nucleo - I2 C без часов - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь использовать интерфейс I2 C Nucleo-Board STM32F3 для связи с EEPROM.

К сожалению, у меня нет тактового сигнала. Я попытался получить тактовый сигнал, задав биты в регистрах, а также используя CubeMX. Оба раза у меня был один и тот же результат: нет тактового сигнала.

Спасибо за вашу помощь!

Вот мой код ...

void I2C_Init(void){

RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;

GPIOA->MODER |= GPIO_MODER_MODER15_1; 
GPIOA->MODER &= ~GPIO_MODER_MODER15_0; //AF
GPIOB->MODER |= GPIO_MODER_MODER7_1; 
GPIOB->MODER &= ~GPIO_MODER_MODER7_0;  //AF

GPIOA->OTYPER |= GPIO_OTYPER_OT_15;
GPIOB->OTYPER |= GPIO_OTYPER_OT_7;    //Open drain

GPIOA->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR15_0 | GPIO_OSPEEDER_OSPEEDR15_1);  //speed high
GPIOB->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR7_0 | GPIO_OSPEEDER_OSPEEDR7_1);

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR15_0 | GPIO_PUPDR_PUPDR15_1);
GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPDR7_0 | GPIO_PUPDR_PUPDR_1);  //no pull -> external pull up resistor used

PA15_AF4();
PB7_AF4();  //alternate function 4 used

RCC->CFGR3 |= (1<<I2C1SW);              //SYSCLK
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;     //clock enable

I2C1->TIMINGR = 0x10707DBC;  //with CubeMX

I2C1->CR1 |= I2C_CR1_PE;            //peripheral enable

}

Я использую PA15 для SCL и PB7 для SDA.

1 Ответ

0 голосов
/ 14 мая 2020

I2 C будет генерировать часы на линии только в том случае, если он отправляет или ожидает данные. Попробуйте отправить данные, а затем использовать осциллограф для проверки линии данных и часов.

...