在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一種用于嵌入式通信傳輸和存儲設備的C語言實現方法

嵌入式情報局 ? 來源:嵌入式情報局 ? 2023-08-03 10:38 ? 次閱讀

摘要:各種類型的數據傳輸和存儲就涉及到大小端的問題,首先要簡單說下芯片的大小端問題,這里主要討論Cortex-M內核。

831ff7d0-3137-11ee-9e74-dac502259ad0.png

M內核支持大端或者小端,實際應用中大部分內核都是小端。以STM32為例,全部都是小端,而且是芯片設計之初就固化進去的,不可修改。市面上其他廠家基本也都固化的小端格式。

F1編程手冊

835910b0-3137-11ee-9e74-dac502259ad0.png

F3和F4編程手冊

83789084-3137-11ee-9e74-dac502259ad0.png

F7和H7編程手冊

83892124-3137-11ee-9e74-dac502259ad0.png

各種數據類型編程EEPROM,SPI Flash等存儲器的簡易方法,一般這些存儲器都是字節編程,寫入浮點等數據類型時不太方便。這里分享一個方法,定義一個結構體,將各種數據類型封裝進去

839f76cc-3137-11ee-9e74-dac502259ad0.png

寫入的時候采用下面方式:

83aded92-3137-11ee-9e74-dac502259ad0.png

讀取時可以采用下面方式:

83c7dd06-3137-11ee-9e74-dac502259ad0.png

各種數據類型的SPI,UARTI2C等傳輸問題。這里我們以串口通信為例,比如主機要發送如下格式數據給從機:

83eb7432-3137-11ee-9e74-dac502259ad0.png

我們可以做一個如下結構體格式:

typedefstruct
{
uint8_tucStart;

uint16_tusCO2;
uint16_tusPM25;
uint16_tusHumidity;
floatTemprature;
uint32_tulParam;
uint8_tucEnd1;
uint8_tucEnd2;
}
UART_T;

UART_Tg_tUartParam;

主機發送的時候我們就可以采用如下方法:

comSendBuf(COM1,(uint8_t*)&g_tUartParam,sizeof(UART_T));

從機工程也定義一個同樣的結構體變量,比如我們把接收到一幀數據存到緩沖uint8_t buf[50]里面了。

我們就可以定義一個結構體指針變量:

UART_T*pUartParam;
pUartParam=(UART_T*)buf;

那么我們就可以pUartParam->usCO2,pUartParam->Temprature等方式來訪問,非常方便。

代碼實現

結構體數據如下:

typedefstruct
{
uint8_tucStart;

uint16_tusCO2;
uint16_tusPM25;
uint16_tusHumidity;
floatTemprature;
uint32_tulParam;
uint8_tucEnd1;
uint8_tucEnd2;
}
USART_T;

USART_Tg_tUartParam;/*串口1發送數據使用*/
USART_T*pUartParam;/*串口2接數據使用*/
uint8_tbuf[128];/*接收記錄緩沖*/

數據收發處理:

