Skocz do zawartości

[C] STM32 i HC-05 połączone z ELM327, problem przy napisaniu kodu


Pomocna odpowiedź

Napisano

Witam!

Tworzę projekt, który polegać ma na bezprzewodowym połączeniu STM32F303 Discovery i HC-05 z ELM327 (wersja bluetooth). Jestem bardzo początkujący, jeśli chodzi o programowanie a zależy mi na tym projekcie, dlatego postanowiłem zwrócić się o pomoc. Korzystam z STM32CubeMX oraz Eclipse z wbudowanym rozszerzeniem „System Workbench for STM32”. Część kodu udało mi się stworzyć (korzystając z poradników w internecie), załączam go tutaj. HC-05 skonfigurowałem bezpośrednio z kompa (podłączyłem przez przejściówkę USB-UART) jako master, wbiłem adres BT do ELM327, tak że po włączeniu obydwu urządzeń łączą się ze sobą automatycznie.

W STM32 wyprowadzenia na UART są już zrobione, wstępny program wysyła komendę „ATRV” co sekundę (sprawdzone na komputerze poprzez terminal). Problem, który mnie teraz zatrzymał jest następujący: potrzebuję napisać polecenia, które będą już skierowane bezpośrednio do HC-05, a dokładnie – na początku chciałbym testowo wysyłać ATRV i ATI po nawiązaniu połączenia HC z ELM (warunek), najlepiej co ok 10s, a odpowiedź z ELM chciałbym przechowywać w pamięci STM w taki sposób, by w kolejnych krokach móc przesyłać te dane dalej do innych urządzeń (nie wiem czy jest taka możliwość, ale np. w postaci osobnego pliku).

Będę wdzięczny za pomoc, wskazówki, cokolwiek. Pozdrawiam!

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM6_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {

static uint16_t cnt = 0; // Licznik wyslanych wiadomosci
uint8_t data[50];// Tablica przechowujaca wysylana wiadomosc.
uint16_t size = 0; // Rozmiar wysylanej wiadomosci ++cnt;

++cnt; // Zwiekszenie licznika wyslanych wiadomosci.
size = sprintf(data, "ATRV \r\n", 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
HAL_GPIO_TogglePin(LED_Green_GPIO_Port, LED_Green_Pin); // Zmiana stanu pinu na diodzie LED
}
/* USER CODE END PFP */

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ę »
×
×
  • Utwórz nowe...