当前位置: 首页 > news >正文

基于正点原子潘多拉STM32L496开发板的简易示波器

一、前言

        由于需要对ADC采样性能的评估,重点在于对原波形的拟合性能。

        考虑到数据的直观性,本来计划采集后使用串口导出,并用图形做数据拟合,但是这样做的效率低下,不符合实时观察的需要,于是将开发板的屏幕用作波形模拟展示,虽然精度有所丢失,但是波形没有太大变形,有一定参考价值。

        目前开发板的版本是V3.4,主控STM32L496VET6。选择该主控的原因是adc部分的时钟是独立且可以调整的,F1和F4系列的时钟频率相对较低,最高36Mhz。

        L496可以到80Mhz,最大精度下采样率能够达到5.33Mhz,可以很大程度提高实验要求的实时性。

二、设计思路

        设计的关键在于ADC的采集方式和LCD的显示方式。

1、ADC配置

        在官方例程的框架基础上做了一些修改:

例程用的2倍分频,所以ADC时钟为40MHz,我改为了1分频,达到80MHz。其他根据自己需要修改。

通道配置部分,例程是放在了测量的时候配置,由于实时采集需要高频调用,于是我把这部分放到了初始化中,只保留了必须的部分:

例程为了可以实现任意通道的采样,所以在测量时才配置对应通道。但是要注意,初始化函数只对一个引脚做了配置,如果要测量其他通道还需要自行配置其他引脚。

时钟源可以参考CubeMX生成的代码,有多种组合方式,这里我采用最简单的,挂在系统时钟上:

2、定时器配置

       定时器就是正常配置为计数,开启溢出中断,没有使用其他功能。

        这部分没有采用定时器内置的触发ADC检测,我使用更为简单的标志位,这样便于调试和查错:

        count是测量计数,tim_flag是定时器溢出标志,用于主函数启动ADC采样。

3、led显示配置

这部分参考另一位博主的设计思路,在屏幕上建立坐标系,建立网格线:

        所有用于显示的函数都是使用官方的LCD驱动代码,要做的就是调整显示区域和颜色。

4、波形绘制

        最重要的就是波形模拟,这部分的主要思路是采集230次为一组,就是要显示的像素宽度,将每一次采集的数据保存,然后暂停定时器,处理数据,将模拟量转为电压值,找到最大最小值,刷新到屏幕,每两个相邻点之间连线,最后将计数值清零,开启定时器。

        描述的比较硬核,看代码就明白了:

if(count >= LCD_Width - 10)//如果显示的个数达到要求
{HAL_TIM_Base_Stop_IT(&TIM3_Handler);//定时器暂时关闭,先处理数据Display_Voltage_Net();	max = D_arr[0] * 3300 / 4096;min = D_arr[0] * 3300 / 4096;for(count = 0; count < LCD_Width - 10; count++)//进行最大值和最小值等处理{D_arr[count] = D_arr[count] * 3300 / 4096;//模拟量换成数字量电压,1mV为量度 if(D_arr[count] > max){max = D_arr[count];}if(D_arr[count] < min){min = D_arr[count];}}//最大值和最小值显示POINT_COLOR = BLACK;//设置画笔为黑色LCD_ShowString(0, 15, 20, 12, 12, "max");LCD_ShowNum(0, 27, max, 4, 12);LCD_ShowString(0, LCD_Height - 30 - 12, 20, 12, 12, "min");LCD_ShowNum(0, LCD_Height - 30, min, 4, 12);//显示处理for(count = 0; count < LCD_Width - 10; count++){D_arr[count] = D_arr[count] / 3300 * (LCD_Height - 20);//显示范围}//数据显示在LCD上for(count = 10; count < LCD_Width - 11; count++){//LCD_DrawLine(count + 10, LCD_Height - 10 - D_arr[count], count + 11, LCD_Height - 10 - D_arr[count + 1]);LCD_DrawLine(count, LCD_Height - 10 - D_arr[count], count + 1, LCD_Height - 10 - D_arr[count + 1]);}count = 0;//重新进行数据获取delay_ms(1000);HAL_TIM_Base_Start_IT(&TIM3_Handler);//定时器重新启动
}

三、实验结果

        根据本次实验的设计方式,实测定时器最快只能设置10微妙定时,更小的话会采样乱码,目前还没找到原因。

