@@ -255,14 +255,12 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
255
255
256
256
handle -> State = HAL_I2C_STATE_RESET ;
257
257
258
- if (master == 0 ) {
259
- HAL_NVIC_SetPriority (obj -> irq , 0 , 1 );
260
- HAL_NVIC_EnableIRQ (obj -> irq );
258
+ HAL_NVIC_SetPriority (obj -> irq , 0 , 1 );
259
+ HAL_NVIC_EnableIRQ (obj -> irq );
261
260
#ifdef STM32F1xx
262
- HAL_NVIC_SetPriority (obj -> irqER , 0 , 1 );
263
- HAL_NVIC_EnableIRQ (obj -> irqER );
261
+ HAL_NVIC_SetPriority (obj -> irqER , 0 , 1 );
262
+ HAL_NVIC_EnableIRQ (obj -> irqER );
264
263
#endif
265
- }
266
264
267
265
// Init the I2C
268
266
HAL_I2C_Init (handle );
@@ -338,7 +336,10 @@ i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address,
338
336
HAL_StatusTypeDef status = HAL_OK ;
339
337
340
338
// Check the communication status
341
- status = HAL_I2C_Master_Transmit (& (obj -> handle ), dev_address , data , size , I2C_TIMEOUT_TICK );
339
+ status = HAL_I2C_Master_Transmit_IT (& (obj -> handle ), dev_address , data , size );
340
+
341
+ // wait for transfer completion
342
+ while (HAL_I2C_GetState (& (obj -> handle )) != HAL_I2C_STATE_READY ){};
342
343
343
344
if (status == HAL_OK )
344
345
ret = I2C_OK ;
@@ -380,9 +381,11 @@ i2c_status_e i2c_master_read(i2c_t *obj, uint8_t dev_address, uint8_t *data, uin
380
381
{
381
382
i2c_status_e ret = I2C_ERROR ;
382
383
383
- if (HAL_I2C_Master_Receive (& (obj -> handle ), dev_address , data , size , I2C_TIMEOUT_TICK ) == HAL_OK ) {
384
+ if (HAL_I2C_Master_Receive_IT (& (obj -> handle ), dev_address , data , size ) == HAL_OK ) {
384
385
ret = I2C_OK ;
385
386
}
387
+ // wait for transfer completion
388
+ while (HAL_I2C_GetState (& (obj -> handle )) != HAL_I2C_STATE_READY ){};
386
389
387
390
return ret ;
388
391
}
0 commit comments