利用WK2168实现串口服务器

ESP32 SPI与WK2168实现串口服务器

  • 概述
  • 系统组成
  • 代码

概述

一些老设备通过RS485采集数据,如果在一个系统中采用几个RS485设备可能是一个不错的选择,但要是使用46个RS485数据采集设备为一个PLC提供外部数据,系统的性能就很难有保障了。通过一个串口服务器实现看来是一个好的选择。

系统组成

一个ESP32芯片作为主控制MCU,利用其两个串口,HSPI和VSPI,VSPI接以太网芯片,HSPI接WK2168串口模块。电路图:

在这里插入图片描述

代码

代码用Arduino编写:

void setup() 
{
    commInit();       // com initialize
    gpioInit();       // GPIO initilization
    spiInit();        // inti hspi
    wk2168Init();     // initialize the wk2168 
}

  • 串口初始化
  • goio初始化
  • spi初始化
  • wk2168初识化

这里主要介绍wk2168初识化代码:

void wk2168Init()
{
    wk2168_init();      // 硬件初始化
    // 这一部分是初始化外部中断
    //读取通用寄存器
    Serial.print("wk2168 general register value = 0x");
    Serial.println(wk2168_read_g_reg(WK2XXX_GENA_REG), HEX);
    /*初始化子串口*/
    wk2168_sub_uart_init(1);
    wk2168_sub_uart_init(2);
    wk2168_sub_uart_init(3);
    wk2168_sub_uart_init(4);
    /*设置子串口波特率*/
    wk2168_set_baudrate(1, B9600);
    wk2168_set_baudrate(2, B9600);
    wk2168_set_baudrate(3, B9600);
    wk2168_set_baudrate(4, B9600);
    /*使能RS485*/
    wk2168_set_rs485(1);
    wk2168_set_rs485(2);
    wk2168_set_rs485(3);
    wk2168_set_rs485(4);
}

介绍wk2168_sub_uart_init()初识化

void wk2168_sub_uart_init(uint8_t port)
{
    uint8_t gena,grst,gier,sier,scr;
    gena = wk2168_read_g_reg(WK2XXX_GENA_REG);
    gena = gena | (1<<(port-1));
    wk2168_write_g_reg(WK2XXX_GENA_REG, gena);
    // 清零分串口
    grst = wk2168_read_g_reg(WK2XXX_GRST_REG);
    grst = grst | (1 << (port-1));
    wk2168_write_g_reg(WK2XXX_GRST_REG, grst);
    //使能串口总中断
    gier = wk2168_read_g_reg(WK2XXX_GIER_REG);
    gier = gier|(1<<(port-1));
    wk2168_write_g_reg(WK2XXX_GIER_REG, gier);
    //使能子串口接收触点中断和超时中断
    sier=wk2168_read_s_reg(port, WK2XXX_SIER_REG); 
    //sier |= WK2XXX_RFTRIG_IEN|WK2XXX_RXOUT_IEN;
    sier |= SIER_RFTRIG_IEN_BIT | SIER_RXOUT_IEN_BIT;
    wk2168_write_s_reg(port,WK2XXX_SIER_REG, sier);
    //初始化FIFO和设置固定中断触点
    wk2168_write_s_reg(port, WK2XXX_FCR_REG, 0XFF);
    //设置任意中断触点,如果下面的设置有效
    //那么上面FCR寄存器中断的固定中断触点将失效
    wk2168_write_s_reg(port, WK2XXX_SPAGE_REG, 1);
    //切换到page1, 页可以设置WK2XXX_SPAGE1
    wk2168_write_s_reg(port, WK2XXX_RFTL_REG, 40);//设置接收触点为40个字节
    wk2168_write_s_reg(port, WK2XXX_TFTL_REG, 0X10);//设置发送触点为16个字节
    wk2168_write_s_reg(port, WK2XXX_SPAGE_REG, 0);  //切换到page0
    //使能子串口的发送和接收使能
    scr=wk2168_read_s_reg(port, WK2XXX_SCR_REG);
    scr|=SCR_TXEN_BIT | SCR_RXEN_BIT;
    wk2168_write_s_reg(port, WK2XXX_SCR_REG, scr);
}

