radarowiec Napisano Czerwiec 21, 2017 Udostępnij Napisano Czerwiec 21, 2017 Witam serdecznie. Jest mój pierwszy post na tym forum więc proszę o wyrozumiałość. Spróbuję przedstawić swój problem najbardziej szczegółowo jak tylko się da, bez zbędnego tekstu. Otóż moim celem jest wysłanie surowych danych z czujników akcel, żyro i magnetometru na module 9255 przez UART do PC i tam zaprezentowanie symulacji w Matlabie. Niestety moja wiedza nt. mikrokontrolerów jest dosyć słaba. Udało mi się podłączyć odpowiednio MPU9255 i konwerter usb-uart do mikrokontrolera tak jak na rysunku w załączniku z STM32CubeMX (zaimplementowałem tam moduły I2C i UART1, nic wiecej) No i teraz sie pojawily pytania czy prawidłowo połączyłem ze sobą te urządzenia? Od czego zacząć przy pisaniu programu? Czy trzeba podłączyć zasilanie konwertera do stm32? Na razie sprawę z Matlabem pomijam. Pojawił się dodatkowy problem z bibliotekami HAL, ponieważ producent MPU9255 zamieścił na swojej stronie tylko biblioteki STDPERIPH, a w CubeMX program ma działać na bibliotekach HAL. Każda uwaga czy pomoc mile widziana. Pozdro
radarowiec Czerwiec 26, 2017 Autor tematu Udostępnij Czerwiec 26, 2017 W międzyczasie udało mi się napisać kod, gdzie odczytywane są dane z rejestrów dla każdej osi magnetometru. Program się kompiluje, ale nie mam możliwości sprawdzenia jego poprawności.. w debugerze nic nie potrafię odczytać. Proszę o sprawdzenie i ewentualne uwagi do kodu #define I2C_SLAVE_ADDRESS (0x68<<1) // adres slave: b110 1000 (LSB=0) #define CONFIG 0x1A //#define GYRO_CONFIG 0x1B #define ACCEL_CONFIG 0x1C #define ACCEL_ENABLE_4G 0xE8 //1110 1000 - uruchomienie Az,Ax,Ay + sensivity +-4g #define SELF_TEST_Z_ACCEL 0x0F #define PWR_MGMT_1 0x6B #define USER_CTRL 0x6A #define INT_PIN_CFG 0x37 #define CNTL1 0x0A /* USER CODE BEGIN 2 */ HAL_I2C_Init(&hi2c1); write_reg(0x6B,0x00); // Power Manager Register -> 0 write_reg(0x6A,0x00); // Disable Master I2C for enabling ByPass-Mode write_reg(0x37,0x02); // Enable ByPass-Mode write_reg_magn(0x0A, 0x06); // Continuous Measurement Mode 2 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { int xh_magn = read_reg_magn(0x04); // read x axis, high byte int xl_magn = read_reg_magn(0x03); // read x axis, lowbyte int yh_magn = read_reg_magn(0x06);// read y axis, high byte int yl_magn = read_reg_magn(0x05);// read y axis, lowbyte int zh_magn = read_reg_magn(0x08);// read z axis, high byte int zl_magn = read_reg_magn(0x07);// read z axis, lowbyte read_reg_magn(0x09); // "Take another measurement from magnetometer" uint8_t x_magn = (xh_magn << 8) | (xl_magn & 0xff); HAL_UART_Transmit_DMA(&huart1,&x_magn,1); uint8_t y_magn = (yh_magn << 8) | (yl_magn & 0xff); HAL_UART_Transmit(&huart1,&y_magn,1,100); uint8_t z_magn = (zh_magn << 8) | (zl_magn & 0xff); HAL_UART_Transmit(&huart1,&z_magn,1,100); }
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »