本帖最后由 hkt_guet 于 2022-5-9 13:39 编辑 最近用app designer写了一个串口数据实时监测的app,为了实现实时读取串口的数据然后在app内的坐标轴窗口显示波形,我在“打开串口”按键回调函数中指定了app内定义的串口中断回调函数,但是软件报错:引用了不存在的字段 'usart_callback'。于是我把串口中断回调函数封装成".m"文件,发现可以正常调用,但是由于无法显示数据在app内的图窗,所以又把它改回来app内定义的函数,问题:请问如何解决? 代码: 定义ser为app内的全局变量 [ properties (Access = public) ser; % Serial serialname; baud ; % baud rate end ] 打开串口按键回调函数 [ clear delete(instrfindall); % 创建串口变量 app.ser = serial('COM5'); app.ser.BaudRate = 115200; app.ser.timeout=1; app.ser.Parity='none'; app.ser.StopBits=1; app.ser.Terminator='CR/LF'; app.ser.FlowControl='none'; app.ser.BytesAvailableFcnMode='byte'; %设置事件触发为接受触发 app.ser.InputBufferSize=300; %设置接受缓冲区大小为 300 个字节 app.ser.BytesAvailableFcnCount=300; %每次接受到 300 个数据时候触发事件 app.ser.BytesAvailableFcn=@app.usart_callback; %指向触发事件函数 fopen(app.ser); %打开串口 fprintf(app.ser,'o');%发送"开始发送数据"的命令给下位机 ] 自定义的公共属性串口中断回调函数 [function usart_callback(app,obj,event) temp=fscanf(obj,'%s');%由于发送了握手命令,先把第一个返回来的的握手数据读出来 for i=1:300 A{i}=fscanf(obj,'%s'); A1{i} = textscan(A{i},'%d %f ','Delimiter','='); B(i)=cell2mat(A1{1,i}(1,1)); C(i)=cell2mat(A1{1,i}(1,2)); end B=cast(B,'double'); B1=ditong(B); %低通滤波 B2=mean5_3(B1,300); %平滑加矫正基准线 clf(app.ppgandpressure) %app.ppgandpressure是我定义再app内的一个坐标轴窗口 plot(app.ppgandpressure,B2) hold(app.ppgandpressure); plot(app.ppgandpressure,C) end ] 错误信息:引用了不存在的字段 'usart_callback'。 出错 usart>@(varargin)app.usart_callback(varargin{:}) (line 78) app.ser.BytesAvailableFcn=@app.usart_callback; %指向触发事件函数 出错 instrcb (line 42) feval(val{1}, obj, eventStruct, val{2:end}); 警告: The BytesAvailableFcn is being disabled. To enable the callback property either connect to the hardware with FOPEN or set the BytesAvailableFcn property. |
最佳答案
15 条回复