ARM的UART實驗

實驗題目:設計一個串口初始化程 Uart_Init_Ext(int pclk,int baud,int parity,int stop, int len)要求在Uart_driver.c 和 Uart_driver.h中實現驅動,然後在TARGET.c的Target—_Init(void)中調用

PC端用超級終端驗證結果。串口寄存器參考實驗指導手冊

baud 爲波特率

parity 爲奇偶校驗

          0 = 無奇偶

          4= 奇校驗

5 = 偶校驗

6 = 奇偶位始終爲1

7 = 奇偶位始終爲0

stop 爲停止位

0 = 1個停止位

1 = 2個停止位

 

len 爲數據位長度

0 = 長度爲5

1 = 長度爲6

2 = 長度爲7

3 = 長度爲8

Uart_Init_Ext編碼如下:

void Uart_Init_Ext(int pclk,int baud,int parity,int stop, int len)

{

    int i;

    int p,s,l;

    if(pclk == 0)

    pclk    = PCLK;

    if(parity==0) p=0x0;

    else if(parity==4) p=0x20;

    else if(parity==5) p=0x28;

    else if(parity==6) p=0x30;

    else if(parity==7) p=0x38;

    if(stop==0) s=0x0;

    else if(stop==1) s=0x4;

    if(len==0) l=0x0;

    else if(len==1) l=0x1;

    else if(len==2) l=0x2;

    else if(len==3) l=0x3;

    

    //rULCON0 = parity*8+stop*4+len;

    rULCON0 =p+s+l;

rUCON0  = 0x245;                        

for(i=0;i<100;i++);

}

 

 

Target.c中的Uart_Init_Ext配置如下:

void Target_Init(void)

{

MMU_Init();

ChangeClockDivider(1,1);          // 1:2:4    

ChangeMPllValue(0xa1,0x3,0x1);    // FCLK=202.8MHz  

    

    Port_Init();

    Isr_Init();

Uart_Init(0,4800);

Uart_Init_Ext(0,115200,0,1,1);

//此處設置的是波特率爲115200,無奇偶校驗,兩個停止位,數據長度爲6

 

 

    Uart_Select(0);     

}

對應上面的設置,超級終端進行了組設置:

  1. 超級終端配置配置如下: 波特率爲115200,無奇偶校驗,兩個停止位

Uart_Init_Ext(0,115200,0,1,1);

  1. 超級終端配置配置如下: 波特率爲115200,奇校驗,兩個停止位

 Uart_Init_Ext(0,115200,4,1,1);

實現指定參數UART通信效果截圖如下

問題以及解決:

       在本次實驗中,我設計一個串口初始化程序 Uart_Init_Ext(int pclk,int baud,int parity,int stop, int len)放在Uart_driver.c 文件裏面,並在 Uart_driver.h中設置了函數原形,然後在TARGET.c的Target—_Init(void)中實現了調用,但發現,運行程序的時候老是在AXD中報錯,後來發現超級終端的設置要和本實驗中Uart_Init_Ext函數中設置的參數要保持一致才能通信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章