串口:
作用:【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!='