Witajcie
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Bawię się ostatnio I2C w STM32F103RBT6 korzystając z transferu DMA oraz używając tylko i wyłącznie rejestrów (bez bibliotek SPL czy HAL)
Przerabiam przykładowy kod, który udostępnia ST (I2C example). Przy DMA występuje zwis, gdyż prawdopodobnie niepoprawnie jest generowany sygnał stopu.
Przedstawiam kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Znaki w terminalu przy odkomentowaniu linii while ( (I2C1->CR1 & I2C_CR1_STOP)); :
- pierwsze uruchomienie - 1 2 3 - zwis przy while ( (I2C1->CR1 & I2C_CR1_STOP));
- po resecie uC - 1 - zwis przy while( !(I2C1->SR1 & I2C_SR1_SB) );
Znaki w terminalu przy zakomentowanej linii while ( (I2C1->CR1 & I2C_CR1_STOP)); :
- pierwsze uruchomienie - 1 2 3 4 - poprawnie odczytany bajt
- po resecie Uc - 1 - zwis przy while( !(I2C1->SR1 & I2C_SR1_SB) );
Ponadto, flaga BUSY cały czas zajęta. Wniosek -> źle jest generowany sygnał stopu i w związku z tym, nie może zostać na nowo wygenerowany start.
Bardzo prosiłbym o pomoc.
Dziękuję i pozdrawiam
Elektro_maniak