STM32F030F4没有正确启动I2C1。这是我的密码:
//Clocks------------------------------------------------
RCC->AHBENR = 0x200000;
RCC->APB1ENR = 0x4040 ;
//------------------------------------------------------
//GPIO--------------------------------------------------
//Configure Alternate Fucntion GPIO to I2C1
GPIOA->AFR[1] = 0x440 //(0b0100)<<4 | (0b0100)<<8 //AF4;
//Set GPIOA Pin 9-10 as Alternate Function
GPIOA->MODER = 0x280000;
//Set GPIOA pin 9-10 as speed as High
GPIOA->OSPEEDR = 0x3c0000;
//Set GPIOA pin 9-10 as open drain
GPIOA->OTYPER = 0x600;
//Set GPIOA pin 9-10 as no Pull-up Pull-down
GPIOA->PUPDR = 0x0;
//------------------------------------------------------
//I2C Resgisters
I2C1->TIMINGR = 0x00201D2D;
I2C1->CR1 = 0x1;
I2C1->CR2 = 0x307001c;
I2C1->TXDR = 0x111;
//Start I2C
I2C1->CR2 |= (0b1) << 13;
但产出不是真的。它是这样的:
SDA端口不工作。
发布于 2019-02-09 16:50:16
问题解决了..。
时钟是有问题的:变化:
//Enable PORTA clocks
RCC->AHBENR |= 0x20000;
//Enable I2C1 clocks
RCC->APB1ENR |= 0x200000 ;
)
发布于 2019-02-09 08:57:41
这句话似乎有问题。
GPIOA->AFR[1] = GPIO_Aternate_Function_I2C1;
如果AFSEL9引脚为9和10,则应设置I2C和I2C值,但应设置AFSEL8 (在AFR1中最低),并清除其他引脚。
这段代码应该是这样的:
GPIOA->AFR[1] = GPIO_Aternate_Function_I2C1 * 0x00000110;
https://stackoverflow.com/questions/54604073
复制相似问题