2016-06-06 13 views
1

저는 MPLAB X Harmony 프레임 워크와 마이크로 컨트롤러 작업에 익숙하지 않습니다. 나는 PIC32MZ2048ECH144에서 일하고있다. USART를 사용하여 간단한 문자열을 전송하고 RealTerm 터미널에 표시된 것을 봅니다. (하이퍼 터미널도 시도했습니다.) 어떤 문자열을 보내더라도 정크 문자 만 표시됩니다. 정크 문자가 표시되는 문제에 대한 해결책을 찾았을 때 전송 속도를 확인할 수있는 제안이있었습니다. MPLab Harmony Configurator (옵션 -> 하모니 프레임 워크 구성 -> 드라이버 -> USART -> USART 드라이버 인스턴스 0 -> 전송 속도 -> 9600)에서 전송 속도를 9600으로 설정했습니다. 그래서 나는 명시 적으로 보 레이트를 설정하기 위해 app.c에서 다음 라인을 사용했다. (PBCLK는 100MHz 임). 그러나 운이 없다! PLIB_USART_BaudRateSet (USART_ID_2, 100000000, 9600); APP.C 파일 코드 :PIC32MZ2048ECH144 USART- 정크 문자가 전송되었습니다.

/******************************************************************************* 
    Start of File 
    */ 
    const char *string1 = "*** UART Interrupt-driven Application Example ***\r\n"; 
    const char *string2 = "*** Type some characters and observe the LED turn ON ***\r\n"; 


    APP_DATA appData = 
    { 
    }; 

    APP_DRV_OBJECTS appDrvObject; 

    void APP_Initialize (void) 
    { 
     appData.state = USART_ENABLE; 
     appData.InterruptFlag = false; 
    } 

    bool WriteString(void) 
    { 
     if(*appData.stringPointer == '\0') 
     { 
      return true; 
     } 

     while (PLIB_USART_TransmitterIsEmpty(USART_ID_1)) 
     { 
      PLIB_USART_TransmitterByteSend(USART_ID_1, *appData.stringPointer); 
      appData.stringPointer++; 
      if(*appData.stringPointer == '\0') 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

    bool PutCharacter(const char character) 
    { 
     if(PLIB_USART_TransmitterIsEmpty(USART_ID_1)) 
     { 
      PLIB_USART_TransmitterByteSend(USART_ID_1, character); 
      return true; 
     } 
     else 
      return false; 
    } 

    void APP_Tasks (void) 
    { 
     /* check the application state*/ 
     switch (appData.state) 
     { 
      case USART_ENABLE: 
       /* Enable the UART module*/ 
       PLIB_USART_BaudRateSet(USART_ID_1, 100000000 ,9600); 
       PLIB_USART_Enable(USART_ID_1); 
       appData.stringPointer = string1; 
       appData.state = USART_TRANSMIT_FIRST_STRING; 
       break; 

      case USART_TRANSMIT_FIRST_STRING: 
       if(true == WriteString()) 
       { 
        appData.state = USART_TRANSMIT_SECOND_STRING; 
        appData.stringPointer = string2; 
       } 
       break; 

      case USART_TRANSMIT_SECOND_STRING: 
       if(true == WriteString()) 
       { 
        appData.state = USART_RECEIVE_DONE; 
       } 
       break; 

      case USART_RECEIVE_DONE: 
       if (appData.InterruptFlag) 
       { 
        if(true == PutCharacter(appData.data)) 
        { 
         appData.InterruptFlag = false; 
        } 
       } 
       break; 

      default: 

       while (1); 

     } 

    } 

    /******************************************************************************* 
    End of File 
    */ 

나는 내가 RealTerm에서받은 출력의 이미지를 첨부 할 수없는 것이 유감 나는 포인트가 부족하지 않는 한. 다른 문제가 발생할 수있는 보일러 전송률 불일치가있을 수 있습니다. 어떤 힌트 나 도움이 큰 도움이 될 것입니다. 미리 감사드립니다. 게시물의 실수로 사과드립니다.

답변

0

당신은 BAUD 율이 가장 높다고 정확하지만, USART가 컴퓨터에 어떻게 연결되어 있는지 반드시 확인하십시오. 컴퓨터가 + -5V를 기대하고 있기 때문에 번역 칩이 있습니까? BAUD에 관해서는 클럭 방식을 점검하고 PBCLK가 때때로 SYSCLOCK의 DIV_2인지 확인하십시오. 하모니 (Harmony) 프레임 워크에는 클록 킹과 CONFIG 프라그 마를 두 번 확인하는 훌륭한 클럭킹 설계도가 있습니다.

+0

안녕하세요 bismit5728 .. 답장을 보내 주셔서 감사합니다. 저는 CHART40 및 USB 미니 케이블을 사용하여 USART를 PC에 연결합니다. 나는이 문제를 알아 냈고 당신이 옳았다. 내가 한 실수는 시계 계획과 관련이 있습니다. 문제를 일으킨 POSCMOD는 HS였다. 나는 그것을 EC로 바꾸어 전송 된 문자를 제대로 볼 수 있었다. –