В качестве специального решения вы можете использовать fread вместо fscanf
:
Предполагая, что вы сохраняете HAL_UART_Transmit(&huart3, a, 5, 1000);
в STM32.
Вы передаете 5
байтов в каждой передаче.
Вы можете прочитать 5
байтов в массив символов (в MATLAB), используя fread
, и преобразовать массив символов в число.
binary_data = fread(s, 5); %Read 5 bytes from serial port (5 uchar elements) to array binary_data.
str = char(binary_data'); %Convert uchar array to character array.
data = str2num(str) %Convert character array to number
При чтении двоичных данных число байтов для чтения должно быть известно заранее (5 байт в вашем случае).
нет необходимости в \n
завершении.
Пример для построения непрерывного графика:
Выполните следующий код как «автономный», чтобы увидеть, как он работает.
Заменить строки кода согласно комментариям.
X = 1:100;
Y = zeros(1, 100); %Initialize array for storing 100 samples
figure;
h = plot(X, Y, 'o-'); %Plot the initial graph before loop begins.
%Endless loop, until user closes the graph figure.
while (isvalid(h))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Replace the following line:
data = rand();
%With:
%binary_data = fread(s, 5); %Read 5 bytes from serial port (5 uchar elements) to array binary_data.
%str = char(binary_data'); %Convert uchar array to character array.
%data = str2num(str) %Convert character array to number
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Move elements 2:100 one to the "left side", and add new sample at the end (at the "right side").
Y(1:99) = Y(2:100);
Y(100) = data;
h.YData = Y; %Update plot data.
drawnow; %Refresh plot drawing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Remove the following line:
pause(0.1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
Примечание:
Существует вероятность того, что построение графиков (графика) будет недостаточно быстрым.
В этом случае вам необходимо построить каждые 10 выборок (или каждые 100 выборок) в зависимости отСкорость STM32 передает образцы данных.