STM32F407 ile HC-05 bluetooth modülü sorunu

Başlatan sytax333, 08 Ağustos 2017, 21:20:43

sytax333

Herkese iyi günler

Bir kaç gündür almış olduğum hc-05 bluetooth modülü ile stm32 kullanarak bilgisayarıma cok basit bir string yollamaya çalışıyorum ancak bir türlü düzgün çıktı alamıyorum.
Yazdığım kod aşağıdaki gibidir.

#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
#include <stdio.h>
#include <stdlib.h>

void Init_Configuration()
{
	USART_InitTypeDef	USART_InitStructure;
	GPIO_InitTypeDef	GPIO_InitStructure;


	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

	GPIO_InitStructure.GPIO_Mode	=	GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType	=	GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Pin		=	GPIO_Pin_2;
	GPIO_InitStructure.GPIO_PuPd	=	GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_Speed	=	GPIO_Speed_50MHz;

	GPIO_Init(GPIOA,&GPIO_InitStructure);

	GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);

	USART_InitStructure.USART_BaudRate				=	9600;
	USART_InitStructure.USART_HardwareFlowControl	=	USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode					=	USART_Mode_Tx;
	USART_InitStructure.USART_Parity				=	USART_Parity_No;
	USART_InitStructure.USART_StopBits				=	USART_StopBits_1;
	USART_InitStructure.USART_WordLength			=	USART_WordLength_8b;

	USART_Init(USART2,&USART_InitStructure);

	USART_Cmd(USART2,ENABLE);




}

void USART_Puts(volatile char *s)
{
	while(*s)
	{
		while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
		USART_SendData(USART2,*s);
		*s++;

	}

}

void Send_Char(char c)
{
	while(!(USART2->SR & 0x80));
	USART2->DR=c;
}
char str[50];
uint32_t i;

int main(void)
{
	Init_Configuration();

	while(1)
	{
		sprintf(str,"Hello World \n");
		USART_Puts(str);
		Send_Char('A');
		i=6000000;
		while(i)
		{
			i--;
		}
	}
}


Yaptiğim yanlışın ne olduğunu anlayamıyorum bilgisayarımdan aldığım çıktı sadece "??????????????" içeriyor. HC-05 klavuzundan okuduğum kadarı ile baud rate olarak 9600 default kullanıyor bende pin çıkışını ona göre veiyorum.
ubuntuda kullandığım GTKTERM programıda bu çıktıyı görebilecek sekilde 8b word 1b stop baud rate 9600 olarak ayarlamama rağmen bir türlü çözülmedi.
Çıktı aşağıdaki gibidir.



Yardımcı olabilecek biri varsa şimdiden çok teşekkür ederim.

kantirici

Baudrate hatalı gibi görünüyor. 19200 ve 115200 ile deneme yapın.

Cemre.

Eğer değiştirmediyseniz 38400 ile konuşuyor olmalı. Yanlış hatırlamıyorsam.

AT modu 9600, normal mod 38400 olmalı....

görkem

hatırladığım kadarıyla at mod 38400 olmalı normal mod 9600

mylord92

#4
void USART_Puts(volatile char *s)
{
	while(*s)
	{
		while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
		USART_SendData(USART2,*s);
		*s++;

	}
}


Bu parçada gördüğüm kadarı ile "  *s++ " yapıyorsunuz ama doğrusu " s++ " olmalı. Pointerın gösterdiği değeri arttırıyor gibisiniz. Olması gereken adresi arttırıp, adresin gösterdiği değeri USART data registerına yazmak.

sytax333

Yukarıda söylediğiniz gibi Baud rate değiştirince sorun ortadan kalktı. Herkese cevapları için teşekkür ederim