TIM3_Init(10 - 1, 80 - 1);//定时器3初始化 10us

        自动装载值为10,预分频80。也就是屏幕每一帧显示范围10us * 220  = 2.2毫秒,周期在该范围内的都能正常显示一帧,在频率为10khz时,波形较密集,应该是能看清的最高频率。

        读者可根据需要调整定时器的配置,低于10khz的方波都可以较清晰的模拟出来。

源码已上传至Gitee:

stm32: 一些stm32模块使用经验记录 - Gitee.comicon-default.png?t=N7T8https://gitee.com/lrf1125962926/stm32/tree/Waveform_simulation/

相关文章:

基于正点原子潘多拉STM32L496开发板的简易示波器

一、前言 由于需要对ADC采样性能的评估&#xff0c;重点在于对原波形的拟合性能。 考虑到数据的直观性&#xff0c;本来计划采集后使用串口导出&#xff0c;并用图形做数据拟合&#xff0c;但是这样做的效率低下&#xff0c;不符合实时观察的需要&#xff0c;于是将开发板的屏幕…...

【Docker】apisix 容器化部署

APISIX环境标准软件基于Bitnami apisix 构建。当前版本为3.8.0 你可以通过轻云UC部署工具直接安装部署&#xff0c;也可以手动按如下文档操作&#xff0c;该项目已经全面开源&#xff0c;可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platform qi…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…...

从零开始学HCIA之SDN04

1、VXLAN数据封装 &#xff08;1&#xff09;Original L2 Frame&#xff0c;原始以太网报文&#xff0c;业务应用的以太网帧。 &#xff08;2&#xff09;VXLAN Header&#xff0c;VXLAN协议新定义的VXLAN头&#xff0c;长度为8字节。VXLAN ID&#xff08;VNI&#xff09;为2…...

GET 和 POST 有什么区别?

1.从缓存的角度&#xff0c;GET 请求会被浏览器主动缓存下来&#xff0c;留下历史记录&#xff0c;而 POST 默认不会。 2.从编码的角度&#xff0c;GET 只能进行 URL 编码&#xff0c;只能接收 ASCII 字符&#xff0c;而 POST 没有限制。 3.从参数的角度&#xff0c;GET 一般放…...

Qt学习--继承(并以分文件实现)

基类 & 派生类 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。 总结&#xff1a;简单来说&#xff0c;父类有的&#xff0c;子…...

软考75-上午题-【面向对象技术3-设计模式】-设计模式的要素

一、题型概括 上午、下午题&#xff08;试题五、试题六&#xff0c;二选一&#xff09; 每一个设计模式都有一个对应的类图。 二、23种设计模式 创建型设计模式&#xff1a;5 结构型设计模式&#xff1a;7 行为设计模式&#xff1a;11 考试考1-2种。 三、设计模式的要素 3…...

Matlab|面向低碳经济运行目标的多微网能量互联优化调度

目录 主要内容 优化流程 部分程序 结果一览 下载链接 主要内容 该程序为多微网协同优化调度模型&#xff0c;系统在保障综合效益的基础上&#xff0c;调度时优先协调微网与微网之间的能量流动&#xff0c;将与大电网的互联交互作为备用&#xff0c;降低微网与大电…...

3.Gen<I>Cam文件配置

Gen<I>Cam踩坑指南 我使用的是大恒usb相机&#xff0c;第一步到其官网下载大恒软件安装包,安装完成后图标如图所示&#xff0c;之后连接相机&#xff0c;打开软件&#xff0c;相机显示一切正常。之后查看软件的安装目录如图&#xff0c;发现有GenICam和GenTL两个文件&am…...

【兆易创新GD32H759I-EVAL开发板】 TLI(TFT LCD Interface)用法详细介绍

大纲 1. 引言 2. TLI外设特点 3. TLI硬件架构 4. TLI寄存器功能 5. TLI的配置和使用步骤 6. TLI图层概念 7. 图像处理和显示优化 8. 基于GD32H759I-EVAL开发板的TLI应用示例 1. 引言 在当今的嵌入式系统设计中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的应…...

恒创科技:什么是BGP线路服务器?BGP机房的优点是什么?

在当今的互联网架构中&#xff0c;BGP(边界网关协议)线路服务器和BGP机房扮演着至关重要的角色。BGP作为一种用于在自治系统(AS)之间交换路由信息的路径向量协议&#xff0c;它确保了互联网上的数据能够高效、准确地从一个地方传输到另一个地方。那么&#xff0c;究竟什么是BGP…...

