串口的作用
- 打印调试信息
- 外接各种模块(GPS、蓝牙)
特点:结构简单可靠 只需要三根线就可以完成ARM开发板和PC机之间的内容传输。 TxD:发送 RxD:接收 Gnd:地线
怎么发送1byte字母’A’给PC机 3. 双方约定每一位(bit)发送所占用的时间,称为波特率 4. ARM开发板把原来高电平的TxD线拉低,报纸1bit时间,称为开始位(start bit) 5. PC机在低电平开始处计时 6. ARM根据要发送的数据驱动电平,逐位发送,TxD=Data[0],TxD = Data[1]…… 7. PC机在数据位的中间读取引脚状态 8. 发送校验位(可选) 9. 发送一个高电平(双方约定高电平维持时间),称为结束位(stop bit) 10. TTL/COMS逻辑电平下,使用0V作为逻辑0,0~5V作为逻辑1(不适合长距离传输) 11. RS-232逻辑电平下,负电压作为逻辑0,正电压作为逻辑1(适合长距离传输)
ARM开发板使用的是TTL电平,PC机使用的是RS-232电平。中间要引入一个电平转换芯片,现在PC机很多都没有串口了,所以引入了USB转串口芯片。
S3C2440的串口模块框图
- ULCONn指定传输的数据帧,它由一个起始位、5到8个数据位、一个可选奇偶校验位和1到2个停止位组成。
- 发射机还可以产生中断条件,这迫使串行输出在一帧传输时间内处于逻辑0状态。在当前发送字被完全发送之后,该块发送中断信号。
- 在中断信号传输后,它将数据连续传输到Tx FIFO种(FIFO模式)或者Tx保持寄存器(非FIFO模式下)。
编程
- 设置引脚用于串口(GPH2),设置内部上拉,输出引脚时刻保持高电平
- 设置波特率**UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1 **
- 设置数据格式
- 发送(putchar)
相关寄存器
(1)串口格式控制寄存器(设置串口输出接收数据帧的格式) (2)串口控制寄存器(选择串口的时钟源,时钟频率,中断) (3)FIFO控制寄存器 uart.c
#include "s3c2440_soc.h"
void uart0_init()
{
GPHCON &= ~((3<<4) | (3<<6));
GPHCON |= ((2<<4) | (2<<6));
GPHUP &= ~((1<<2) | (1<<3));
UCON0 = 0x00000005;
UBRDIV0 = 26;
ULCON0 = 0x00000003;
}
int putchar(int c)
{
while (!(UTRSTAT0 & (1<<2)));
UTXH0 = (unsigned char)c;
}
int getchar(void)
{
while (!(UTRSTAT0 & (1<<0)));
return URXH0;
}
int puts(const char *s)
{
while (*s)
{
putchar(*s);
s++;
}
uart.h
#ifndef _UART_H
#define _UART_H
void uart0_init();
int putchar(int c);
int getchar(void);
int puts(const char *s);
#endif
main.c
#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;
}
|