/*
*********************************************************************************************************
*函數名:main
*功能說明:c程序入口
*形參:無
*返回值:錯誤代碼(無需處理)
*********************************************************************************************************
*/
intmain(void)
{
uint8_tucKeyCode;
uint8_tread;
uint8_tucStatus=0;/*狀態機標志*/
uint8_tucCount=0;
floatftest=0.11f;
pUartParam=(USART_T*)buf;


bsp_Init();/*硬件初始化*/

PrintfLogo();/*打印例程名稱和版本等信息*/
PrintfHelp();/*打印操作提示*/


bsp_StartAutoTimer(0,100);/*啟動1個100ms的自動重裝的定時器*/

memset(buf,0,128);

/*進入主程序循環體*/
while(1)
{
bsp_Idle();/*這個函數在bsp.c文件。用戶可以修改這個函數實現CPU休眠和喂狗*/

/*判斷定時器超時時間*/
if(bsp_CheckTimer(0))
{
/*每隔100ms進來一次*/
bsp_LedToggle(2);
}

/*按鍵濾波和檢測由后臺systick中斷服務程序實現,我們只需要調用bsp_GetKey讀取鍵值即可。*/
ucKeyCode=bsp_GetKey();/*讀取鍵值,無鍵按下時返回KEY_NONE=0*/
if(ucKeyCode!=KEY_NONE)
{
switch(ucKeyCode)
{
caseKEY_DOWN_K1:/*K1鍵按下,串口1發送數據給串口2*/
g_tUartParam.ucStart='$';
g_tUartParam.usCO2=1;
g_tUartParam.usPM25=2;
g_tUartParam.usHumidity=3;
g_tUartParam.Temprature=ftest++;
g_tUartParam.ulParam=5;
g_tUartParam.ucEnd1='
';
g_tUartParam.ucEnd2='
';
comSendBuf(COM1,(uint8_t*)&g_tUartParam,sizeof(UART_T));
printf("發送數據完成
");
break;

default:
/*其它的鍵值不處理*/
break;
}
}

/*串口2接收數據解析處理*/
if(comGetChar(COM2,&read))
{
switch(ucStatus)
{
/*狀態0保證接收到0x01*/
case0:
if(read=='$')
{
ucStatus=1;
buf[ucCount++]=read;
}
break;

case1:
buf[ucCount]=read;

/*接收夠15個數據*/
if((buf[ucCount-1]=='
')&&(buf[ucCount]=='
'))
{
/*打印接收到的數據值*/
printf("接收到的數據:
");
printf("pUartParam->usCO2=%d
",pUartParam->usCO2);
printf("pUartParam->usPM25=%d
",pUartParam->usPM25);
printf("pUartParam->usHumidity=%d
",pUartParam->usHumidity);
printf("pUartParam->Temprature=%f
",pUartParam->Temprature);
printf("pUartParam->ulParam=%d
",pUartParam->ulParam);
printf("
");

memset(buf,0,128);
ucStatus=0;
ucCount=0;
}
else
{
ucCount++;
}
break;

default:
break;
}
}
}
}

測試效果

83fbc42c-3137-11ee-9e74-dac502259ad0.png?

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5088

    文章

    19160

    瀏覽量

    306551
  • 內核
    +關注

    關注

    3

    文章

    1379

    瀏覽量

    40348
  • STM32
    +關注

    關注

    2270

    文章

    10918

    瀏覽量

    356822
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137290
  • Cortex-M
    +關注

    關注

    2

    文章

    229

    瀏覽量

    29792

原文標題:一種用于嵌入式通信傳輸以及存儲設備的簡易C語言實現方法

文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式軟件開發語言 嵌入式C編程到底是什么呢?是C語言的變形么?

    編寫開發過程的復雜性,通常不選擇它用于嵌入式系統開發,而C語言一種“低層次”的語言,已經成為
    發表于 12-26 15:15

    一種嵌入式系統用于多媒體實時數據的網絡傳輸設計

    (內存管理單元),很適合于許多低端的、沒有MMU的嵌入式處理器。本文設計了一種嵌入式系統用于多媒體實時數據的網絡傳輸。ARM內核處理器與
    發表于 06-19 05:00

    嵌入式系統對通信有什么需求?

    嵌入式系統之間的通信通常有兩方式:并行通信和串行通信。并行方式傳輸數據速度快,但占用的
    發表于 08-09 08:00

    嵌入式C語言C語言的區別

    嵌入式C語言C語言的區別:最常用的系統編程語言C
    發表于 10-27 06:52

    介紹一種嵌入式系統仿真方法

    /計數器等功能。本文介紹一種嵌入式系統仿真方法,通過一種特殊設計的指令集仿真器ISS將軟件調試器軟件Keil uVision2和硬件語言仿真
    發表于 11-08 06:16

    嵌入式平臺C語言實現二階濾波器的方法

    最近想從嵌入式平臺上用C語言實現二階濾波器,于是先從Matlab上驗證二階濾波器公式,再編寫C語言來驗證。算法移植(
    發表于 12-15 09:12

    嵌入式Linux存儲設備包含什么

    /NandFlash分區)進行自動掛載。也實現模擬嵌入式Linux設備當成U盤設備插入電腦,即通過USB數據線連接電腦,可指定存儲
    發表于 12-21 08:19

    一種在SoC嵌入式存儲器測試期間壓縮診斷信息方法介紹

    個常用的方法是在收集所有故障位坐標的基礎上生成故障位圖,并逐發送給測試人員。更為有效的是,遇到的故障可以檢索。本文介紹了一種在SoC嵌入式
    發表于 09-07 15:08

    一種嵌入式Linux與Windows JVM通信實現

    提出了一種在Windows 主機上運用JAVA 虛擬機(JVM)技術,與運行嵌入式Linux 的嵌入式系統通信實現方法。介紹了
    發表于 08-13 09:42 ?17次下載

    嵌入式c語言編程(由淺入深)

    本內容詳細介紹了嵌入式c語言編程的各項知識,包括嵌入式c語言編程,
    發表于 11-02 14:37 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>c</b><b class='flag-5'>語言</b>編程(由淺入深)

    一種嵌入式手持設備的無線數據通信模塊擴展方法

    文中針對嵌入式手持設備提出了一種擴展低成本無線數據通信模塊的方法。通過對基于ARM技術的
    發表于 04-18 14:12 ?6次下載

    用于嵌入式系統的傅立葉變換的C語言實現方法

    都會和傅立葉變換打交道。在以下的文章中,我給出一種傅里葉變換的C語言實現方法(參考了C常用算法集),可以
    發表于 05-26 09:33 ?1574次閱讀
    可<b class='flag-5'>用于</b><b class='flag-5'>嵌入式</b>系統的傅立葉變換的<b class='flag-5'>C</b><b class='flag-5'>語言實現</b><b class='flag-5'>方法</b>

    用于嵌入式系統中的無線通信方法

    用于嵌入式系統中的無線通信方法(嵌入式開發需要專門的軟件和硬件設備嗎?)-該文檔為
    發表于 07-30 09:24 ?9次下載
    <b class='flag-5'>用于</b><b class='flag-5'>嵌入式</b>系統中的無線<b class='flag-5'>通信</b><b class='flag-5'>方法</b>

    標準c語言嵌入式,嵌入式C語言C語言的區別

    嵌入式C語言C語言的區別:最常用的系統編程語言C
    發表于 10-20 14:06 ?6次下載
    標準<b class='flag-5'>c</b><b class='flag-5'>語言</b>與<b class='flag-5'>嵌入式</b>,<b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>與<b class='flag-5'>C</b><b class='flag-5'>語言</b>的區別

    C語言嵌入式培訓 嵌入式C語言程序設計基礎

      學習嵌入式的基礎語言C語言,因此先掌握C語言對于后續
    發表于 11-03 21:06 ?32次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>嵌入式</b>培訓  <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設計基礎
    主站蜘蛛池模板: 亚洲a在线观看| 成人午夜免费视频| 一区三区三区不卡| 美女丝袜长腿喷水gif动态图| 国产精品久久久久aaaa| 日本三浦理惠子中文字幕| 亚洲狠狠97婷婷综合久久久久| 亚洲成人网页| 人人澡人人搞| 操日韩| 狠久久| 免费不卡毛片| 操操插插| 中文字幕一区二区三区四区五区| 成人国产精品2021| 看黄网站在线| 国产免费啪啪| 女人本色高清在线观看wwwwww国产| 免费在线播放视频| 亚洲人一区| 丝袜美女被c| 一级毛片在线看在线播放| 国内视频一区二区三区| 性国产精品| 亚洲国产综合久久精品| 日韩精品午夜| 日本韩国三级在线| 色婷婷丁香六月| 四虎影院欧美| 色五月在线视频| 色噜噜狠狠色综合欧洲| 欧美三级在线视频| 欧美色图色就是色| 国产免费美女| 成人免费淫片95视频观看网站| 国产精品美女免费视频大全| 午夜神马嘿嘿| 日韩黄色网| 久久精品波多野结衣| 大又大粗又爽又黄少妇毛片| 成人激情在线|