在STM32上对EV1527等无线编码格式的C程序编码实现
測調(diào) 西安.老雷子 2020年6月1日
軟件平臺 WINDOWS Keil uVision,STM32 ST-LINK
硬件平臺 STM32S108C8B6 通用32開發(fā)板調(diào)試
發(fā)射端: 蜂鳥遠(yuǎn)T1 輸入需要用MCU進(jìn)行編碼,利于指定編碼
接收端: 蜂鳥靈R1 輸出有五種模式,其中模式5就是串口直接輸出編碼的
編碼模式 EV1527
一、 系統(tǒng)調(diào)試硬件結(jié)構(gòu)說明
發(fā)射端硬件示意圖 接收端硬件示意圖
二、 如何對位進(jìn)行編碼
先簡單了解一下編碼中如何把二進(jìn)制體現(xiàn)出來,如下圖,芯片本身調(diào)制解調(diào)不是調(diào)整頻率而是采用調(diào)幅模式,換句話說,用發(fā)射和不發(fā)射的時長和間隔來體現(xiàn)是邏輯1還是邏輯0;如下,看懂這個邏輯關(guān)系也就注意到了后面發(fā)射的時候怎么編1的碼,怎么編0的碼了。
上面的對于1位的編碼按照從高位到低位順序連接起來,再在開始加上一個同步碼就完成了一個字節(jié)的傳輸,實(shí)現(xiàn)起來還是很方便的。
發(fā)射一個字節(jié)流程如下:
1、 發(fā)射同步:邏輯1持續(xù)1T然后邏輯0持續(xù)3T
2、 順序發(fā)射bit7、bit6、bit5、bit4、bit3、bit2、bit1、bit0(邏輯0和1按照上面規(guī)則)
三、 如何對一個發(fā)射碼進(jìn)行編碼?
對于一個發(fā)射碼而言,按照EV1527的編碼規(guī)范,發(fā)送/接收的碼總共應(yīng)該是8個字節(jié),而這八個字節(jié),并不是將上面單一字節(jié)內(nèi)容直接拼接完成的。
例如編碼“80A7E40B”
字節(jié) 0x80 0xA7 0xE4 0x0B
順序 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8
Bit數(shù) 4 4 4 4 4 4 4 4
值 8 0 A 7 E 4 0 B
上面4個字節(jié),每個字節(jié)8位。但需要注意的是藍(lán)色部分(Z1Z5)是遙控器對碼時候用的內(nèi)部編碼(對于遠(yuǎn)R1自學(xué)習(xí)過程而言),總共2^20個也就是編碼規(guī)范中常說的百萬編碼,以此確保不會串碼;黃色部分(Z6)只有半個字節(jié),但這4位才對應(yīng)實(shí)際按鍵編碼,這個四位鍵盤編碼在標(biāo)準(zhǔn)用法中只有四個值(1,2,4,8),也可以擴(kuò)展直接用115(0x01~0x0F)。綠色部分的字節(jié)在發(fā)射編碼的時候可以忽略不處理(芯片自己會生成一個校驗(yàn)碼加上去的)
如果要完成80A7E40B代碼的發(fā)射,流程如下:
1、 準(zhǔn)備一個緩沖區(qū)unsigned char Ask_send_buf[12]
2、 Ask_send_buf[0]=0x80;Ask_send_buf[1]=0xA7;Ask_send_buf[2]=0Xe4;
3、 Ask_send_buf[2]的低4位清零并給Ask_send_buf[2]加上鍵盤碼(1~15);
4、 發(fā)射Ask_send_buf[0]
5、 發(fā)射Ask_send_buf[1]
6、 發(fā)射Ask_send_buf[2]
7、 發(fā)射同步碼(這個過程在編碼規(guī)范里面是在前面的,但放在這個位置通訊更穩(wěn))
8、 暫停發(fā)射做一個發(fā)射間歇(一般有15毫秒合適)
上述實(shí)際上,按照通訊編碼規(guī)約,完成一個發(fā)射碼的過程必須要先后發(fā)送四次才符合1527的編碼規(guī)范,因此,需要將上述過程中4~8步驟重復(fù)4次接收端才能認(rèn)可。
四、 調(diào)試注意事項(xiàng)
1、 硬件連接邏輯確認(rèn)(前面給出的連接關(guān)系別搞錯線,注意所選用的模塊電壓不要出現(xiàn)燒片)
2、 如何確認(rèn)發(fā)射端開始發(fā)碼?
無線模塊開始發(fā)射以后,由于無線433信號不依賴專用設(shè)備比較難以判斷是否已經(jīng)發(fā)射,建議可采用其他無線設(shè)備檢查是否已經(jīng)開始發(fā)射,可以用對講機(jī)將頻率調(diào)整為433MHz,發(fā)射端發(fā)碼時候會有明顯噪音出現(xiàn)。(凡帶有自學(xué)習(xí)功能的遙控器或者遙控模塊在未成功學(xué)習(xí)之前即使收到信號也沒反映的)
3、 如何確認(rèn)發(fā)射碼正確?
接收端用靈R1模塊,在確認(rèn)發(fā)射端發(fā)射時進(jìn)入學(xué)習(xí)狀態(tài)進(jìn)行學(xué)習(xí),調(diào)整R1的輸出模式為第5模式,然后通過R1模塊自帶串口輸出功能將接受到的發(fā)射碼發(fā)送到上位機(jī)查看。(需要注意模塊接收的代碼會自動加上前置字符串“LC:”,還會有后面的通訊校驗(yàn)字節(jié))
4、 如何確認(rèn)MCU的機(jī)器周期時鐘
不同的MCU和不同的時鐘配置,指令周期都可能不同,采用代碼延時(計(jì)時器更方便大家可自己移植)時,為了保證第一個時序圖中一個T的時間基本準(zhǔn)確在400納秒,最好采用示波器來矯正正確的循環(huán)次數(shù)。
示波器不方便的時候,先搞個1分鐘或者幾分鐘的延時通過秒表來反向推算一下400納秒到底需要多少個等待周期;
五、 硬件照片
順手把丑陋的調(diào)試硬件照片發(fā)上來,看看這么簡單的連接就搞定了,還有,這無線模塊缺失做的太小了,紅色是靈R1,藍(lán)色帶螺旋天線的是遠(yuǎn)T1你不小心估計(jì)都沒看到那個模塊,調(diào)試通過發(fā)現(xiàn)這對模塊真心好用,通訊非常穩(wěn)定可靠。
順便看看我用的調(diào)試板背面,手動飛了兩根線,USB接口就直接可以SWD方式下載調(diào)試這個STM32的開發(fā)板了,比較方便。
六、 上位機(jī)接收到的代碼
調(diào)試過程中,靈R1模塊除了完成與串口通訊模塊的三根線連接之外,需要按照手冊進(jìn)行對碼學(xué)習(xí)過程和輸出模式設(shè)置過程。標(biāo)準(zhǔn)9600的串口通訊,使用還是比較簡單的。
源代碼也給大家分享一下吧,免得朋友們走彎路啦
完整實(shí)現(xiàn)的代碼下載
總結(jié)
以上是生活随笔為你收集整理的在STM32上对EV1527等无线编码格式的C程序编码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 地图与指南针使用方案
- 下一篇: 自锁6引脚开关连线