找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2504|回复: 4
收起左侧

WK2124串口扩展芯片资料 STM32程序demo等资料

[复制链接]
ID:69057 发表于 2021-9-8 10:41 | 显示全部楼层 |阅读模式
       WK2124是成都为开微生产的SPI扩4路UART的芯片,主接口SPI支持10波特率,有4个独立的子串口,每个独立的子串口都有256个字节的发送FIFO、接收FIFO,特别适合于需要多个串口主机设备。资料里有数据手册、原理图、MCU驱动、Linux下驱动等。

  1.产品概述
       WK2124是SPITM接口的4通道UART器件,WK2124实现SPI桥接/扩展4个增强功能串口(UART)的功能。
     扩展的子通道的UART具备如下功能特点:
     每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。
     每个子通道可以独立设置工作在IrDA红外通信。
     每个子通道具备收/发独立的256 BYTE FIFO,FIFO的中断可按用户需求进行编程触发点。
     WK2124采用SSOP20绿色环保的无铅封装,可以工作在2.5~5.0V的宽工作电压范围,具备可配置自动休眠/唤醒功能。
[注]:SPITM 为MOTOLORA公司的注册商标。
  2.基本特性
  2.1 总体特性

    低功耗设计,可以配置自动休眠,自动唤醒模式(uS 级唤醒)
    超大硬件收发缓存,支持256级FIFO
    宽工作电压设计,工作电压为2.5V~5.0V
    精简的配置寄存器和控制字,操作简单可靠
    提供工业级
    高速CMOS工艺,子串口速率最高可达2Mbps@5V、1.5Mbps@3.3V、1Mbps@2.5V
    采用符合绿色环保政策的SSOP20无铅封装

  2.2 扩展子通道UART特性

    子通道串口独立配置,高速、灵活:

     每个子串口为全双工,每个子串口可以通过软件开启/关闭
     波特率可以独立设置,子串口最高可以达到2Mbit/s
     每个子串口字符格式包括数据长度、停止位数、奇偶校验模式可以独立设置
     完善的子串口状态查询功能
     可以实现对单个子串口软件复位

    FIFO功能:

    每个子串口具备独立的256级发送FIFO,发送FIFO触发点可按用户需求进行编程
    每个子串口具备独立的256接收FIFO,接收FIFO触发点可按用户需求进行编程
    软件FIFO使能和清空
    FIFO状态和计数器输出

    错误检测:

    支持奇偶校验错,数据帧错误、溢出错误及Line-Break错误检测
    支持起始位错误检测   

    中断特点:

     具备子串口接收FIFO超时中断
     支持Line-Break错误中断

    内置符合SIR标准的IrDA红外收发编解码器,传输速度可达115.2K bit/s

  2.3 SPI主接口特性

    最高速度10M bit/s
    仅支持SPI从模式
    SPI模式0
    支持最长256字节连续收发

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "wk2xxx.h"
  6. #include "wk2xxx_test.h"
  7. #include "spi.h"
  8. #include "exti.h"
  9. /*
  10. 目前stm32和WK2XXX 硬件连接关系
  11. 复位RST:PB8
  12. cs:PA4
  13. clk:PA5
  14. mosi:PA7
  15. miso:PA6
  16. */

  17. void EXTI1_IRQHandler(void)
  18. {
  19.          u8 gifr,rxbuf[256];
  20.          int rxlen;
  21.   printf("IN EXTI2_IRQ!!!!\n");
  22.         /*关闭LED灯*/
  23.         LED1(LED_OFF);
  24.         LED2(LED_OFF);
  25.         LED3(LED_OFF);
  26.         LED4(LED_OFF);

  27.         if(EXTI_GetFlagStatus(EXTI_Line1)!= RESET)
  28.         {           EXTI_ClearITPendingBit(EXTI_Line1); //清除LINE1上的中断标志位  
  29.                         gifr=WkReadGReg(WK2XXX_GIFR);/**/
  30.                 do{
  31.                         if(gifr&WK2XXX_UT1INT)//判断子串口1是否有中断
  32.                         { /*数据处理*/
  33.                                                 /*数据接收*/
  34.                                                 rxlen=wk_RxChars(1,rxbuf);//一次接收的数据不会超过256Byte
  35.                                                 /*数据发送*/
  36.                                                 //把接收的数据发送出去
  37.                                                 wk_TxChars(1,rxlen,rxbuf);

  38.                         }
  39.                        
  40.                         if(gifr&WK2XXX_UT2INT)//判断子串口2是否有中断
  41.                         {
  42.                                 /*数据接收*/
  43.                                                 rxlen=wk_RxChars(2,rxbuf);//一次接收的数据不会超过256Byte
  44.                                                 /*数据发送*/
  45.                                                 //把接收的数据发送出去
  46.                                                 wk_TxChars(2,rxlen,rxbuf);
  47.                        
  48.                           }
  49.                         if(gifr&WK2XXX_UT3INT)//判断子串口3是否有中断
  50.                         {
  51.                                 /*数据接收*/
  52.                                                 rxlen=wk_RxChars(3,rxbuf);//一次接收的数据不会超过256Byte
  53.                                                 /*数据发送*/
  54.                                                 //把接收的数据发送出去
  55.                                                 wk_TxChars(3,rxlen,rxbuf);
  56.                                    // printf("port!!!!\n");
  57.                         }
  58.                         if(gifr&WK2XXX_UT4INT)//判断子串口4是否有中断
  59.                         {
  60.                                 /*数据接收*/
  61.                                                 rxlen=wk_RxChars(4,rxbuf);//一次接收的数据不会超过256Byte
  62.                                                 /*数据发送*/
  63.                                                 //把接收的数据发送出去
  64.                                    //wk_TxChars(4,rxlen,rxbuf);
  65.                         }
  66.                        
  67.                 gifr=WkReadGReg(WK2XXX_GIFR);
  68.                 //printf("IN EXTI2_IRQ GIFR:0X%X !!!\n",gifr);
  69.                 }while(gifr&0x0f);
  70.                 printf("IN EXTI2_IRQ over! !!!\n");
  71.         }
  72. }
  73. int main(void)
  74. {       
  75.          
  76.         //wk2xxx相关定义
  77.   unsigned char dat1,sendbuf[256]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x12};
  78.         int len,scr;
  79.   LED_Init();
  80.         delay_init();                     //延时函数初始化       
  81.         NVIC_Configuration();// 设置中断优先级分组
  82.         uart_init(115200);         //串口初始化为115200
  83.   WK_SPI_Init();//初始化SPI总线
  84.         /*读写GNEA,测试主接口通信是否成功*/
  85.         dat1=WkReadGReg(WK2XXX_GENA);
  86.         printf("gena=0x%x.\n",dat1);

  87.         /*硬件复位芯片*/
  88.         WK_RstInit();
  89.         /*初始化子串口*/
  90.         Wk_Init(1);
  91.         Wk_Init(2);
  92.         Wk_Init(3);
  93.         Wk_Init(4);
  94.         /*设置子串口波特率*/
  95.         Wk_SetBaud(1,115200);
  96.         Wk_SetBaud(2,115200);
  97.         Wk_SetBaud(3,115200);
  98.         Wk_SetBaud(4,115200);
  99.         /*使能485*/
  100.         //WK_RS485(1);
  101.         //WK_RS485(2);
  102.         //WK_RS485(3);
  103.         //WK_RS485(4);
  104.         EXTIX_Init();//初始化CPU外部中断
  105. while(1)
  106. { /*打开LED*/
  107.         LED1(LED_ON);
  108.         LED2(LED_ON);
  109.         LED3(LED_ON);
  110.         LED4(LED_ON);
  111.         delay_ms(10);

  112. Exti_Disable();/*关闭外部中断响应*/
  113. /*中断屏蔽区,这样可以防止中断响应打乱spi的操作时序*/
  114. /*通常在中断函数外部操作读写寄存器的时候,最好关断中断响应,但是这个时间也不要过长,过长导致子串口溢出,从而导致数据丢失*/
  115. /*如果对于大数据需要发送,一次操作不要超过256,最好不要让程序阻塞在发送中*/
  116. //len=wk_TxLen(4);/*判断子串口4能写入数据的个数*/
  117. //wk_TxChars(4,len,sendbuf);/*写入len个数据进入发送fifo*/
  118.         WkWriteSFifo(4,sendbuf,10);
  119. Exti_Enable();/*开启外部中断响应*/
  120. }

  121. }
复制代码
51hei.png
所有资料51hei附件下载:
WK2124 Resources V1.1.7z (3.76 MB, 下载次数: 43)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:169559 发表于 2021-9-8 16:47 | 显示全部楼层
如何申请2片样片试试啊?
回复

使用道具 举报

ID:65369 发表于 2022-5-31 09:59 | 显示全部楼层
官方提供的例子啊
回复

使用道具 举报

ID:142059 发表于 2022-6-3 14:12 | 显示全部楼层
cmyldd 发表于 2022-5-31 09:59
官方提供的例子啊

http://www.51hei.com/bbs/dpj-220195-1.html这是我参考官例改的测试过的
回复

使用道具 举报

ID:466702 发表于 2022-6-12 10:40 | 显示全部楼层
楼上代码测试有效,读全局寄存器是0x34,谢谢。能不能放个中断的代码出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表