微控制器與WPF通訊

2021-08-31 01:43:39 字數 2484 閱讀 4640

union floattypeposition

xyvaluestruct;

uint8_t para[8];

};//接下來只需給兩個float資料賦值,相同位置偏移裡的para陣列則會儲存float記憶體中的值;

//在傳送資料的函式中寫下面語句

union floattypeposition floattypeposition;

floattypeposition.xyvaluestruct.xvalue = 100;

floattypeposition.xyvaluestruct.yvalue = 200;

hal_uart_transmit(&huart1,(uint8_t *)floattypeposition.para,sizeof(floattypeposition.para),1000);

//強制型別轉換

/*強制型別轉化*/

傳送資料函式:hal_statustypedef hal_uart_transmit(uart_handletypedef *huart, uint8_t *pdata, uint16_t size, uint32_t timeout);

所以對於 int para[10];串列埠傳送其資料時需先將陣列名強制型別轉化為uint8_t型的指標;

或是直接:

uint8_t *p;

p = (uint8_t *)para;

hal_uart_transmit(..., p,....);

oruint8_t sendbuff[10];

hal_uart_transmit(..., sendbuff,....);

//在實際使用中自己總喜歡避開使用指標,但確實方便,要積累下來

//注意此處,一開始這麼寫的,結構xvalue與yvalue實際儲存值一樣,測試時通過發現para的後四個元素值總變化發現錯誤的;

union floattypeposition

;

/*注意:因為在wpf中寫的是一次讀取一定長度的資料,一開始把資料頭分開時接收總是錯誤,

然後合在一起發就沒問題了,雖然感覺分開發也行,但是,,,,,,*/

hal_uart_transmit(&huart1,(uint8_t *)senddatahead[0],sizeof(senddatahead[0]),1000);//這裡不要拆開發,目前上位機接收是一次讀的一段資料

hal_uart_transmit(&huart1,senddatawpf,sizeof(senddatawpf),1000);

hal_uart_transmit(&huart1,(uint8_t *)senddatahead[1],sizeof(senddatahead[0]),1000);

using system.runtime.interopservices;//需要額外引入的程式集

public byte datareceivedlengthcommended = 10; //設定串列埠接收資料的長度,這樣好一次讀幾個位元組資料

[structlayout(layoutkind.explicit)] //顯示指定位置偏移必須的

public struct union

public void portdatareceivedhandler(object sender, serialdatareceivedeventargs e)

}catch (exception ex)

}

int16_t senddatawpf[5] = ; //資料頭和資料尾,左右油門

hal_uart_transmit(&huart1,(uint8_t *)senddatawpf,sizeof(senddatawpf),1000); //記憶體偏移量變為8

public byte datareceivedlengthcommended = 10;  

public short speedyx = new short[2]; //油門資料;

public void portdatareceivedhandler(object sender, serialdatareceivedeventargs e)

}catch (exception ex)

}

/*注意此處通過使用移位合併資料的方式

微控制器hal_uart_transmit(); 函式本身就是差分資料為乙個位元組乙個位元組的再傳送資料,因此可以這樣合併;

對於乙個資料,不是byte長度會進行拆分,此資料先發其低位元組,再傳送其高位元組,再發下乙個資料的低位元組、高位元組;

注意合併時需先將要移位的資料進行強制型別轉換,不然一移位,那個移位的資料低位自動補0資料就沒了;

*/

tips:在進行bool值的比較時 & 和 &&的效果一樣的,但是後者更好,後者有短路的功能;

微控制器 串列埠與PC通訊

先通過串列埠除錯工具即pc傳送字元給微控制器,微控制器接收資料後再發給pc,再次通過串列埠除錯工具觀察傳送結果,即實現了pc到微控制器的收發 由於本地 需要安裝虛擬串列埠,pc用com1口,mcu的compim設為com2,波特率均為9600 org 0000h ajmp main org 0023...

微控制器串列埠通訊

微控制器串列埠通訊 通常的usb序列通訊方式為全雙工,即兩條資料線 rxd和txd,一條用於傳送資料,一條用於接收資料。在序列通訊前,需要對序列通訊進行配置。對於微控制器 ri為接受中斷標誌位,未通訊時ri 0 當電腦傳送第乙個位元組幀a0到微控制器時,sbuf a0,中斷標誌位ri 1,微控制器呼...

微控制器 紅外通訊

人的眼睛能看到的可見光按波長從長到短排列,依次為紅 橙 黃 綠 青 藍 紫。其中紅光的波長範圍為0.62 0.76 m 紫光的波長範圍為0.38 0.46 m。比紫光波長還短的光叫紫外線,比紅光波長還長的光叫紅外線.紅外線遙控就是利用波長為0.76 1.5 m之間的近紅外線來傳送控制訊號的。紅外線遙...