Cześć! Wybacz długi czas odpowiedzi.
Aby odpowiedzieć na to pytanie warto przyjrzeć się parametrom wywołania tych funkcji.
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Funkcja Master_Transmit przyjmuje jedynie adres urządzenia docelowego, wskaźnik na adres danych i rozmiar transmitowanej wiadomości.
Funkcja Mem_Write przyjmuje dodatkowo informację o docelowym adresie pamięci, do której ma zostać wpisana transmitowana wiadomość.
Oczywiście za pomocą funkcji Master_Transmit można osiągnąć to samo, umieszczając adres pamięci na początku tablicy danych do przesłania. Rozwiązanie z podaniem tej informacji jako parametr wywołania jest jednak bardziej przejrzyste, dlatego w tym artykule korzystamy właśnie z niego.
Dlaczego w takim razie w ogóle powstała funkcja Master_Transmit? Czasem zdarzają się urządzenia lub typy transmisji, które nie wymagają podawania adresu pamięci, do której mają trafić przesyłane dane (np. komunikacja I2C pomiędzy dwoma mikrokontrolerami). Wtedy po adresie odbiorcy możemy od razu transmitować dane właściwe.
Mam nadzieję że udało mi się wyklarować kwestię z powyższymi funkcjami 🙂
Brak odpowiedzi był spowodowany moim chwilowym przebywaniem w dziczy bez dostępu do technologii. Bardzo za to przepraszam, bo wiem że kilkudniowe opóźnienie w odpowiedziach pod artykułem może być frustrujące.
Niestety, jest wiele kwestii nad którymi chciałbym się rozwieść bardziej, lub w ogóle je poruszyć. Niestety o wielu rzeczach się zapomina, lub po prostu popełnia się błąd oczywistości, uznając je za powszechnie znane i rozumiane.
No i należy pamiętać, że artykuły powinny mieć skończoną długość =)
Dzięki wielkie za wszystkie uwagi!