串口通讯,分为同步通讯和异步通讯,通常使用的都是异步串口。通讯时,双方先约定好数据帧的格式,即波特率,数据位,停止位,奇偶校验位等。

串口控制台

波特率:表示没秒钟传输的bit个数。如:300波特表示每秒钟发送300个bit。
起始位:当线路空闲时候,电平为高。一旦检测到一个下降沿,则视为一个起始位。然后接收方按照约定好的格式,接收这一帧数据。
数据位:一帧中实际有效数据的位数。
停止位:表示这帧数据的结束。
校验位:用于检测数据传输是否正确的位

硬件引脚:(RS232,9帧串口)

2 :RXD:接收数据;3 :TXD:发送数据;5 :GND:接地

串口控制台

2.串口初始化

2.1 引脚说明

串口控制台

2.2 初始化步骤

2.2.1 配置引脚功能

串口控制台

2.2.2 设置数据格式

串口控制台

2.2.3 设置工作模式

串口控制台

 

串口控制台

2.3.4 FIFO ENABLE

串口控制台

串口控制台

2.2.5 设置波特率

串口控制台

 串口控制台

 串口控制台

3.串口收发

 串口控制台

 串口控制台

串口控制台

 4.代码

nand.c

 1 #define ULCON0     (*((volatile unsigned long *)0x7F005000))
 2 #define UCON0      (*((volatile unsigned long *)0x7F005004))
 3 #define UFCON0     (*((volatile unsigned long *)0x7F005008))
 4 #define UMCON0     (*((volatile unsigned long *)0x7F00500C))
 5 #define UTRSTAT0   (*((volatile unsigned long *)0x7F005010))
 6 #define UFSTAT0    (*((volatile unsigned long *)0x7F005018))
 7 #define UTXH0      (*((volatile unsigned char *)0x7F005020))
 8 #define URXH0      (*((volatile unsigned char *)0x7F005024))
 9 #define UBRDIV0    (*((volatile unsigned short *)0x7F005028))
10 #define UDIVSLOT0  (*((volatile unsigned short *)0x7F00502C))
11 
12 #define GPACON     (*((volatile unsigned long *)0x7F008000))
13 
14 #define PCLK 66500000
15 #define BOUD 115200
16 
17 void uart_init(void)
18 {
19     GPACON &= ~0xff;
20     GPACON |= 0x22;
21     
22     /* ULCON0 */
23     ULCON0 = 0x3;  /* 数据位:8, 无较验, 停止位: 1, 8n1 */
24     UCON0  = 0x5;  /* 使能UART发送、接收 */
25     UFCON0 = 0x01; /* FIFO ENABLE */
26 
27     UMCON0 = 0;
28     
29     /* 波特率 */
30     /* DIV_VAL = (PCLK / (bps x 16 ) ) - 1 
31      * bps = 115200
32      * DIV_VAL = (66000000 / (115200 x 16 ) ) - 1 
33      *         = 35.08
34      */
35     UBRDIV0 = (int)(PCLK/(BOUD*16)-1);
36 
37     /* x/16 = 0.08
38      * x = 1
39      */
40     UDIVSLOT0 = 0x1;
41     
42 }
43 
44 void putc(unsigned char c)
45 {
46     while (UFSTAT0 & (1<<14)); /* 如果TX FIFO满,等待 */
47     UTXH0 = c;                         /* 写数据 */
48 }
49 
50 
51 unsigned char getc(void)
52 {
53     unsigned char ret;
54     while ((UFSTAT0 & 0x7f) == 0);  /* 如果RX FIFO空,等待 */
55     ret = URXH0;                   /* 取数据 */
56     if((ret == 0x0d) || (ret == 0x0a))
57     {
58         putc(0x0d);
59         putc(0x0a);
60     }
61     else
62     {
63         putc(ret);
64     }
65 
66     return ret;
67 }
68 
69 
70 void uart_send_string(char *str)
71 {
72     while(*str)
73     {
74         putc(*str++);    
75     }
76     putc(0x0d);
77     putc(0x0a);    
78 }
View Code

相关文章: