串口通讯分同步通讯和异步通讯,通常使用的都是异步串口,通讯时双方约好波特率、数据位、停止位、奇偶校验位等
常用的波特率38400、115200
起始位:空闲时,电平为高,检测到下降沿,则视为起始位,然后接收一帧数据
通常使用RS232的9针串口,其中最为重要的是2、3、5脚
2 :RXD接收数据
3 :TXD发送数据
5 :GND接地
——————/2440
引脚配置——设置数据格式(不使用校验位)——设置工作模式(OS工作于DMA或中断模式;裸机工作于查询模式)——设置波特率
串口使用PCLOCK
putc(0x0d);
putc(0x0a);
putc(‘H’);
测试②:
while(1)
getc();
常用的波特率38400、115200
起始位:空闲时,电平为高,检测到下降沿,则视为起始位,然后接收一帧数据
通常使用RS232的9针串口,其中最为重要的是2、3、5脚
2 :RXD接收数据
3 :TXD发送数据
5 :GND接地
——————/2440
引脚配置——设置数据格式(不使用校验位)——设置工作模式(OS工作于DMA或中断模式;裸机工作于查询模式)——设置波特率
串口使用PCLOCK
#define PCLK 50000000
#define BAUD 115200
void uart_init()
{
GPHCON &= ~(0xf<<4); //1.配置引脚
GPHCON |= (0xa<<4);
ULCON0 = 0b11; //2.1 设置数据格式
UCON0 = 0b0101; //2.2 设置工作模式
UBRDIV0 =(int)(PCLK/(BAUD*16)-1); //3. 设置波特率
}
void putc(unsigned char ch)
{
while (!(UTRSTAT0 & (1<<2)));
UTXH0 = ch;
}
unsigned char getc(void)
{
unsigned char ret;
while (!(UTRSTAT0 & (1<<0)));
ret = URXH0; // 取数据
if ( (ret == 0x0d) || (ret == 0x0a) ) //回车或换行
{
putc(0x0d); //回车换行
putc(0x0a);
}
else
putc(ret);
return ret;
}
测试①:
putc(0x0d);
putc(0x0a);
putc(‘H’);
测试②:
while(1)
getc();