2016-03-22 77 views
1

我對微控制器編程非常陌生。UART通信dsPIC33EP256MU810

我使用

  • MplabX v3.26作爲IDE
  • XC16編譯
  • PICKIT 3
  • p33EP256MU810(DSPIC)

用於編程

我寫了非常簡單的程序來閃爍LED和S最後幾個字符超過UART,請參考下面的源代碼:

#include <p33Exxxx.h> 
#include <p33EP256MU810.h> 
#include <libpic30.h> 
#include <uart.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <pps.h> 
#include <xc.h> 
#include <stdint.h> 

// Configuration settings 
_FOSC(FNOSC_FRCPLL); 
_FWDT(FWDTEN_OFF); 

int main() 
{  
//make all pins digital 
PADCFG1 = 0xFFFF; 

//set direction 
TRISCbits.TRISC2 = 0; 

//Initialze UART1 
iPPSOutput(OUT_PIN_PPS_RP68, OUT_FN_PPS_U1TX); 

//close UART 
CloseUART1(); 

//open UART 
OpenUART1( UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT, 
      UART_TX_ENABLE & UART_INT_TX & UART_ADR_DETECT_DIS, 
      15); 

while (1) 
{ 
    //turn on led 
    LATCbits.LATC2 = 1; 
    __delay32(3750000); // ~1 sec delay 
    //turn off led 
    LATCbits.LATC2 = 0; 
    __delay32(3750000); // ~1 sec delay 


    //Transmit data 
    while(BusyUART1());  //Wail till available 
    WriteUART1(0x55); 
    WriteUART1(0xaa); 
    while(BusyUART1());  //Wail till all bytes sent 
} 

return 0; 
} 

LED閃爍部分作品完美,但我對UART的另一端接收垃圾字符在那裏我使用的串口監聽工具(X-CTU )來監視數據。

我的主要問題是我無法計算波特率。請讓我知道如果我做錯了什麼。

謝謝

回答

1
  1. 清除的ANSELx寄存器來設置引腳的數字,而不是用波特率寫PADCFG1
  2. 播放。過程中的最後一個參數OpenUART1根據dsPic tool description第147頁指定U1BRG值。 您也可以在執行OpenUART1後手動設置波特率,手動添加U1BRG = value;。 傳遞給UxBRG的值取決於時鐘速度和所需的波特率,更多詳細信息請參見manual for USART第9頁。注意,如果手動設置波特率也需要設置或清除U1MODE.BRGH位。
1

「我的主要問題是我無法計算波特率,請讓我知道如果我做錯了什麼。」

我不知道什麼是需要的,但波特率:

  1. 雖然做的UxBRG計算,請小心時鐘(振盪器)設置(因爲你正在使用_FOSCSEL(FNOSC_FRCPLL)啓用PLL)。

  2. 您描述的問題聽起來像是錯誤的波特率(包括振盪器)計算,或者可能是端口設置錯誤(數據位,奇偶校驗,停止位)。

希望對您有所幫助...