gpt4 book ai didi

c - STM32F4 I2C 无库

转载 作者:行者123 更新时间:2023-12-02 16:18:05 25 4
gpt4 key购买 nike

我必须使用 I2C 连接 STM32F4 发现和 pcf8574 的代码。

我无法使用任何库函数。我尝试一些我没有做过的事情。我确实是在初始化代码之后写的。

我的初始化代码

RCC->APB1ENR|=RCC_APB1ENR_I2C1EN ; // enable APB1 peripheral clock for I2C1
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOBEN; // enable clock for SCL and SDA pins

//SCL on PB6 and SDA on PB7
GPIOB->MODER|=GPIO_MODER_MODER6; // set pin to alternate function
GPIOB->MODER|=GPIO_MODER_MODER7; // set pin to alternate function

GPIOB->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR6; //set GPIO speed
GPIOB->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR7; //set GPIO speed

GPIOB-> OTYPER |= GPIO_OTYPER_OT_6; // set output to open drain --> the line has to be only pulled low, not driven high
GPIOB-> OTYPER |= GPIO_OTYPER_OT_7; // set output to open drain --> the line has to be only pulled low, not driven high

GPIOB-> PUPDR |=GPIO_PUPDR_PUPDR6_0; // enable pull up resistors
GPIOB-> PUPDR |=GPIO_PUPDR_PUPDR7_0; // enable pull up resistors

GPIOB-> AFR[1] = 0x44000000; // Connect I2C1 pins to AF (af4)

// configure I2C1

I2C1-> CR2 = 8; // set peripheral clock to 8mhz
I2C1-> CR2 = 40; // 100khz i2c clock
I2C1-> CR2 |= ~(I2C_CR1_SMBUS); // I2C mode
I2C1-> OAR2 = 0x00; // address not important
I2C1-> CR2 |= 1; // i2c enable;

最佳答案

I2C1-> CR2 |= ~(I2C_CR1_SMBUS); // I2C mode

这条线所做的事情与你想象的不同。如果这个想法是要清除这一点,那么它应该是

I2C1-> CR2 &= ~(I2C_CR1_SMBUS); // I2C mode

否则,您将设置 CR2 寄存器中的所有位(I2C_CR1_SMBUS 除外),该位保持不变。

另一个问题是您尝试使用 CR1 位定义来设置 CR2。

启用位也是如此 - 寄存器错误。

首次在许多 STM32 微 Controller 上使用之前,应重置 I2C。

关于c - STM32F4 I2C 无库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44414085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com