1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-18 22:05:17 +03:00

[H7] Enable I2C (HAL)

This commit is contained in:
jflyper 2019-05-05 18:27:27 +09:00
parent c82c90159e
commit 0f7c84c0c6
3 changed files with 56 additions and 6 deletions

View file

@ -73,13 +73,13 @@ void i2cHardwareConfigure(const i2cConfig_t *i2cConfig)
for (int pindex = 0 ; pindex < I2C_PIN_SEL_MAX ; pindex++) {
if (i2cConfig[device].ioTagScl == hardware->sclPins[pindex].ioTag) {
pDev->scl = IOGetByTag(i2cConfig[device].ioTagScl);
#if defined(STM32F4)
#if defined(STM32F4) || defined(STM32H7)
pDev->sclAF = hardware->sclPins[pindex].af;
#endif
}
if (i2cConfig[device].ioTagSda == hardware->sdaPins[pindex].ioTag) {
pDev->sda = IOGetByTag(i2cConfig[device].ioTagSda);
#if defined(STM32F4)
#if defined(STM32F4) || defined(STM32H7)
pDev->sdaAF = hardware->sdaPins[pindex].af;
#endif
}

View file

@ -56,6 +56,7 @@ static void i2cUnstick(IO_t scl, IO_t sda);
#define GPIO_AF4_I2C GPIO_AF4_I2C1
const i2cHardware_t i2cHardware[I2CDEV_COUNT] = {
#if defined(STM32F7)
#ifdef USE_I2C_DEVICE_1
{
.device = I2CDEV_1,
@ -100,6 +101,52 @@ const i2cHardware_t i2cHardware[I2CDEV_COUNT] = {
.er_irq = I2C4_ER_IRQn,
},
#endif
#elif defined(STM32H7)
#ifdef USE_I2C_DEVICE_1
{
.device = I2CDEV_1,
.reg = I2C1,
.sclPins = { I2CPINDEF(PB6, GPIO_AF4_I2C1), I2CPINDEF(PB8, GPIO_AF4_I2C1) },
.sdaPins = { I2CPINDEF(PB7, GPIO_AF4_I2C1), I2CPINDEF(PB9, GPIO_AF4_I2C1) },
.rcc = RCC_APB1L(I2C1),
.ev_irq = I2C1_EV_IRQn,
.er_irq = I2C1_ER_IRQn,
},
#endif
#ifdef USE_I2C_DEVICE_2
{
.device = I2CDEV_2,
.reg = I2C2,
.sclPins = { I2CPINDEF(PB10, GPIO_AF4_I2C2), I2CPINDEF(PF1, GPIO_AF4_I2C2) },
.sdaPins = { I2CPINDEF(PB11, GPIO_AF4_I2C2), I2CPINDEF(PF0, GPIO_AF4_I2C2) },
.rcc = RCC_APB1L(I2C2),
.ev_irq = I2C2_EV_IRQn,
.er_irq = I2C2_ER_IRQn,
},
#endif
#ifdef USE_I2C_DEVICE_3
{
.device = I2CDEV_3,
.reg = I2C3,
.sclPins = { I2CPINDEF(PA8, GPIO_AF4_I2C3) },
.sdaPins = { I2CPINDEF(PC9, GPIO_AF4_I2C3) },
.rcc = RCC_APB1L(I2C3),
.ev_irq = I2C3_EV_IRQn,
.er_irq = I2C3_ER_IRQn,
},
#endif
#ifdef USE_I2C_DEVICE_4
{
.device = I2CDEV_4,
.reg = I2C4,
.sclPins = { I2CPINDEF(PD12, GPIO_AF4_I2C4), I2CPINDEF(PF14, GPIO_AF4_I2C4), I2CPINDEF(PB6, GPIO_AF6_I2C4), I2CPINDEF(PB8, GPIO_AF6_I2C4) },
.sdaPins = { I2CPINDEF(PD13, GPIO_AF4_I2C4), I2CPINDEF(PF15, GPIO_AF4_I2C4), I2CPINDEF(PB7, GPIO_AF6_I2C4), I2CPINDEF(PB9, GPIO_AF6_I2C4) },
.rcc = RCC_APB1L(I2C4),
.ev_irq = I2C4_EV_IRQn,
.er_irq = I2C4_ER_IRQn,
},
#endif
#endif
};
i2cDevice_t i2cDevice[I2CDEV_COUNT];
@ -250,9 +297,12 @@ void i2cInit(I2CDevice device)
i2cUnstick(scl, sda);
// Init pins
#ifdef STM32F7
#if defined(STM32F7)
IOConfigGPIOAF(scl, pDev->pullUp ? IOCFG_I2C_PU : IOCFG_I2C, GPIO_AF4_I2C);
IOConfigGPIOAF(sda, pDev->pullUp ? IOCFG_I2C_PU : IOCFG_I2C, GPIO_AF4_I2C);
#elif defined(STM32H7)
IOConfigGPIOAF(scl, pDev->pullUp ? IOCFG_I2C_PU : IOCFG_I2C, pDev->sclAF);
IOConfigGPIOAF(sda, pDev->pullUp ? IOCFG_I2C_PU : IOCFG_I2C, pDev->sdaAF);
#else
IOConfigGPIO(scl, IOCFG_AF_OD);
IOConfigGPIO(sda, IOCFG_AF_OD);

View file

@ -33,12 +33,12 @@
typedef struct i2cPinDef_s {
ioTag_t ioTag;
#if defined(STM32F4)
#if defined(STM32F4) || defined(STM32H7)
uint8_t af;
#endif
} i2cPinDef_t;
#if defined(STM32F4)
#if defined(STM32F4) || defined(STM32H7)
#define I2CPINDEF(pin, af) { DEFIO_TAG_E(pin), af }
#elif defined(STM32F1)
#define I2CPINDEF(pin, af) { DEFIO_TAG_E(pin) }
@ -79,7 +79,7 @@ typedef struct i2cDevice_s {
I2C_TypeDef *reg;
IO_t scl;
IO_t sda;
#ifdef STM32F4
#if defined(STM32F4) || defined(STM32H7)
uint8_t sclAF;
uint8_t sdaAF;
#endif