串口:
作用:【1:打印調試信息 2:外接GPS,藍牙等各種模塊】
1:TTL/CMOS邏輯電平下5v對應邏輯‘1’,0v對應邏輯‘0’。在空閑時TX RX 保持高電平。
2:RS--232邏輯電平,通常情況下ARM芯片串口輸出為TTL電平,需要通過電平轉換芯片才能夠將TTL電平轉換成232電平。
串口發送需要滿足一下幾點:
發送,接收雙方約定好1:波特率: 2:雙方約定好數據格式【數據位,停止位,校驗位,流控】
串口如何發送1Byte數據比如:‘A’
'A' 0X41 ,01000001
1:雙方約定好波特率【比如都是 115200】
2:數據格式保持統一
3:原來數據線上是高電平ARM將數據線拉低并保持1BIT時間。
4:PC在低電平開始處進行計時。
5:ARM根據數據驅動TXD線上的電平變換依次發送出數據。
6:PC在數據位的中間讀取引腳的狀態
S3C2440串口學習總結:
學習嵌入式代碼應該來源與手冊,用手冊和C語言基礎來寫出程序。
首先來初始化串口:根據上述知識想要正常的使用串口,需要配置引腳復用為串口,設置設備波特率,設置數據格式。
1:配置設備IO口為串口功能:
GPHCON配置寄存器:
通過配置GPHCON寄存器中的【7:6】【5:4】這四位可以將GPH2 GPH3設置成TXD0 和RXD0.
代碼:
GPHCON &=~((3<<4)|(3<<6));//首先在保證其他位不變的情況下將4 5 6 7位清0
GPHCON |=~((2<<4)|(2<<6));//配置
串口在空閑狀態時TXD0應該處于高電平,所以應該應該設置GPH2內部上拉。
代碼:
GPHUP &=~((1<<2)|(1<<3));//使能內部上拉 詳細可查看串口時序要求
2:設置波特率
代碼:
/*
UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
UART clock=50M
UBRDIVn = (int)( 50000000/ (115200 x 16) ) –1 UBRDIVn=26//存在誤差這點算出來的值可以進行四舍五入
*/
UCON=0X00000005;/*PCLK,中斷/查詢模式*/
UBRDIV0=26;
3:設置數據格式
代碼:
ULCON0=0X00000003;
通過配置這幾個寄存器設備的串口就可以正常使用了。
4:串口發送一個字節數據
在串口發送一字節數據之前要確保UTX0寄存器中數據已經發送完成,通過檢查UTRSTAT0寄存器中的第二位就可以知道數據是否發送完成。當沒有發送完成時該位為1。通過代碼while(!(UTRSTAT0 &(1<<2));便可以判斷前一個數據是否發送完成。
代碼:
int putchar(int c)
{
/*
UTRSTAT0 UART channel 0 Tx/Rx status register
1 = Transmitter (transmit buffer & shifter register) empty
*/
while(!(UTRSTAT0 &(1<<2));//判斷前一個數據是否發送完成
/*UTXH0*/
UTXH0=(unsigned char)c;
}
4:串口接收一字節數據
代碼:
int puts(const char *s)
{
while(*s!=' 主站蜘蛛池模板: 巴中市| 泽库县| 南康市| 罗山县| 邹平县| 元江| 汤原县| 京山县| 会理县| 郎溪县| 宁阳县| 罗江县| 济源市| 双辽市| 林西县| 马龙县| 社旗县| 万荣县| 汉川市| 长泰县| 乌拉特中旗| 威宁| 刚察县| 景洪市| 徐闻县| 永修县| 阿拉善右旗| 津南区| 沐川县| 兰溪市| 新疆| 平遥县| 中卫市| 五华县| 友谊县| 勐海县| 大庆市| 上林县| 翁牛特旗| 峨眉山市| 浦城县|