Skocz do zawartości

[STM32] STM32F103 i HC-05 - wydawanie komend AT z poziomu procesora


Vroobee

Pomocna odpowiedź

Witam,
mam pytanie odnośnie wydawania komend AT dla modułu Bluetooth HC-05 z procesora STM32F103RBT6. Mianowicie w książce p. M. Galewskiego znalazłem procedury wysyłania i odbierania danych przez UART.

void USART1_IRQHandler (void){
volatile unsigned long int delay;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
	buforRx[bufRxIndex] = USART_ReceiveData(USART1);
	if(buforRx[bufRxIndex] == 0x0A){
		odebranoDane = true;
		while (bufRxIndex < 22){
			buforRx[bufRxIndex] = 0;
			bufRxIndex++;
		}
		bufRxIndex = 0;
	} else {
		if(buforRx[bufRxIndex] != 0x0D){
			bufRxIndex++;
			if(bufRxIndex > 22){
				bufRxIndex = 0;
			}
		}
	}
}
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){
	USART_SendData(USART1, buforTx[bufTxIndex++]);
	for (delay = 0; delay < 150000; delay++);
	if(buforTx[bufTxIndex - 1] == 0x0D){
		USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
		bufTxIndex = 0;
	}
}
}

Do wysyłania komend wykorzystuję funkcję:

void HC_Cmd(unsigned char * komenda, volatile unsigned char * rezultat){
unsigned long int i = 0;
do {
	buforTx[i] = komenda[i];
	i++;
} while ((komenda[i - 1] != 0x00) && (komenda[i - 1] != 0x0D));
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
odebranoDane = false;
while (!odebranoDane);
i = 0;
do {
	rezultat[i] = buforRx[i];
	i++;
} while ((rezultat[i-1] != 0x00) && (rezultat[i-1] != 0x0D));
odebranoDane = false;
}

Chodzi mi o to, że HC jakby miało problem z odebraniem komendy w takiej formie:

HC_KEY_ON;
		for(k = 0; k <7000000ul; k++);
		HC_Cmd("AT\r\n", rezultatKomendy);
		usart2_send_str(buforRx);
		usart2_send_str("\n\r");

W buforze odbiorczym nawet po wyrzuceniu błędu przez HC-05 powinno znaleźć się ERROR (0), a znajduje się np. EEERROR (0), OEERROR (0). Ktoś może miał styczność w jaki sposób robi się to dla modułu HC-05 żeby było dobrze, lub ew znalazł błąd w którymś kodzie ?

Parametry USART:

- baud 115200,
- 8 bitów danych,
- 0 bitów parzystości,
- 1 bit stopu.

Dodam jeszcze, że instrukcja wysyłania komendy znajduje się w zagnieżdżonym switch'u. Nie wydaje mi się, żeby miało to wpływ na wysłani komendy czy na odbiór danych skoro odbiór jest w przerwaniu, a wysyłanie nie wychodzi z funkcji skoro nie wyśle całego budowa buforTx. Jeśli wyślę przez realterm z drugiego modułu bluetooth np."123456789\r\n" to wszystko ładnie wyświetla.

Link do komentarza
Share on other sites

Widzę, że znowu sam znalazłem odpowiedź. Okazało się, że procedura wysyłania pomijała znaki "\r\n" i wysyłała tylko słowo np. AT+STATE?. Znaki te są konieczne do tego aby moduł HC-05 zaakceptował zapytanie.

  • Lubię! 1
Link do komentarza
Share on other sites

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...