Skocz do zawartości

brawo2

Użytkownicy
  • Zawartość

    1
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O brawo2

  • Ranga
    1/10
  1. Cześć Posiadam mikrokontroler STM32F100C4T6B oraz moduł GY-50 L3G4200D. Staram się odebrać informację z żyroskopu ( na początek tylko informacje o Z ) przy użyciu I2C oraz przesłać je za pomocą UART i wyświetlić na komputerze. Korzystam z STM32CubeMX oraz Sytem Workbench for STM32. Komunikacja przez UART działa na pewno. Wszystko jest dobrze podłączone według dokumentacji. Na początku próbowałem UART obsługiwać w przerwaniu ale przy korzystaniu z I2C to przerwanie nie działa dlatego wrzuciłem je do głównej pętli i wtedy mogę odbierać wiadomości dane na komputerze. Czytałem też że może być konflikt między I2C oraz UART jeżeli chodzi o DMA ale według tego co sprawdziłem to nie powinno być w przypadku mojego modelu. Próbowałem też samej komunikacji I2C bez UART, uzależniłem zmienną od silnika ale silnik ani drgnął. Niestety nie mogę podłączyć STMa przez SWD gdyż źle zaprojektowałem płytkę PCB. Poniżej wrzucam kod. Proszę o pomoc. #define L3G4200D_ACC_ADDRESS (0x69 << 1) // adres akcelerometru // adres akcelerometru #define L3G4200D_ACC_CTRL_REG1 0x20 // rejestr ustawien 1 #define L3G4200D_ACC_CTRL_REG4 0x23 // rejestr ustawien 1 #define WHO_AM_I 0x0F #define L3G4200D_ACC_Z_H_A 0x2D // starszy bajt danych osi z //CTRL_REG1 = [DR1][DR0][BW1][BW0][PD][Zen][Yen][Xen] // Maski bitowe #define L3G4200D_ACC_100HZ 0x0F #define L3G4200D_ACC_DPS 0x20 // Zmienne uint8_t Data=0; int8_t Zaxis =0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); static void MX_USART1_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /*void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { static uint16_t cnt = 0; //Licznik wysylanych wiadomosci uint8_t data [50];//Tablica przechowujaca wysylana wiadomosc uint16_t size = 0;//Rozmiar wysylanej wiadomosci ++cnt; // Zwiekszenia licznika wysylanych wiadomosci size = sprintf(data, "Liczba wysylanych wiadomosc: %d.\n\r", cnt); // Stworzenie wiadomosci do wyslania oraz przypisanie ilosci wysylanych znakow do zmiennej size HAL_UART_Transmit_IT(&huart1, data, size);// Rozpoczecie nadawania danych z wykorzystaniem przerwan }*/ /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ uint8_t Settings = L3G4200D_ACC_100HZ; uint8_t Settings1 = L3G4200D_ACC_DPS; HAL_I2C_Mem_Write(&hi2c1, L3G4200D_ACC_ADDRESS, L3G4200D_ACC_CTRL_REG1, 1, &Settings, 1, 100); HAL_I2C_Mem_Write(&hi2c1, L3G4200D_ACC_ADDRESS, L3G4200D_ACC_CTRL_REG4, 1, &Settings1, 1, 100); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_I2C_Mem_Read(&hi2c1, L3G4200D_ACC_ADDRESS, L3G4200D_ACC_Z_H_A , 1, &Data, 1, 100); Zaxis = Data << 8; uint8_t data1 [50];//Tablica przechowujaca wysylana wiadomosc uint16_t size = 0;//Rozmiar wysylanej wiadomosci size = sprintf(data1, "Odczyt Z: %d.\n\r", Zaxis); // Stworzenie wiadomosci do HAL_UART_Transmit_IT(&huart1, data1, size);// Rozpoczecie nadawania danych z wykorzystaniem przerwan /* USER CODE END 3 */ } }
×
×
  • Utwórz nowe...