苍穹外卖-day04:项目实战-套餐管理(新增套餐,分页查询套餐,删除套餐,修改套餐,起售停售套餐)业务类似于菜品模块

苍穹外卖-day04 课程内容 新增套餐套餐分页查询删除套餐修改套餐起售停售套餐 要求&#xff1a; 根据产品原型进行需求分析&#xff0c;分析出业务规则设计接口梳理表之间的关系&#xff08;分类表、菜品表、套餐表、口味表、套餐菜品关系表&#xff09;根据接口设计进行代…...

深入探索C与C++的混合编程

实现混合编程的技术细节 混合使用C和C可能由多种原因驱动。一方面&#xff0c;现有的大量优秀C语言库为特定任务提供了高效的解决方案&#xff0c;将这些库直接应用于C项目中可以节省大量的开发时间和成本。另一方面&#xff0c;C的高级特性如类、模板和异常处理等&#xff0c;…...

数组中的flat方法如何实现

数组的成员有时还是数组&#xff0c;Array.prototype.flat()用于将嵌套的数组“拉平”&#xff0c;变成一维的数组。该方法返回一个新数组&#xff0c;对原数据没有影响。 [1, 2, [3, 4]].flat() // [1, 2, 3, 4]那flat怎么来实现呢&#xff1f; 1、使用while循环 实现的代码…...

计算机考研|北航北理北邮怎么选?

北航985&#xff0c;北理985&#xff0c;北邮211 虽然北邮事211&#xff0c;但是北邮的计算机实力一点也不弱&#xff0c;学科评级&#xff0c;计算机是A 北航计算机评级也是A&#xff0c;北理的计算机评级是A- 所以&#xff0c;这三所学校在实力上来说&#xff0c;真的大差…...

面试算法-52-对称二叉树

