STM32F302 Nucleo-I2C无时钟

问题描述 投票:1回答:1

我正在尝试使用STM32F3 Nucleo-Board的I2C接口与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。

stm32 i2c
1个回答
0
投票

I2C仅在发送或期望数据时才在线路上生成时钟。尝试发送数据,然后使用示波器探测数据和时钟线。

© www.soinside.com 2019 - 2024. All rights reserved.