【CW32通信课程实验板】CW32开发者扶持计划

电子说

1.2w人已加入

描述

前言

  • 本项目为立创EDA与芯源半导体合作发起的开发者扶持计划
  • 感谢来自CW32生态社区的技术支持
  • 支持国产!!!

基于cw32实现的多机通信

针对于复杂的通信环境,设计一款用于多机互联的通信系统。

本系统采用CW32F030C8T6作为主控芯片

小板独立引出了IIC,SPI,另外接了一个USB转串口的CH340模块,以及一个RS485通信模块。

一个好看的最小系统板

整体的电路设计

该小板主要用于通信课程的课程设计,因此对所有管脚做了引出,对于几种常用的通信功能引脚都将该脚的接口按照习惯的顺序单独排列在了板子的周围

对于oled

对于板子上方的 IIC 接口可用于通信测试,也可用 OLED 屏幕的接口,该接口共有8ping ,顺序按照商家销售的小屏幕进行了排列

(4接口与8接口)

通信

需要注意的是在使用八接口时需要将板子背面的控制线焊接 ,在使用4线就能完成时,其他端口均可以当成正常端口输出

通信

对于RS485

本次设计采用的MAX1348通信芯片,该款芯片拥有两个版本对于 E 版可实现500kb/s的无差错通信,并且使用这种差分通信方式,在多机互接时只需要两个根线就可以实现消息的收发,更多关于RS485

同样对于该接口,在不使用时可不对连接处进行焊接 t1与t2

对于该接口焊接时,温度200最为合适

通信

通信方案

基于modbus的思想,将一段信息分为了 起始,地址区,指令区,数据区,校验区,停止符

通信

该段信息表示:起始符为 @,地址是 001,指令为 110,需要接收到的数据位65533,crc校验码 3CFC,并且附带了一个回车符但他是隐藏的,在这段数据中我为每段区域添加了一个 # 用于区分,在实际应用时去掉 # 判断,改为数据位判断一样可以实现

通信

代码实现

数据处理

在使用串口发送文本数据时,发出的是ascll编码表的十进制数,进入单片机后会存储为十六进制数,我们需要根据各区域数据的用途,在提取数据时做出不同存储类型,如在提取编号时将编号存储为字符型可为我们提供更丰富编号选择 :A001;

通信

crc校验

这是一个用于crc校验的计算器用于验证:crc校验计算机

这个是部分的通信协议参考的crc模型,其中:

WIDTH:宽度,即生成的CRC数据位宽(0000/0000 0000/0000 0...)

POLY:十六进制多项式(可以看到在各各模型中均有对应的多项式;如modbus模型,数据第16 15 2 1 这几个位为‘1’,再转换为十六进制),要注意的是省略了最高位

通信

INIT:CRC初始值,和WIDTH位宽一致

XOROUT:计算结果与此参数进行异或运算后得到最终的CRC值

REFIN:true或false,在进行计算之前,原始数据是否翻转(要注意的是翻转是是按位翻转的,如:0011 == 1100)

REFOUT:true或false,运算完成之后,得到的CRC值是否进行翻转(同上)

通信

CW32f030自带了crc校验以及相应的模型,因此我们无须具体的去写完一个校验,学会调用即可,且硬件自带的crc校验运行速度是要快于软件实现的,调用方法参考:cw32官方程序移植参考

调试

通信

点击这个地方可以进入调试模式

通信

在这里可以添加一个变量观察窗口

通信

将变量复制进串口,就可实时看到crc校验后的结果了

串口默认配置

通信

需要注意的是在我写的代码里,数据停止位是换行 ,即需要在最后一个 # 后面按一次 enter 键

我在cw32里移植了一个RTOS,不使用可以直接删除,只用在了main.c函数中,移植过程:cw32的RTOS移植

PCB板上方空余了两角空间可放置自己需要的通信模块

通信

背面焊接点按键示意

通信

4.14验证不同电源之间通信

通信

4.15 发送抢占

导图

通信

代码实现

通信

更多功能还在完善中

预计完善 发送抢占 碰撞检测

原理图

通信

PCB

通信

下载链接:正在审核

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分