一片WK2114有四路串口,编号分别为0,1,2,3
0---1#串口
1----2#串口
2-----3#串口
3-----4#串口
下面是四个串口全部初始化程序
//wk2114 主串口波特率 自适应
void wk2114_Port_bd(void)
{
u8 t=0x55;
send1_buff(&t,1);
}
void wk2114_ini(void)
{
u8 t;
t=0x00; //00=GENA全局控制寄存器地址
send1_buff(&t, 1);
t=0x0f; //写入数据
send1_buff(&t, 1); //启动串口1,串口2,串口3,串口4时钟
Delay(10); //延时10mS
t=0x01; //01=GRST寄存器地址
send1_buff(&t, 1); //串口复位
t=0x0f; //串口1,串口2,串口3,串口4复位
send1_buff(&t, 1);
Delay(10); //延时10mS
}
// WK2114 芯片寄存器 初始化 line=0,1,2,3
//0=串口0
//1=串口1
//2=串口2
//3=串口3
void wk2114_init(u8 line)
{
u8 t;
t=0x03|line<<4; //03=SPACE页控制寄存器地址
send1_buff(&t, 1);
t=0x01; //切换WK2114寄存器page=1,第一页
send1_buff(&t, 1);
Delay(10); //延时10mS
t=0x05|line<<4; //波特率配置寄存器低字节
send1_buff(&t, 1);
t=0x2f; //波特率=9600,偶校验
send1_buff(&t, 1);
Delay(10);
t=0x03|line<<4; //03=SPACE页寄存器地址
send1_buff(&t, 1);
t=0x00; //切换WK2114寄存器page=0
send1_buff(&t, 1);
Delay(10);
t=0x04|line<<4; //SCR子串口控制寄存器,收发使能
send1_buff(&t, 1);
t=0x03; //fifo_0,1,2,3
send1_buff(&t, 1);
Delay(10);
t=0x05|line<<4; //LCR子串口配置寄存器,偶校验
send1_buff(&t, 1);
t=0x0C; //fifo_0,1,2,3
send1_buff(&t, 1);
Delay(10);
t=0x06|line<<4; //FCR子串口FIFO控制寄存器,收发使能
send1_buff(&t, 1);
t=0x0C; //fifo_0,1,2,3
send1_buff(&t, 1);
Delay(10);
}
//WK2114发送一个字节
//line=0,1,2,3,串口号
void wk2114_send_byte(u8 line,u8 data)
{
u8 t;
t=0x80|line<<4; //FIFO_0 ,8=write,0=串口1,0=1字节长度
send1_buff(&t, 1); //fifo_0 发送单字节=data
send1_buff(&data, 1);
}
//WK2114发送n个字节,n<=16
//line=0,1,2,3,串口号
//p=待发送数据指针
void wk2114_send_nbyte(u8 line,u8 *p,u8 n)
{
u8 t;
n--;
t=0x80|line<<4|n; //8=write,串口号,n=字节长度
send1_buff(&t, 1);
n++;
while(n--) //发送n字节
send1_buff(p++, 1);
}
//返回收到的数据个数,line=0,1,2,3
//line=0,1,2,3,串口号
u8 wk2114_recived(u8 line)
{
u8 m,t;
rx1_n=0;
rx1_data[0]=0;
t=0x4A|line<<4; //读FIFO数据个数,存储在rx1_data[0]中
send1_buff(&t, 1);
Delay(1); //延时1mS
if(rx1_data[0]) //如果接收数据个数>0
{
rx1_n=0;
m=rx1_data[0];
t=0xC0|rx1_data[0]|line<<4; //多字节读取,必须 rx1_data[0]<=16字节
send1_buff(&t, 1); //开始启动读取数据
Delay(10); //延时10mS ,读出数据放在rx1_data[n]中
return m; //接收个数=m
}
else
return 0;
}
下面是主函数MAIN()
u8 rx1_data[255]={0};
int main(void)
{
u8 m;
u8 datatemp[20];
uart1_init(38400);
wk2114_Port_bd(); //设置WK2114自适应波特率38400
Delay(10); //延时10mS
wk2114_ini();
wk2114_init(0); //初始化串口0
Delay(10); //延时10mS
wk2114_init(1); //初始化串口1
Delay(10); //延时10mS
wk2114_init(2); //初始化串口2
Delay(10); //延时10mS
wk2114_init(3); //初始化串口3
Delay(10); //延时10mS
while(1)
{
wk2114_send_byte(2,datatemp[0]); //2#串口发送单字节
wk2114_send_byte(2,datatemp[1]);
wk2114_send_byte(2,datatemp[2]);
wk2114_send_byte(2,datatemp[3]);
wk2114_send_byte(2,datatemp[4]);
wk2114_send_byte(2,datatemp[5]);
wk2114_send_byte(2,datatemp[6]);
wk2114_send_byte(2,datatemp[7]);
wk2114_send_nbyte(2,data,6);
m=wk2114_recived(3); //3#串口查询,
if(m)
wk2114_send_nbyte(3,rx1_data,4); //3#串口发送4个数据
GPIOB->ODR^=GPIO_Pin_3; //RUN-led指示灯
Delay(500); //延时500mS
}
}