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端口不起作用。
答案 0 :(得分:0)
这行似乎有问题。
GPIOA->AFR[1] = GPIO_Aternate_Function_I2C1;
如果I2C引脚为9和10,则应设置AFSEL9和AFSEL10的值。但是,应设置AFSEL8(这是AFR [1]中的最低值),然后清除其他内容。
此代码应执行以下操作:
GPIOA->AFR[1] = GPIO_Aternate_Function_I2C1 * 0x00000110;
答案 1 :(得分:0)
问题解决了。
时钟有问题: 变化:(
//Enable PORTA clocks
RCC->AHBENR |= 0x20000;
//Enable I2C1 clocks
RCC->APB1ENR |= 0x200000 ;
)