I2C problem na STM32Cube a STM32F429Discovery

Stano stano.hw na gmail.com
Pátek Duben 4 13:56:57 CEST 2014


Zdravim konferenci
Vychadzam z STM32F429I-Discovery example. Skusal som pristupovat k I2C z 
2 threadov, v jednom k touch controleru, v druhom k externemu senzoru. 
Pouzivam funkciu IOE_ReadMultiple() co je vlastne wrapper HAL_I2C_Mem_Read()
Problem je ze sa to vie zablokovat a skonci na timeoute.
Dodefinoval som __HAL_LOCK() a __HAL_UNLOCK() na RTOS mutexy. To vsak 
nepomohlo.
Nakoniec som dospel k rieseniu, funkciu HAL_I2C_Mem_Read() je potrebne 
zamknut este pred podmienkou  if(hi2c->State == HAL_I2C_STATE_READY)

A odrazu program nema problem, kazdy thread si pracuje so svojou periferiou.
Otazka je, bud som absolutne nepochopil vyznam zamkov a kniznica 
nepredpoklada pouzitie z viacerych threadov naraz alebo je v kniznici 
pomerne vazny bug. Problem je ze sa to netyka len jednej konkretnej 
funkcie ale prinajmensom celej I2C kniznice a po letmom pohlade do 
zdrojakov pravdepodobne aj inych periferii.

Pouzivam kniznice z balika STM32Cube_FW_F4_V1.1.0
Aj ked samotna kniznica ma v hlavicke V1.0.0

S pozdravom
       Stano


Další informace o konferenci Hw-list