STM32F4 DISCOVERY 115200 baudrate sorunu

Başlatan anatolica, 18 Mayıs 2012, 05:42:19

anatolica

Merhabalar,
Usart 9600 baudrate de sorunsuz çalışmasına karşın, bir türlü  115200 e ulaşamadım. Bir çok inceleme yaptım ancak bir sonuca ulaşamadım. Olası sorunlar, değiştirilmesi gereken clock vb ayarlar ya da kısaca hatam neler olabilir?

Atollic TrueStudio ve kütüphane kullanarak yazıyorum. Realterm programı ile test ediyorum. Gerekirse kütaphane kullanmadan da deneyebilirim.

*        AHB Prescaler                          | 1
  *-----------------------------------------------------------------------------
  *        APB1 Prescaler                         | 4
  *-----------------------------------------------------------------------------
  *        APB2 Prescaler                         | 2
  *-----------------------------------------------------------------------------
  *        HSE Frequency(Hz)                      | 8000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 8
  *-----------------------------------------------------------------------------
  *        PLL_N                                  | 336
  *-----------------------------------------------------------------------------
  *        PLL_P                                  | 2
  *-----------------------------------------------------------------------------
  *        PLL_Q                                  | 7
  *-----------------------------------------------------------------------------

#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
/* VARIABLES */



/* PROTOTYPES */
//clock && gpio functions
void CLK_Config(void);
void GPIO_Config(void);

//communication functions
void USARTInit(void);


int main(void)
{
	CLK_Config();
	GPIO_Config();
	USARTInit();


	uint16_t data=3;
	while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
	USART_SendData(USART3, data);

	return 0;
}

void CLK_Config(void)
{
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
}
void GPIO_Config(void)
{
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);

	GPIO_InitTypeDef GPIO_InitStructure;
	//usart3
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure );

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
	GPIO_Init(GPIOB, &GPIO_InitStructure );
}

void USARTInit(void)
{
	USART_InitTypeDef UART3_InitStructure;
	UART3_InitStructure.USART_BaudRate = 115200;
	UART3_InitStructure.USART_WordLength = USART_WordLength_8b;
	UART3_InitStructure.USART_StopBits = USART_StopBits_1;
	UART3_InitStructure.USART_Parity = USART_Parity_No;
	UART3_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	UART3_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_Init(USART3,&UART3_InitStructure);

	USART_Cmd(USART3, ENABLE );
}

anatolica

Kusura bakmayın. Sorunsuz olarak bu hıza ulaşabiliyormuşum. Iletişime geçmeye çalıştığım cihaz 9600 baudrate de kaldığından dolayı sorun yaşıyormuşum. Scope ile yaptığım ölçümler sonucunda anladım.