matlab 与 stm32 通讯浮点数
总述
stm32 和 上位机需要做通讯,可以自己定义协议,保证上下位机的数据交流,有相应的应用场景需要交换浮点数,这里我是用matlab 来将 uint8 的数据转化成float数据,用于进一步处理。
stm发出数据
stm32 部分
float 通常占用四个字节,因此需要定义一个数组,来传递 float 数据
uint8_t Upper_Transmit_Buffer[6];//向上位机发送数据数组
float data_trans=1.5f;
Upper_Transmit_Buffer[0]=0xff;//协议
Upper_Transmit_Buffer[1]=0xff;
Upper_Transmit_Buffer[6]=0xaa;
memcpy(&Upper_Transmit_Buffer[2],&data_trans,4);
HAL_UART_Transmit_DMA(&huart1, Upper_Transmit_Buffer, 7);
matlab 部分
matlab需要将数据保存,并处理成 float 格式的数据。
configureCallback(app.My_serial,"byte",40,@(~,~) Serial_Receive_Callback(app));
function Serial_Receive_Callback(app)
app.serial_buff=read(app.my_serial,7,"uint8");
if app.serial_buff(1)==0xff && app.serial_buff(2)==0xff && app.serial_buff(7)==0xaa
app.receive_float=typecast(fliplr(uint8([app.serial_buff(6),app.serial_buff(5),
app.serial_buff(4),app.serial_buff(3),])), 'single'); % 处理数据,注意倒叙
end
end
matlab 发出数据
- 定义一个 float 数据
- 使用typecast 函数
a=single(1.2);
a_trans=typecast(a,'uint8');
write(myserial,a_trans,'uint8');