前言
基于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
下載鏈接:正在審核
-
單片機
+關注
關注
6037文章
44558瀏覽量
635310 -
半導體
+關注
關注
334文章
27363瀏覽量
218719 -
通信
+關注
關注
18文章
6032瀏覽量
135993 -
RX480
+關注
關注
0文章
4瀏覽量
4073 -
CW32
+關注
關注
1文章
203瀏覽量
641 -
武漢芯源
+關注
關注
1文章
66瀏覽量
255
發布評論請先 登錄
相關推薦
評論