基于STM32CUBEMX的淘晶驰串口屏通讯入门
文件名稱為HMI CODE,包含兩個字庫和一個工程
雙擊test打開工程并照教程載入字庫
如圖所示為工程模板
如何串口通訊改變屏幕參數
首先點擊上方的調試界面進入調試
點擊左下角鍵盤輸入,在指令區域輸入x1.val=1點擊執行所有代碼
可以看到此時綠燈旁邊示數為0.01這是因為采用了虛擬浮點數,因此想要顯示小數就必須乘以100來顯示。比如要顯示3.14,輸入就是314
以串口3為例,單片機執行指令
HAL_UART_Transmit(&huart3,"x1.val=1000\xff\xff\xff", 14, 0xffff);注意14為長度是要算好的,其他指令根據長度是要變換的,三個\xff為截止符一定要加。
此時選擇用戶MCU輸入,選擇好波特率和串口并點擊開始可以看到
Vci示數為10,我們輸入的指令是1000,虛擬浮點數減少兩位為10
如何關機保存數據
寫入一個變量到用戶存儲區(EEPROM)
(支持X3、X5、K0系列)
wepo att,add
att:變量/常量
add: 用戶存儲區位置(從0開始,到1023結束,總共1024個)
實例1:wepo t0.txt,10 (將t0.txt的內容寫入用戶存儲區的第10位置,在儲存區中的占用空間為t0.txt的最大設置值+1,即t0的txt-maxl屬性表示的大小+1,假如txt-maxl=20,那么最多可以放下10個漢字或者20個英文字母,實際占用的控件為10-30,共21個位置,下個存儲地址應從31開始)
實例2:wepo “abcd”,20?? (將字符串“abcd”寫入用戶存儲區的第20位置,在儲存區中占用大小為5字節,一個英文字母1個字節,共四個字節,因為是字符串,多加1個字節,最后為5個字節,實際存儲地址為20-24,注意:由雙引號括起來的或者xx.txt的就是字符串)
實例3:wepo 125,10?? (將數值125寫入用戶存儲區的第10位置, 在儲存區中占用大小為4字節,即10-13位置)
實例4:wepo “一二三四五”,100 (將”一二三四五”字符串寫入用戶存儲區的第100位置,每個漢字占用2字節,5個漢字共10字節,因為是字符串,加1字節,共11字節,實際存儲地址100-110,下個存儲地址應該從111開始)
備注:
1.寫入內容為變量字符串的時候,在儲存區中的占用空間為此變量的最大字符數+1;寫入內容為常量字符串的時候,在儲存區中的占用空間為此常量字符串的實際字符數+1。
2.寫入內容為變量數值或常量數值的時候,在儲存區中的占用空間統一為4字節。
3.使用用戶存儲區讀寫操作過程中請切記規劃好數據區位置,以免位置交錯引起數據覆蓋錯亂。
從用戶存儲區(EEPRO)讀數據到一個變量
repo att,add
att:目標變量
add: 用戶存儲區位置(從0開始)
實例1:repo t0.txt,10?? (從用戶存儲區的10位置讀數據到t0.txt變量中,在儲存區中的讀取數據量為t0.txt的最大設置值+1,即t0的txt-maxl屬性表示的大小+1)
實例2.repo n0.val,10?? (從用戶存儲區的10位置讀數據到n0.val,在存儲區中的讀取數據量為4字節)
備注:
1.讀入內容為變量字符串的時候,在儲存區中的讀取數據量為此變量的最大字符數+1。
2.讀入內容為變量數值時候,在儲存區中的讀取數據量統一為4字節。
3.使用用戶存儲區讀寫操作過程中請切記規劃好數據區位置,以免位置交錯引起數據覆蓋錯亂。
如何實現按鍵長按功能
1.新建一個定時器tm0,en屬性設置為0,其他屬性不用管;此時定時器處于默認關閉狀態。
2.在按鈕的按下事件中寫上如下代碼:
tm0.tim=2000???? 2秒后進入長按功能
tm0.en=1???????? 打開定時器
3.在按鈕的彈起事件中寫上如下代碼:
tm0.en=0??????? 已經松手了,所以定時器立即停止工作
4.在定時器tm0的定時事件中寫上如下代碼:
tm0.tim=100????? 按鈕剛按下的時候,定時時間是2秒,這里修改為100ms,就意味著如果不松手,每100ms會來執行一次后面的代碼
此處寫上您想操作的長按事件代碼,比如:n0.val++
如何實現單片機讀取數據
如圖選擇滑塊來實現頻率的改變
在彈起事件和滑動事件中輸入
n1.val=h1.val????? 使用n1顯示示數printh AA???????? 起始標識符,可以自己更改,主要作用是讓單片機識別串口數據是誰的prints h1.val,1???? 將h1的數據發送出去,長度為1printh BB???????? 結束標識符,可以自己更改,作用同上wepo h1.val,10??? 如前面介紹將數字保存起來此時單片機內使用字符串接收,黃色部分不能去掉,會報錯
#define RXBUFFERSIZE? 6??? //最大接受字節數uint8_t RxBuffer[RXBUFFERSIZE];?? //接收數據在主函數寫入
HAL_UART_Receive(&huart3, (uint8_t *)&RxBuffer,4,0xff);此時做邏輯判斷
if (RxBuffer[0]==0xAA&&RxBuffer[2]==0xBB) //起始位0是0XAA結束位是0XBB{fre_fenpin=RxBuffer[1];???? //fenpin等于第二個數組,也就是我們發送的數據fre_val = (fre_fenpin)*10;? //乘以10,因為我分頻采用了71,需要計算TIM8->ARR=fre_val;//更改頻率,不做解釋HAL_Delay(1);}總結
以上是生活随笔為你收集整理的基于STM32CUBEMX的淘晶驰串口屏通讯入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java asynccontext,超时
- 下一篇: 荣耀magic3会用鸿蒙,赵明:荣耀Ma