Skocz do zawartości

STM32F103 Nucleo + HC-06 brak komunikacji w RealTerm


Pomocna odpowiedź

Napisano

Witam. Mam problem z prawidłową komunikacją pomiędzy portem szeregowym w komputerze i programem Realterm a płytką Nucleo połączoną z modułem bluetooth HC-06. Po ustawieniu w Realterm odpowiednich wartości i otwarciu portu dioda w module zaczyna sygnalizować połączenie, w Realterm zapalają się CTS i DSR, niestety program nie otrzymuje żadnych danych.

Kod źródłowy:

#include "stm32f10x.h"


void sendchar(char c)
{
while(!USART_GetFlagStatus(USART3,USART_FLAG_TXE));
USART_SendData(USART3,c);
}

int main(void)
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);


GPIO_InitTypeDef gpio;
GPIO_StructInit(&gpio);
gpio.GPIO_Mode=GPIO_Mode_AF_PP;
gpio.GPIO_Pin=1<<10;
GPIO_Init(GPIOC,&gpio);
gpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;
gpio.GPIO_Pin=1<<11;
GPIO_Init(GPIOC,&gpio);

GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);

USART_InitTypeDef uart;
USART_StructInit(&uart);
uart.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
uart.USART_Parity=USART_Parity_No;
uart.USART_StopBits=USART_StopBits_1;
uart.USART_WordLength=USART_WordLength_8b;
uart.USART_BaudRate=9600;
USART_Init(USART3,&uart);
USART_Cmd(USART3,ENABLE);

char x='x';
for(;;)
{
	sendchar(x);
}
}

Jak dokładnie realizujesz komunikacje ? tzn do Nucleo masz podłączony moduł bluetooth HC-06 i od strony portu szeregowego konwerter usb-uart i HC 06 ? i zamierzasz nadawać coś z terminala RealTerm ???

Do pinów uart Nucleo jest podłączony HC-06, a w laptopie dodałem urządzenie Bluetooth HC-06 i został mu przydzielony port szeregowy. Tak, finalnie chciałbym nadawać z terminala Realterm.

Realizowałem ostatnio z powodzeniem komunikacje bluetooth tylko, że od strony komputera miałem konwerter usb uart podłączony z modułem HC06 jako slave, a od strony nucleo moduł HC05 jako master i wszystko działa. W Twoim przypadku HC - 06 jest slavem, a PC masterem, wiec trzeba to wszystko sparować, żeby działało. Po za tym w konfiguracji UARTA w kodzie brakuje ustawienia pola trybu wysyłania i odbierania danych. tzn.

 uart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 

. Może trzeba jeszcze skonfigurować moduł HC 06 w trybie AT, jak dobrze pamiętam domyślnie prędkość transmisji jest wartość 9600 baud rate (sprawdź w dokumentacji lub inna). Oba urządzenia muszą pracować na tej samej prędkości transmisji. Oprócz tego wysyłając coś do HC 06 nie używa się znaków CR LF z realterm lub tylko któryś ze znaków, testowałem i pamiętam, że to też miało znaczenie. Dioda modułu Hc 06 po sparowaniu świeci sygnałem ciągłym, czekając na sparowanie migocze.

Użyłem górnej części płytki Nucleo, żeby skorzystać z niej jak z konwertera usb-uart, ale po odpaleniu terminala na ekranie odbieram tylko jakieś śmieci. W ten tryb AT też nijak wejść nie potrafię.. wejście EN spięte z 3.3V, wysyłać komendę AT próbowałem zarówno po Bluetooth jak i tym konwerterze i żadnego odzewu. A przy otwarciu portu w komputerze dioda u mnie zmienia stan z migotania na przerwa-2 mignięcia-przerwa.

Prawdopodobnie HC-06 masz ustawiony na inny baudrate niż 9600. Musisz wysyłać komendę AT na kolejnych wspieranych baudratach i zobaczyć na którym dostajesz odpowiedź. Ja u siebie wysyłałem komendy AT z PC przy użyciu konwertera USB-UART

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