日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab+stm32通讯,matlab与stm32之间利用串口通信记录

發布時間:2024/7/23 循环神经网络 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab+stm32通讯,matlab与stm32之间利用串口通信记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、涉及到的函數

serial,fopen,fclose,

instrfindall,instrhwinfo,

fprintf,fscanf,fwrite,fread,isempty

1.1 串口函數

scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

fopen(scom);

.

fclose(scom);

或者對串口屬性單獨設置,如下:

scom = serial(com);

scom.BaudRate = 115200;

scom.InputBufferSize = 512;

scom.BytesAvailableFcnMode = 'terminator'; % 'byte'

scom.terminator = CR/LF ;

scom.Timeout = 50; %read or write wait time

fopen(scom);

.

fclose(scom);

通常會在關閉串口后刪除串口,在matlab工作空間中清除串口數據:

delete(scom);

clear scom;

問題1.:matlab剛打開后,第一次可以成功打開串口,第二次再打開就會報錯如下:

>> scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

>> fopen(scom)

Error using serial/fopen (line 72)

Open failed: Port: COM6 is not

available. Available ports: COM1.

Use INSTRFIND to determine if other

instrument objects are connected to the

requested device.

處理方法:個人理解是關閉串口后,串口并沒有被完全清理,就像有些軟件卸載后第二次再安裝就會失敗,所以需要在重新打開串口之前刪除之前對串口的所有設置,如下:

>> scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

>> fopen(scom);

Error using serial/fopen (line 72)

Open failed: Port: COM6 is not

available. Available ports: COM1.

Use INSTRFIND to determine if other

instrument objects are connected to the

requested device.

>> delete(instrfindall('Type','serial'));

>> scom = serial('com6','BaudRate',115200,'BytesAvailableFcnMode','byte');

>> fopen(scom);

>> fclose(scom)

>> help instrfindall

instrfindall Find all communication interface objects with specified

property values.

instrfindall函數可以找出所有與matlab通信的接口,也可以找出符合特定參數的接口。

1.2 serial 參數理解

通過>> s=get(scom) 可以過得串口的所有參數以及當前的值,其中主要設置的有:

BaudRate,波特率

ByteOrder,數據大端或者小端模式,默認小段

DataBits,數據位,通常默認8位

Parity,校驗位,默認none

StopBits,停止位,默認1

Timeout,matlab串口發送或者讀取數據等待時長

ReadAsyncMode,異步讀取數據的方式,連續或者手動,默認連續continue

----------

BytesAvailableFcnMode

BytesAvailableFcnCount

BytesAvailableFcn

Terminator

BytesAvailable

表示數據有效的觸發方式,相當于c中的中斷觸發事件:默認值terminator,表示串口接收到特定的終止符時,觸發bytes-available event,參數自動加一,并進入由指向的回調函數,相當于c中的中斷函數;可選值byte,表示串口收到一個字節時,觸發bytes-available event,自動加一,當收到

個字節時進入回調函數。

終止符通常是回車或者換行符,也可以自己設定,根據通信協議自定義,[Windows、Linux和MAC的CR, LF, CR/LF換行符](http://blog.csdn.net/cckit/article/details/41604771)。

matlab搜索可用串口端口函數instrhwinfo :

>> info = instrhwinfo('serial')

info =

HardwareInfo with properties:

AvailableSerialPorts: {2x1 cell}

JarFileVersion: 'Version 3.7'

ObjectConstructorName: {2x1 cell}

SerialPorts: {2x1 cell}

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.

>> info.SerialPorts

ans =

'COM1'

'COM6'

>> info.AvailableSerialPorts

ans =

'COM1'

'COM6'

>> str = char(info.SerialPorts(2))

str =

COM6

>> scom=serial(str);

我在電腦設備管理器查看,用的是串口’COM6’, ‘COM1’還不知道時接的是什么,所以這里想用matlab自動選擇串口的功能還沒有實現。

1.3 數據讀寫函數

matlab:

fprintf(scom,'%d\n', data,'async' );

data = fscanf(scom,'%d');

c:

scanf("%d",&data);

printf("%d\r\n",data);

note1:c中scanf、printf函數默認從終端打印讀取數據,這里需要重定向fputc、fgetc函數。

note2:c中scanf函數在讀取到有效數據前會一直運行不退出。

問題2:在stm32的串口中斷函數中調用scanf函數,讀取matlab發送的數據,matlab中用fprintf(scom,’%d\r\n’, data,’async’ )發送數據,當stm32進入中斷讀取數據后,總是會再次進入中斷并進入scanf函數出不來。

處理方法:matlab中發送數據的格式 '%d\r\n',即回車加換行,個人理解是串口發送完一字節后也把'\r'即 回車符也發送出去,所以stm32的串口接收緩存中scanf函數讀取數據后,由回車符又引起接收中斷。

將matlab發送函數中數據格式改為'%d\n' 后,stm32可以正常讀取數據。

matlab:

fwrite(scom,data,'uint8','async');

cmd_ack = fread(scom,1,'uint8');

c:

rec = USART_ReceiveData( DEBUG_USART );

Usart_SendByte(DEBUG_USART,data);

note1:fwrite和fread是以二進制的格式發送數據,而上面的fprintf和fscanf是以ASCII碼的格式發送。

例如:data為十進制數123,其十六進制為0x7b,底層二進制數據流就是0111 1011,以ASCII碼發送是0x31,0x32,0x33,底層數據流是0011 0001,0011 0010,0011 0011。

matlab如果用fwrite和fread函數,串口參數也要改為byte。

記錄時間:2017.12.10 晚

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的matlab+stm32通讯,matlab与stm32之间利用串口通信记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。