[STM32][HAL][I2C] Problem z przerwaniami
: niedziela 07 paź 2018, 16:19
Panowie szanowni.
Borykam się z takim oto problemem.
Do magistrali I2C mogę podłączyć do czterech czujników temperatury ADT7420. Mają one dwa wejścia adresowe, stąd taka ilość. Jako, iż mają one być przyłaczane na "wtyczkę", to nie zawsze wszystkie cztery będą się na magistrali znajdowały. Do komunikacji z nimi używam biblioteki HAL, kod generuję w CubeMX. Sytuacja wygląda następująco:
Używam funkcji:
Tak więc na początku odpytuję o temperaturę pierwszy czujnik. I teraz jeśli istnieje on na magistrali, to zwróci przerwanie
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) w którym to obrabiam otrzymane dane i znów używając komendy HAL_I2C_Mem_Read_IT( ) pytam kolejny czujnik o wartość rejestru.
Jeśli jednak czujnik nie istnieje na magistrali, otrzymuję przerwanie void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) i w nim również pytam kolejny czujnik o wartość rejestru z wynikiem pomiaru. Problem pojawia się w tym miejscu, gdyż kolejne przerwania z tej magistrali I2C, po wyrzuceniu przerwania ErrorCallback nie występują. Tak jakby trzeba było gdzieś znów zezwolić na przerwania, albo coś w ten deseń.
Czy jest mi w stanie ktoś pomóc?
Pozdrawiam,
mikandrzej
Borykam się z takim oto problemem.
Do magistrali I2C mogę podłączyć do czterech czujników temperatury ADT7420. Mają one dwa wejścia adresowe, stąd taka ilość. Jako, iż mają one być przyłaczane na "wtyczkę", to nie zawsze wszystkie cztery będą się na magistrali znajdowały. Do komunikacji z nimi używam biblioteki HAL, kod generuję w CubeMX. Sytuacja wygląda następująco:
Używam funkcji:
Kod: Zaznacz cały
HAL_I2C_Mem_Read_IT( );Tak więc na początku odpytuję o temperaturę pierwszy czujnik. I teraz jeśli istnieje on na magistrali, to zwróci przerwanie
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) w którym to obrabiam otrzymane dane i znów używając komendy HAL_I2C_Mem_Read_IT( ) pytam kolejny czujnik o wartość rejestru.
Jeśli jednak czujnik nie istnieje na magistrali, otrzymuję przerwanie void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) i w nim również pytam kolejny czujnik o wartość rejestru z wynikiem pomiaru. Problem pojawia się w tym miejscu, gdyż kolejne przerwania z tej magistrali I2C, po wyrzuceniu przerwania ErrorCallback nie występują. Tak jakby trzeba było gdzieś znów zezwolić na przerwania, albo coś w ten deseń.
Czy jest mi w stanie ktoś pomóc?
Pozdrawiam,
mikandrzej