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); ????
}
對應上面的設置,超級終端進行了組設置:
Uart_Init_Ext(0,115200,0,1,1);
?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函數中設置的參數要保持一致才能通信
總結
以上是生活随笔為你收集整理的ARM的UART实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 负载监控_php记录服务器负载、
- 下一篇: Hadoop学习之HDFS