Stm32f4 Seri İletişim Değişik Karakterler Sorunu

Başlatan micelow, 01 Ocak 2014, 12:14:21

micelow

Merhabalar
Stm32f4 e pc den terminal programları ile veri gönderiyorum ve alınan veriyi tekrar terminale basıyorum fakat değişik karakterler çıkıyor iletişim hızı 9600 ve Xtal 8 Mhz de ayarlı. Kodlar aşağıdaki gibidir.

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"

void UART_GPIOInitialize(){
	GPIO_InitTypeDef GPIO_InitStructure;
/* Enable clock for GPIOB */
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

 /* Connect PB6 to USART1_Tx */
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);

 /* Connect PB7 to USART1_Rx */
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);

 /* GPIOB Configuration:
  *  USART1 Tx on PB6
  *  USART1 Rx on PB7
  *  Port as pushpull, 2MHz and pull up
  * */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

 /* GPIOB configuration */
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 /* Enable clock for GPIOB */
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
 
 /* Connect PB6 to USART1_Tx */
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);

 /* Connect PB7 to USART1_Rx */
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);
 
 /* GPIOB Configuration:
  *  USART1 Tx on PB6
  *  USART1 Rx on PB7
  *  Port as pushpull, 2MHz and pull up
  * */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

 /* GPIOB configuration */
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 }
 void UART_Initialize(void) {
 USART_InitTypeDef USART_InitStructure;

 /* Enable peripheral clock for USART1 */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

 /* USART1 configured as follow:
  *  BaudRate 9600 baud
  *  Word Length 8 Bits
  *  1 Stop Bit
  *  No parity
  *  Hardware flow control disabled (RTS and CTS signals)
  *  Receive and transmit enabled
  * */
 USART_InitStructure.USART_BaudRate = 9600;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_Parity = USART_Parity_No;
 USART_InitStructure.USART_HardwareFlowControl =
   USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

 /* USART configuration */
 USART_Init(USART1, &USART_InitStructure);

 /* Enable USART */
 USART_Cmd(USART1, ENABLE);
}
 
 
 
 int main(void) {
 char ch;

 UART_GPIOInitialize();
 UART_Initialize();

 while (1) {
  /* Loop until the receiver not empty. */
  while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {
  }

  /* 1 byte receive and send back */
  ch = USART_ReceiveData(USART1);
  USART_SendData(USART1, ch);

  /* Loop until the end of transmission. */
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {
  }
 }
}
"Bir tek şeye ihtiyacımız var çalışkan olmak."

micelow

stm32f4xx.h de
#define HSE_VALUE ((uint32_t) 25000000

olan satırı
#define HSE_VALUE ((uint32_t) 8000000

olarak değiştirdim ama sonuç yine aynı nerde hata yapıyorum anlamadım.
"Bir tek şeye ihtiyacımız var çalışkan olmak."

muhittin_kaplan


micelow

#3
Keil e yazıyorum hocam
"Bir tek şeye ihtiyacımız var çalışkan olmak."

micelow

konuya ait fikri olan paylaşabilir :) kitte bir sıkıntı olabilir mi?
"Bir tek şeye ihtiyacımız var çalışkan olmak."

micelow

üstadar daha önce kendi kitinde seri iletişim çalıştıran varsa projeyi atabilir mi sorunu hala çözemedim internette bulduklarımı denedim ama nafile kitten şüphe eder oldum.
"Bir tek şeye ihtiyacımız var çalışkan olmak."

muhittin_kaplan


micelow

Muhittin hocam ilginiz için teşekkür ederim kodları ayıkladım usart fonksiyonlarını derleyip kite attım hatta kütüphane dosyalarıma kadar değiştirdim ama sonuç değişmedi gönderdiğim karakteri göremedim bir türlü günlerdir bununla uğraşıyorum:s
"Bir tek şeye ihtiyacımız var çalışkan olmak."

muhittin_kaplan

system_stm32f4xx.c

dosyanın içeriğine bakarmısın HSE olarak 25000000 felan mı var.

micelow

evet var hocam  #define HSE_VALUE    ((uint32_t)8000000)  olarak değiştirdim ama düzelmedi.
"Bir tek şeye ihtiyacımız var çalışkan olmak."

z

@Micelow

Bir de asağıdaki programı dene. (PB10 TxData, PB11 RXData)

#include "Zystem.h"

char i, RxBuf[16];


void SerDataReady(char RxData)
{
     RxBuf[i]=RxData;
     i++; i&=0x0F;       // Dairesel buffer                 
}
 

int main()
{
char j;
          
      ver();            // ZIOS versiyon kontrolu
          
      serinit(9600);    // 9600 baud, 8 data, 1 stop, no parity
          
      i=0; j=0;
          
      while(1)
       {
          while(i==j);          // Data gelinceye kadar bekle  
          sersend(RxBuf[j]);    // Gelen datayi geri yolla
          j++;  j&=0x0F;
       }
}


Programı denemek istersen proje klasoru burada.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

micelow

hocam sonuç değişmedi Tx ve Rx uçlarını digitus usb rs232 çeviriciye direk bağlayarakta denedim sonuç değişmedi max232 i değiştirip çeviriciyle araya koycam bakalım değişcek mi
"Bir tek şeye ihtiyacımız var çalışkan olmak."

micelow

Nihayet problem max232 entegresini ve kondansatörleri değiştirerek aşıldı. Yardımlarını esirgemeyen büyüklerime teşekkür ederim.
"Bir tek şeye ihtiyacımız var çalışkan olmak."