[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
 | ||||
|     LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMAMUX1); | ||||
|     LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1); | ||||
|     LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1); | ||||
| 
 | ||||
|     // AHB2
 | ||||
|     LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); | ||||
|  | ||||
| @ -1,4 +1,6 @@ | ||||
| #include <api-hal-i2c.h> | ||||
| #include <api-hal-version.h> | ||||
| 
 | ||||
| #include <stm32wbxx_ll_i2c.h> | ||||
| #include <stm32wbxx_ll_gpio.h> | ||||
| #include <stm32wbxx_ll_cortex.h> | ||||
| @ -15,7 +17,6 @@ void api_hal_i2c_init() { | ||||
| 
 | ||||
|     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.Mode = LL_GPIO_MODE_ALTERNATE; | ||||
|     GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; | ||||
| @ -24,21 +25,23 @@ void api_hal_i2c_init() { | ||||
|     GPIO_InitStruct.Alternate = LL_GPIO_AF_4; | ||||
|     LL_GPIO_Init(GPIOA, &GPIO_InitStruct); | ||||
| 
 | ||||
|     LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1); | ||||
| 
 | ||||
|     I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C; | ||||
|     I2C_InitStruct.Timing = POWER_I2C_TIMINGS; | ||||
|     I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE; | ||||
|     I2C_InitStruct.DigitalFilter = 0; | ||||
|     I2C_InitStruct.OwnAddress1 = 0; | ||||
|     I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK; | ||||
|     I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT; | ||||
|     LL_I2C_Init(I2C1, &I2C_InitStruct); | ||||
|     LL_I2C_EnableAutoEndMode(I2C1); | ||||
|     LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK); | ||||
|     LL_I2C_DisableOwnAddress2(I2C1); | ||||
|     LL_I2C_DisableGeneralCall(I2C1); | ||||
|     LL_I2C_EnableClockStretching(I2C1); | ||||
|     if (api_hal_version_get_hw_version() > 10) { | ||||
|         I2C_InitStruct.Timing = POWER_I2C_TIMINGS_400; | ||||
|     } else { | ||||
|         I2C_InitStruct.Timing = POWER_I2C_TIMINGS_100; | ||||
|     } | ||||
|     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( | ||||
|  | ||||
| @ -17,10 +17,16 @@ extern "C" { | ||||
| 
 | ||||
| #define POWER_I2C I2C1 | ||||
| /** 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 | ||||
|   */ | ||||
| #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 */ | ||||
| #define INPUT_DEBOUNCE_TICKS 20 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 あく
						あく