[FL-1581] I2C fast mode #596
This commit is contained in:
parent
49af516ec7
commit
ac8387e372
@ -93,6 +93,7 @@ void api_hal_clock_init() {
|
|||||||
// AHB1
|
// AHB1
|
||||||
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMAMUX1);
|
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMAMUX1);
|
||||||
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
|
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
|
||||||
|
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
|
||||||
|
|
||||||
// AHB2
|
// AHB2
|
||||||
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
|
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#include <api-hal-i2c.h>
|
#include <api-hal-i2c.h>
|
||||||
|
#include <api-hal-version.h>
|
||||||
|
|
||||||
#include <stm32wbxx_ll_i2c.h>
|
#include <stm32wbxx_ll_i2c.h>
|
||||||
#include <stm32wbxx_ll_gpio.h>
|
#include <stm32wbxx_ll_gpio.h>
|
||||||
#include <stm32wbxx_ll_cortex.h>
|
#include <stm32wbxx_ll_cortex.h>
|
||||||
@ -15,7 +17,6 @@ void api_hal_i2c_init() {
|
|||||||
|
|
||||||
LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
|
LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
|
||||||
|
|
||||||
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
|
|
||||||
GPIO_InitStruct.Pin = POWER_I2C_SCL_Pin | POWER_I2C_SDA_Pin;
|
GPIO_InitStruct.Pin = POWER_I2C_SCL_Pin | POWER_I2C_SDA_Pin;
|
||||||
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
|
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||||
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||||
@ -24,21 +25,23 @@ void api_hal_i2c_init() {
|
|||||||
GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
|
GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
|
|
||||||
|
|
||||||
I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
|
I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
|
||||||
I2C_InitStruct.Timing = POWER_I2C_TIMINGS;
|
|
||||||
I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
|
I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
|
||||||
I2C_InitStruct.DigitalFilter = 0;
|
I2C_InitStruct.DigitalFilter = 0;
|
||||||
I2C_InitStruct.OwnAddress1 = 0;
|
I2C_InitStruct.OwnAddress1 = 0;
|
||||||
I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
|
I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
|
||||||
I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
|
I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
|
||||||
LL_I2C_Init(I2C1, &I2C_InitStruct);
|
if (api_hal_version_get_hw_version() > 10) {
|
||||||
LL_I2C_EnableAutoEndMode(I2C1);
|
I2C_InitStruct.Timing = POWER_I2C_TIMINGS_400;
|
||||||
LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
|
} else {
|
||||||
LL_I2C_DisableOwnAddress2(I2C1);
|
I2C_InitStruct.Timing = POWER_I2C_TIMINGS_100;
|
||||||
LL_I2C_DisableGeneralCall(I2C1);
|
}
|
||||||
LL_I2C_EnableClockStretching(I2C1);
|
LL_I2C_Init(POWER_I2C, &I2C_InitStruct);
|
||||||
|
LL_I2C_EnableAutoEndMode(POWER_I2C);
|
||||||
|
LL_I2C_SetOwnAddress2(POWER_I2C, 0, LL_I2C_OWNADDRESS2_NOMASK);
|
||||||
|
LL_I2C_DisableOwnAddress2(POWER_I2C);
|
||||||
|
LL_I2C_DisableGeneralCall(POWER_I2C);
|
||||||
|
LL_I2C_EnableClockStretching(POWER_I2C);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool api_hal_i2c_tx(
|
bool api_hal_i2c_tx(
|
||||||
|
@ -17,10 +17,16 @@ extern "C" {
|
|||||||
|
|
||||||
#define POWER_I2C I2C1
|
#define POWER_I2C I2C1
|
||||||
/** Timing register value is computed with the STM32CubeMX Tool,
|
/** Timing register value is computed with the STM32CubeMX Tool,
|
||||||
* Fast Mode @100kHz with I2CCLK = 64 MHz,
|
* Standard Mode @100kHz with I2CCLK = 64 MHz,
|
||||||
* rise time = 0ns, fall time = 0ns
|
* rise time = 0ns, fall time = 0ns
|
||||||
*/
|
*/
|
||||||
#define POWER_I2C_TIMINGS 0x10707DBC
|
#define POWER_I2C_TIMINGS_100 0x10707DBC
|
||||||
|
|
||||||
|
/** Timing register value is computed with the STM32CubeMX Tool,
|
||||||
|
* Fast Mode @400kHz with I2CCLK = 64 MHz,
|
||||||
|
* rise time = 0ns, fall time = 0ns
|
||||||
|
*/
|
||||||
|
#define POWER_I2C_TIMINGS_400 0x00602173
|
||||||
|
|
||||||
/* Input Related Constants */
|
/* Input Related Constants */
|
||||||
#define INPUT_DEBOUNCE_TICKS 20
|
#define INPUT_DEBOUNCE_TICKS 20
|
||||||
|
Loading…
Reference in New Issue
Block a user