STM32F302核子-I2C无时钟

STM32F302核子-I2C无时钟,stm32,i2c,Stm32,I2c,我正在尝试使用STM32F3核子板的I2C接口与EEPROM通信 不幸的是,我没有时钟信号。 我试图通过设置寄存器中的位以及使用CubeMX来获得时钟信号。两次我都得到了相同的结果:没有时钟信号 谢谢你的帮助 这是我的代码 void I2C_Init(void){ RCC->AHBENR |= RCC_AHBENR_GPIOAEN; RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIOA->MODER |= GPIO_MODER_MODER15_1

我正在尝试使用STM32F3核子板的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

}
void I2C_Init(void){
RCC->AHBENR |=RCC_AHBENR|u GPIOAEN;
RCC->AHBENR |=RCC_AHBENR_GPIOBEN;
GPIOA->MODER |=GPIO_MODER_MODER15_1;
GPIOA->MODER&=~GPIO\u MODER\u MODER15\u 0;//AF
GPIOB->MODER |=GPIO_MODER_MODER7_1;
GPIOB->MODER&=~GPIO\u MODER\u MODER7\u 0;//AF
GPIOA->OTYPER |=GPIO_OTYPER_OT_15;
GPIOB->OTYPER |=GPIO_OTYPER_OT_7;//排水明沟
GPIOA->OSPEEDR |=(GPIO_OSPEEDER_OSPEEDR15_0 | GPIO_OSPEEDR_OSPEEDR15_1)//速度高
GPIOB->ospeder |=(GPIO_ospeder_ospeder7_0 | GPIO_ospeder_ospeder7_1);
GPIOA->PUPDR&=~(GPIO_PUPDR_PUPDR15_0 | GPIO_PUPDR_PUPDR15_1);
GPIOB->PUPDR&=~(GPIO_PUPDR_PUPDR7_0 | GPIO_PUPDR_PUPDR_1);//未使用拉->外部上拉电阻器
PA15_AF4();
PB7_AF4();//使用了备用函数4
RCC->CFGR3 |=(1TIMINGR=0x10707DBC;//带立方体
I2C1->CR1 |=I2C_CR1_PE;//外围设备启用
}

我将PA15用于SCL,PB7用于SDA。

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

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

PA15_AF4()
PB7_AF4()
是神奇且非标准的。请使用HAL库。您已经使用cubemx生成了代码。如果您只使用默认SDA和SCL GPIOS,会发生什么情况?希望您不要期望时钟在总线上未发出任何主请求的情况下出现(由于没有任何通信尝试的代码)参见问题作者(Steffi)的评论下面是唯一的答案:显然,最初的问题没有得到充分的分析,但最终问题有所不同。现在这个问题似乎过时了,不太可能得到进一步的澄清——我投票决定结束它。未完成的问答对其他读者没有帮助。
PA15_AF4()
PB7_AF4()
是神奇且非标准的。请使用HAL库。您已经使用cubemx生成了代码。如果您只使用默认SDA和SCL GPIOS会发生什么?希望您不要期望时钟在总线上不发出任何主请求(因为没有任何通信尝试的代码)的情况下出现。请参阅问题作者的评论(斯特菲)下面是唯一的答案:显然,最初的问题没有得到充分的分析,但最终问题有所不同。这个问题现在似乎过时了,不太可能得到进一步的澄清-我投票决定结束它。未完成的问答对其他读者没有帮助。谢谢!我的EEPROM有问题,但现在它可以做到这一点意思是这个问题已经过时了?由于分析已经中止,我看不出这个问题将如何帮助其他读者==>关闭它?谢谢!我的EEPROM有一个问题,但现在它工作了。这是否意味着这个问题已经过时了?由于分析已经中止,我看不出这个问题将如何帮助其他读者==>关闭它?