发新帖我要提问
12
返回列表
打印
[应用相关]

STM32驱动WK2168串口扩展芯片完整教程

[复制链接]
楼主: 观海
手机看帖
扫描二维码
随时随地手机跟帖
21
观海|  楼主 | 2021-7-2 09:58 | 只看该作者 回帖奖励 |倒序浏览
/**************************wk2168_get_tx_len*******************************************/
//函数功能:获取子串口发送FIFO剩余空间长度
// port:端口号
// 返回值:发送FIFO剩余空间长度
/**************************WK_Len********************************************/
int wk2168_get_tx_len(u8 port)
{
        u8 fsr,tfcnt;
        int len=0;
        fsr  =wk2168_read_s_reg(port,WK2XXX_FSR);
        tfcnt=wk2168_read_s_reg(port,WK2XXX_TFCNT);
        if(fsr& WK2XXX_TFULL)
        {
                len=0;
        }
        else
        {
                len=256-tfcnt;
        }
        return len;
}



使用特权

评论回复
22
观海|  楼主 | 2021-7-2 09:59 | 只看该作者
/**************************wk2168_send_data*******************************************/
//函数功能:通过子串口发送固定长度数据
// port:端口号
// len:单次发送长度不超过256
//
/**************************wk2168_send_data********************************************/
int wk2168_send_data(u8 port,int len,u8 *sendbuf)
{
       
#if 1
        wk2168_write_s_fifo(port,sendbuf,len);//通过fifo方式发送数据
#else
        int num=len;
        for(num=0;num<len;num++)
        {
                wk2168_write_s_reg(port,WK2XXX_FDAT,*(sendbuf+num));
        }
#endif       
        return 0;
}


使用特权

评论回复
23
观海|  楼主 | 2021-7-2 10:00 | 只看该作者
/**************************wk2168_rec_data*******************************************/
//函数功能:读取子串口fifo中的数据
// port:端口号
// recbuf:接收到的数据
// 返回值:接收数据的长度
/**************************wk2168_rec_data********************************************/
int wk2168_rec_data(u8 port,u8 *recbuf)
{
        u8  fsr=0,rfcnt=0,rfcnt2=0,sifr=0;
        int len=0;
        sifr=wk2168_read_s_reg(port,WK2XXX_SIFR);
       

        if((sifr&WK2XXX_RFTRIG_INT)||(sifr&WK2XXX_RXOVT_INT))//有接收中断和接收超时中断
        {
                fsr  =wk2168_read_s_reg(port,WK2XXX_FSR);
                rfcnt=wk2168_read_s_reg(port,WK2XXX_RFCNT);
                rfcnt2=wk2168_read_s_reg(port,WK2XXX_RFCNT);
                //printf("rfcnt=0x%x.\n",rfcnt);
                /*判断fifo中数据个数*/
                if(fsr& WK2XXX_RDAT)
                {
                        if(!(rfcnt2>=rfcnt))
                        {
                                rfcnt=rfcnt2;
                        }
                        len=(rfcnt==0)?256:rfcnt;
                }
#if 1
                wk2168_read_s_fifo(port,recbuf,len);
#else
                for(n=0;n<len;n++)
                 *(recbuf+n)=wk2168_read_s_reg(port,WK2XXX_FDAT);
#endif       
                return len;
        }
        else
        {
                len=0;
                return len;
        }
}


使用特权

评论回复
24
观海|  楼主 | 2021-7-2 10:36 | 只看该作者
/**************************wk2168_set_rs485*******************************************************/
//函数功能:设置子串口RS485的收发转换函数,使用RTS引脚控制485电平转换芯片的收发
// port:子串口号
//
//注意:只有WK2168/WK2204支持该功能
/**************************wk2168_set_rs485*******************************************************/
void wk2168_set_rs485(u8 port)
{   
        wk2168_write_s_reg(port,WK2XXX_RS485,0x02);//
        //wk2168_write_s_reg(port,WK2XXX_RS485,0x03);//
        wk2168_write_s_reg(port,WK2XXX_SPAGE,1);//切换到page1
        wk2168_write_s_reg(port,WK2XXX_RTSDLY,0x01);
        wk2168_write_s_reg(port,WK2XXX_SPAGE,0);//切换到page0
}


使用特权

评论回复
25
观海|  楼主 | 2021-7-2 10:37 | 只看该作者
/**************************wk2168_rts_cts*******************************************************/
//函数功能:硬件自动流量控制,需要子设备的支持
// port:子串口号
//
//注意:只有WK2168/WK2204支持该功能
/**************************wk2168_rts_cts*******************************************************/
void wk2168_rts_cts(u8 port)
{   
        wk2168_write_s_reg(port,WK2XXX_FWCR,0x30);//
        wk2168_write_s_reg(port,WK2XXX_SPAGE,1);//切换到page1
        wk2168_write_s_reg(port,WK2XXX_FWTH,0XF0);//停止接收触点
        wk2168_write_s_reg(port,WK2XXX_FWTL,0X20);//继续接收触点
        wk2168_write_s_reg(port,WK2XXX_SPAGE,0);//切换到page0
}



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则