Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32] Problem z odbieraniem USART

27 Sie 2010 13:59 2479 4
  • Poziom 13  
    Witam,
    mam problem z odbieraniem danych po usarcie. Jest on skonfigurowany tak:

    Code:

      USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
      USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
      USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
      USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
    /* Configure the USART1 synchronous paramters */
      USART_ClockInit(USART1, &USART_ClockInitStructure);

      USART_InitStructure.USART_BaudRate = 115200;
      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_RTS_CTS;


      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    /* Configure USART1 basic and asynchronous paramters */
      USART_Init(USART1, &USART_InitStructure);
      /* Enable USART1 */
      USART_Cmd(USART1, ENABLE);
      USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);


    Wysyłanie działa w porządku. Funkcja printf bez problemu wysyła dane do
    terminala na PC.
    Fragment z maina:

    Code:


      u16 RxData;
      for(int i = 0; i < 20; i++)
      {
        printf("%f", U->matrix[i][0]);
        DelayMs(10);
        while(USART_GetFlagStatus(USART1, USART_IT_RXNE) == RESET);
        RxData = USART_ReceiveData(USART1);
        printf("%d\r\n", RxData);
      }


    w RxData jednak zawsze znajduje sie wartość różna od tej co wysłałem z PC.
    Wysyłam np 100, otrzymuję 49. Wysyłam 10 otrzymuję także 49. Wie ktoś
    co jest źle skonfigurowane? Ustawienia na komputerze odnośnie COMa mam
    takie same jak w procesorze.
  • Pomocny post
    Poziom 38  
    danrok napisał:

    w RxData jednak zawsze znajduje sie wartość różna od tej co wysłałem z PC.
    Wysyłam np 100, otrzymuję 49. Wysyłam 10 otrzymuję także 49.


    a jak wyślesz 2xx to otrzymujesz 50?
  • Poziom 13  
    Tak, zgadza się. Wiesz już w czym jest problem? ;)
  • Pomocny post
    Poziom 38  
    Usart działa dobrze. To co otrzymujesz do wartość acsii pierwszej liczby.

    Innymi słowy - terminal nie wysyła liczby, którą wpiszesz, tylko znak. W kodzie ASCII '0' = 48, '1' = 49, itd.

    Otrzymujesz więc tylko pierwszy znak jaki wyślesz.

    jak wyślesz z terminala 'p' to powinieneś otrzymać 112
  • Poziom 13  
    Racja, głupi błąd z mojej strony że tego nie zauważyłem. Dzięki.