题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 解 class Solution {public boolean isSymmetric(TreeNode root) {return dfs(root, root);}public boolean dfs(Tr…...

独立维基和验收测试框架 Fitnesse 入门介绍

拓展阅读 junit5 系列教程 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。压测测试报告生成。) Fitnesse 完全集成的独立维基和验收测试…...

AI 初创公司趋势:Y Combinator 最新批次的见解

总部位于硅谷的著名创业加速器 Y Combinator (YC) 最近宣布了其 2023 年冬季队列&#xff0c;不出所料&#xff0c;约 31% 的初创公司&#xff08;269 家中有 80 家&#xff09;拥有自我报告的 AI 标签。在这篇文章中&#xff0c;我分析了这批 20-25 家初创公司&#xff0c;以了…...

tts语音合成原理

TTS&#xff08;Text-to-Speech&#xff0c;文本到语音&#xff09;语音合成技术是一种将文本数据转换为可听见的语音输出的技术。它允许计算机和其他电子设备读出文字信息&#xff0c;使得用户可以通过听的方式接收信息。TTS技术在无障碍服务、智能助手、语音导航、有声读物等…...

轮转数组题解

链接&#xff1a;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 这个题目很简单&#xff0c;因为说到了 k 是一个非负数&#xff0c;那么我们就可以 求模的时候就不用考虑的下标还会越界了&#xff0c;往右边 移动 其实就是当前下标 ik ,为了保证它能头尾相接并且不越…...

sqllab第二十四关通关笔记

知识点&#xff1a; 二次注入 先埋一个炸弹&#xff0c;然后通过其他路径引爆它 查看界面发现是一个登录框&#xff0c;尝试进行登录框的注入发现这里不存在注入点 那么就注册一个新的账户吧 通过点击注册&#xff0c;进入注册面板&#xff0c;注册一个新的账户 用户名为 re…...

web前端之多行文本擦除效果、文本逐个显示或展示、创建元素标签、querySelector、createElement、appendChild、requestAnimationFrame

MENU 版本一(requestAnimationFrame)版本二(setTimeout)版本三(css) 版本一(requestAnimationFrame) 前言 window.requestAnimationFrame()告诉浏览器——你希望执行一个动画&#xff0c;并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数…...

一文解读ISO26262安全标准:功能安全管理

一文解读ISO26262安全标准&#xff1a;功能安全管理 1 安全生命周期1.1 概念阶段1.2 产品开发阶段1.3 生产发布后续阶段 2 安全管理的角色和职责3 安全活动的裁剪4 安全活动的评审5 安全活动的评估6 交付物 下文的表中&#xff0c;一些方法的推荐等级说明&#xff1a; “”表示…...

【华为OD机试】找座位【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要, 要求每位观众的必须间隔至少一个空位才允许落座。 现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出, 在不移…...

LarkXR上新了 | Apollo多终端与XR体验的优化创新

作为领先的数字平行世界产品技术提供方&#xff0c;「Paraverse平行云」一直致力于为企业和开发者提供企业级实时云渲染解决方案。其多终端接入产品LarkXR Apollo&#xff0c;基于底层Runtime技术&#xff0c;实现了在Windows、Linux、MacOS、Android、iOS等多种操作系统下&…...

车载电子电器架构 - 网络拓扑

车载电子电器架构 - 网络拓扑 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…...

2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛选美 试题二&#xff1a;树的重心 试题三&#xff1a;大臣的差旅费 试题四&#xff1a;扫雷 试题一&#xff1a;奶牛选美 【题目描述】 听说最近两斑点的奶牛最受欢迎&#xff0c;…...

Docker 笔记(五)--链接

这篇笔记记录了Docker 的Link。 官方文档&#xff1a; Legacy container links - Communication across links 目录 参考Legacy container linksConnect using network port mappingConnect with the linking systemThe importance of naming Communication across linksEnviro…...

如何处理Android悬浮弹窗双击返回事件?

目录 1 前言 1.1 准备知识 1.2 问题概述 2 解决方案 3 代码部分 3.1 动态更新窗口焦点 3.2 窗口监听返回事件 3.3 判断焦点是否在窗口内部 3.4 窗口监听焦点移入/移出 4 注意事项 4.1 窗口范围 4.2 空隙处的返回事件处理 1 前言 1.1 准备知识 1&#xff09;开发环…...

高可用篇_A Docker容器化技术_II Docker环境搭建和常见命令

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载 Docker安装 Docker 要求 CentOS7 系统的内核版本在 3.10以上 &#xff0c;查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。 …...

做网站毕业答辩问题/搜索自媒体平台

尽量用 props & onChange&#xff0c;不要用 ref 获取引用然后调用方法。详情参考我的文章&#xff1a;一等公民 props & onChangeReact 只是一个视图框架&#xff0c;请尽量在 Component 里只做他擅长的事情。尽量写无状态的 Component。视图以外的事情&#xff0c;比…...

网站开发需要看相关书籍/搜狗搜索旧版本

前言因为工作需要可能要用到JNI开发&#xff0c;本篇文章就分享一下我在这方面的实践&#xff0c;以前我们使用Eclipse做NDK开发&#xff0c;非常麻烦&#xff0c;需要配cygwin的编译环境&#xff0c;后面NDK功能完善才逐渐简单点&#xff0c;Eclipse的如何通过NDK生成so库就不…...

自适应企业网站用什么框架做/游戏推广渠道

1.注意多用函数&#xff0c;尤其是最小最大化等多种联合&#xff0c;可以定义一个函数最大化&#xff0c;然后嵌套到另外一个函数里面。 2.初始化为临时最大值可以设为float(‘inf’)。 3.产生随机数可以import random: randint(a,b)函数可以产生a-b之间的整数&#xff0c;上下…...

网站功能有哪些/网络营销的模式有哪些?

上次做了个项目&#xff0c;涉及到数据库的还原和恢复&#xff0c;到网上找了一下&#xff0c;是利用SQLDMO实现的&#xff0c;只要添加SQLDMO引用就好了&#xff0c;然后利用下边的类的方法就可以实现了。 我把原作者的类扩充了一下&#xff0c;可以自动识别web.config里 的数…...

做网站如何上传apk/推广赚钱的项目

在Android中&#xff0c;通常使用StringBuilder类来拼接字符串&#xff0c;以逗号为分隔符。代码示例如下&#xff1a; StringBuilder sb new StringBuilder(); for (String str : stringList) {sb.append(str).append(","); } String result sb.toString();在最后一…...

java php 大型网站/小红书怎么推广引流

在C语言中如何动态申请连续的二维数组。可以采用多申请一些指针&#xff0c;然后这一些指针分别指向后面数据区中对应的位置&#xff0c;如一个3*4的int类型数组&#xff0c;我们先申请大小为sizeof(int*) * 3 3 * 4 * sizeof(int)的一维数组设为arr。然后arr[0]存放指向arr …...