WHAT IS UART
全称为Universal Asynchronous Receiver and Transmitter,即异步发送与接收(传输器协议)
使用rs232物理层(接口标准)来通信
用途
- 打印调试信息
- 外接GPS/蓝牙等各种模块
特点
- 三根线(发送,接收,地线) TXD->RXD RXD<-TXD GND-GND
- 全双工
- 异步通信
- 速度较慢
- 设备-设备 long distance(10m)
串口参数
- 波特率:发送和接收一个bit都有固定的宽度—9600bps 19200bps 38400bps 57600bps 115200bps。
- 起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。
- 数据位:可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输。
- 校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。
- 停止位:它是一个字符数据的结束标志。
HOW TO WORK
发送数据之前,双方先约定好波特率,然后规定传输协议
- 设备原为高电平,chip拉低电平,保持1bit的时间
- PC在低电平开始处计时
- chip根据数据依次驱动TxD的电平,同时PC依次读取RxD引脚电平,获得数据
HOW TO PROGRAM
以ARM9-S3C2440为例,在uart.c这个文件里需要编写这样几个函数:
uart0_init() // 用于初始化串口
putchar() // 用于发送一个字符
getchar() // 用于接收一个字符
puts() // 用于发送一串字符
初始化代码 uart0_init()
- 设置引脚用于串口:根据原理图和参考手册设置
- 设置波特率
- 设置数据格式
编写putchar(),getchar(),puts(),main()
/× uart.c main() demo ×/ #include "s3c2440_soc.h" #include "uart.h" int main(void) { unsigned char c; uart0_init(); puts("Hello, world!\n\r"); while(1) { c = getchar(); if (c == '\r') { putchar('\n'); } if (c == '\n') { putchar('\r'); } putchar(c); } return 0; }