然后是设置串口波特率及设置RTS控制RS485芯片的DE/RE端。然后讲分串口1连接到ESP32的一个串口。COM2,实现通讯。分串口定时发送,返回的数据可以定长中断接收,通讯速度有保障。调试通过。串口服务器三维图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/687481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考对进入事业编的人有帮助吗?

首先肯定的说&#xff0c;软考是可以用来评职称的。 但是&#xff0c; 这取决于你所在公司的性质和工作岗位。 软考全国统一实施后&#xff0c;不再进行计算机技术与软件相应专业和级别的专业技术职务任职资格评审工作。计算机软件资格考试既是职业资格考试&#xff0c;又是…

Element - UI <el-table-column>多选数据提交后禁用已提交的多选框

1. 通过 selection-change"selectionChange" 将已选择的数据存入selectData数组中 <el-table :data"tableData" class"my-5" selection-change"selectionChange" > //多选框已选择的数据 const selectData ref([]); const sel…

品致分档高频电流探头交直流电流探头的功能和应用领域

品致分档高频电流探头可以精确测量最大直流 DC-12MHz&#xff0c;具有高带宽&#xff0c;高精度的测量特点&#xff0c;且支持量程档位切换&#xff0c;满足用户一机多用的需求。探头自带归零和消磁功能&#xff0c;在包容用户的使用环境下&#xff0c;精度也高达 1%。标准的BN…

SpringBoot集成ireport打印,并解决PDF中文显示问题

1、相关jar包引入 <!-- ireport报表相关 start--><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>4.5.1</version><exclusions><exclusion><groupId…

蚓链数字化营销生态的影响力分享!

​家人们&#xff0c;今天来给大家分享一些关于数字化平台生态化对数字营销影响的具体案例。 比如某电商平台&#xff0c;通过生态化的建设&#xff0c;实现了精准的推荐算法。根据用户的浏览历史和购买行为&#xff0c;为他们推荐最符合需求的商品&#xff0c;大大提高了购买…

toB市场 | 我们喜欢赞助这样的展会活动

过去的六一儿童节&#xff0c;刚去成都参加了个行业内的展会。受护网行动、儿童节等等的影响&#xff0c;这次去成都的客户并不算太多&#xff0c;但会议延续了一贯的高品质&#xff0c;让我们收货满满。 选择目标受众来得多的展会 不同厂商会视自己的产品和模式、目标客户来…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑发用电相似性的海上风电中长期双边协商交易优化决策模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Django 传递额外参数给视图函数

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等&#xff0c;可以从前言给出的下载信息下载&#xff0c;大家可以评估一下。 在Django框架中&#xff0c;URLconf模块还支持一种传递额外参数给视图函…

深度文章 | 管理驾驶舱成摆设?如何激活核心数据?

经营企业就跟驾驶车一样&#xff0c;小规模时像骑自行车&#xff0c;不需要仪表盘。而随着企业的成长&#xff0c;就像开摩托、汽车&#xff0c;需要仪表盘&#xff08;管理驾驶舱&#xff09;展示经营数据&#xff0c;指导管理者进行业务决策。 试想&#xff0c;领导面对一堆…

CLIP计算图片与文本相似度(多幅图片与一个文本)

一、CLIP介绍 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型是一种通过自然语言监督来学习可迁移视觉模型的方法。CLIP模型利用海量的图像和相关文本数据对图像编码器和文本编码器进行联合训练&#xff0c;目标是最大化图像和文本对的余弦相似性。…

IP纯净度对跨境电商有影响吗?

