目录
单次采集
在cubemx配置好adc,和串口(阻塞)
function [nbChar,buff] = convert(u) if coder.target('Sfun') buff = uint32(0); nbChar = uint16(0); else coder.cinclude('stdio.h'); coder.cinclude('main.h'); coder.cinclude('getBuffPtr.h'); string = char(zeros(1,20)); stringSize = uint16(size(string,2)); stringFormat = char(['%08x-%5.2f V',13.10,0]); tick = uint32(0); tick = coder.ceval('HAL_GetTick'); %tick 08x u 5.2f coder.ceval('snprintf',coder.wref(string), stringSize, coder.rref(stringFormat), tick, u) buff = coder.ceval('getBuffPtr',coder.wref(string)); nbChar = stringSize;%其实给的多了,应该只给到0X00 end end
dma中断多通道采集
function [nbChar,buff] = convert(u, data, data1)
if coder.target('Sfun')
buff = uint32(0);
nbChar = uint16(0);
else
coder.cinclude('stdio.h');
coder.cinclude('main.h');
coder.cinclude('getBuffPtr.h');
string = char(zeros(1,50));
stringSize = uint16(size(string,2));
%stringFormat = char(['%08x-%5.2f V',13.10,0]);
stringFormat = char(['ch1:%5.2f V; ch2:%5.2f V; ch3"%5.2f',13 ,10, 0]);%有修改
%tick = uint32(0);
%tick = coder.ceval('HAL_GetTick');
%tick 08x u 5.2f
coder.ceval('snprintf',coder.wref(string), stringSize, coder.rref(stringFormat), u, data , data1);
buff = coder.ceval('getBuffPtr',coder.wref(string));
nbChar = stringSize;%其实给的多了,应该只给到0X00
end
end
前面的字符是因为matlab生成的代码局部变量string[50]没有做初始化导致的。
string打印的字符没问题
string数组多余的0刚好和乱码数量对应上
ADC采样中断
关dma开it
这个指示用来触发中断
利用ADC中断打印数据
function [nbChar,buff] = adc_it_msg()
if coder.target('Sfun')
nbChar = uint16(0);
buff = uint32(0);
else
y = char(['ADC_IT Printf ',13,10,0]);
buff = coder.ceval('getBuffPtr',coder.rref(y));
nbChar = uint16(size(y,2));
end
end