STM32ADC采样&Matlab串口实时绘图脚本

STM32ADC

F042的ADC为12bitADC,采样所得到的值为0~(2^12)-1即0~4095,ADC引脚输入的最大电压为芯片的供电电压,若测量电压大于这一值,需要使用运算放大器进行转换。故该ADC是将0~3.3V分成了4096份进行比较采样。采样时间在cubemx设置为1.5Cycles。

因为只使用了ADC的一个引脚所以中断方式且判定ADC采样结束,其可以不使用DMA通道。

CUBEMX中ADC设置:
ADC设置
中断设置:
在这里插入图片描述

//定时器ARR溢出中断回调函数,以此达成周期性采样
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
  HAL_ADC_Start_IT(&hadc);
}
//ADC采样完成中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* ADC_Handle){
  HAL_ADC_Stop_IT(ADC_Handle);
  HAL_TIM_Base_Stop_IT(&htim14);
  ADC_val=HAL_ADC_GetValue(ADC_Handle);   //ADC_Val为采样的ADC值
  HAL_TIM_Base_Start_IT(&htim14);
}
//主函数while循环中的计算
voltage=ADC_val/4096.*3.3;                //voltage为测量出的电压值

Matlab实时绘图

figure("Color",'w');
Port_List = serialportlist("available");
Device_serial = serialport("COM5",115200,"Timeout",5);
counter=1;
Device_serial.UserData=counter;
flush(Device_serial);
configureCallback(Device_serial,"byte",4,@SerialCallback);

%从串口每获取四字节触发回调函数SerialCallback

function SerialCallback(src,~)
    data=read(src,4,"single");
    plot(src.UserData,data,'.black');
    %voltage=data/4096*3.3;
    %plot(src.UserData,voltage,'.black');
    
    %UserData为matlab UI共享存储,因为自Matlab2019后不能再使用全局变量global value
    src.UserData=src.UserData+1;
    hold on;
    drawnow;
end

测量结果

在这里插入图片描述

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值