当我们谈论代理IP时&#xff0c;通常会提到一个重要概念&#xff0c;那就是“IP纯净度”。 IP纯净度是指代理IP服务中所提供的IP地址的质量、干净程度和安全性&#xff0c;纯净度高的IP地址通常具备低恶意软件攻击的风险、良好的访问效果、稳定性和速度以及隐私保护等特点。在…

TEE的密码学算法都支持哪些?你们都是如何实现的?

先说TEE OS中都支持哪些密码学算法?需要支持哪些密码学算法? 我们从GP规范的角度来看。在一般的tee中,都号称支持GP规范。GP规范里要求的强制支持的算法,一般都会实现。对于GP规范里可选的算法,并不是每一家TEE都能支持的。 强制要求的算法 可选支持的算法有 再来看TEE O…

whistle手机抓包

环境&#xff1a;whistle&#xff1a;2.9.59 whistle手机抓包&#xff08;ios可以抓小程序的包&#xff1b;安卓机不能抓小程序的包&#xff0c;但是小程序的有开发者工具就够用了&#xff09; 以安卓手机为例&#xff08;手机跟电脑要连同一个wifi&#xff09; 1.电脑安装w…

Jmeter压测 —— 1秒发送1次请求

场景&#xff1a;有时候测试场景需要设置请求频率为一秒一次&#xff08;或几秒一次&#xff09;实现方法一&#xff1a;1、首先需要在线程组下设置循环次数&#xff08;可以理解为请求的次数&#xff09; 次数设置为请求300次&#xff0c;其中线程数跟时间自行设置 2、在设置…

git 大文件上传失败 Please remove the file from history and try again.

根据提示执行命令 --- 查找到当前文件 git rev-list --objects --all | grep b24e74b34e7d482e2bc687e017c8ab28cd1d24b6git filter-branch --tree-filter rm -f 文件名 --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force

11.爬虫---BeautifulSoup安装并解析爬取数据

11.BeautifulSoup安装并解析爬取数据 1.简介2.安装3.基本使用3.1 获取第一个div标签的html代码3.2 获取第一个li标签3.3 获取第一个li标签内容3.4 返回第一个li的字典&#xff0c;里面是多个属性和值3.5 查看第一个li返回的数据类型3.6 根据属性&#xff0c;获取标签的属性值&a…

Android 安装调试 TelephonyProvider不生效

直接安装TelephonyProvider的时候&#xff0c;&#xff08;没有重启&#xff09;发现数据库没有生效。 猜测应该是原本的数据库没有删除后重建更新。 解决方法&#xff1a;杀掉phone进程 adb shell am force-stop com.android.phone 查看device进程 adb shell ps | grep <…

AI视频教程下载:用LangChain开发 ChatGPT和 LLMs 应用

在这个快速变化的人工智能时代&#xff0c;我们为您带来了一场关于语言模型和生成式人工智能的革命性课程。这不仅仅是一个课程&#xff0c;而是一次探险&#xff0c;一次深入人工智能核心的奇妙之旅。 在这里&#xff0c;您将开启一段激动人心的旅程&#xff0c;探索语言模型…

【必会面试题】JVM内存分区?垃圾回收(GC)算法?如何处理OOM?

目录 JVM分区模型GC&#xff08;垃圾回收&#xff09;算法&#xff1a;处理OOM&#xff08;Out Of Memory&#xff09;&#xff1a; JVM分区模型 JVM&#xff08;Java虚拟机&#xff09;内存划分为多个区域&#xff0c;以支持其运行时环境和对象的生命周期管理。以下是主要的内…

Linux磁盘分区(fdisk)和卷管理详解(VG-LV-PV)

先看整体图&#xff0c;再讲解概念 一、磁盘分区 一个磁盘disk可以分多个区part&#xff0c;用fdisk命令&#xff0c;举例把/dev/vdb划分为/dev/vdb1和/dev/vdb2 二、创建虚拟卷 LVM是逻辑盘卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;他是磁盘…