STM32F407 FSMC并口读取AD7606
先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟共地导致的.
最早用的是SPI串行协议, 结果发现最高读取速度有限, 无法发挥AD7606的性能, 即使AD7606能转换及时, 数据传输也不及时. 于是改成了并口. 所以要想充分发货AD7606的性能一定要用并口.并口读取数据要使用单片机上的FSMC接口. 这个挺好的. 速度非常快, 使用非常简单.
引脚使用情况如下,
我用的是STM32F407IGT6
/** FSMC GPIO Configuration
PF0 ------> FSMC_A0 //没啥用,但是必须得占用.
PE7 ------> FSMC_D4
PE8 ------> FSMC_D5
PE9 ------> FSMC_D6
PE10 ------> FSMC_D7
PE11 ------> FSMC_D8
PE12 ------> FSMC_D9
PE13 ------> FSMC_D10
PE14 ------> FSMC_D11
PE15 ------> FSMC_D12
PD8 ------> FSMC_D13
PD9 ------> FSMC_D14
PD10 ------> FSMC_D15
PD14 ------> FSMC_D0
PD15 ------> FSMC_D1
PD0 ------> FSMC_D2
PD1 ------> FSMC_D3
PD4 ------> FSMC_NOE //接AD7606的RD
PD5 ------> FSMC_NWE//没啥用
PG9 ------> FSMC_NE2 //接AD7606的CS
PE0 ------> FSMC_NBL0//没啥用
PE1 ------> FSMC_NBL1 //没啥用
*/
另外几个引脚的配置如下
还有一个引脚如下.这个是触发转换的ADC的采样时钟.连接AD7606的ConvertA和ConvertB 两个脚并联.
总的来说. AD7606也挺简单的
- ConverA,和ConvertB是采样时钟信号.负责触发采样.
- OS0,OS1,OS2 负责设置过采样
- BUSY负责通知单片机,数据已采样完毕, (最好是在下降沿时触发,转换结束时此引脚变成低电位)
- RANGE引脚负责设置测量量程, ±5或者±10V
- RD 是读数据的时钟信号
- CS 负责片选信号, 可以将RD和CS短接. 同时触发.
工作过程是
ConvertA和ConvertB在定时器下,持续输出采样时钟.保持合理的采样率.
波形频率要稳定.采用软件触发的形式肯定是不合理的. 频率最高不能超 过200KHZ.
当AD7606转换完成时会将BUSY引脚拉低, 单片机在接收到BUSY的下降沿外部中断触发时, 用软件读取内存中的数据到自定义变量中.代码如下
/*** @brief This function handles EXTI line2 interrupt.* 需要注释掉stm32F4xx_it.c中的同名函数*/
void EXTI2_IRQHandler(void)
{ if(__HAL_GPIO_EXTI_GET_IT(AD7606_BUSY_Pin) != RESET){AD7606_Read8ChAdc();__HAL_GPIO_EXTI_CLEAR_IT(AD7606_BUSY_Pin); } }//#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x60000000 //Bank1
#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x64000000 //Bank2 使用的PG9/FSMC_NE2引脚.
//#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x68000000 //Bank3
//#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x6C000000 //Bank4void AD7606_Read8ChAdc(void)
{ AdcValues[0] = AD7606_ReadOneChannelData(); /* 读第1路样本 */ AdcValues[1] = AD7606_ReadOneChannelData(); /* 读第2路样本 */AdcValues[2] = AD7606_ReadOneChannelData(); /* 读第3路样本 */AdcValues[3] = AD7606_ReadOneChannelData(); /* 读第4路样本 */AdcValues[4] = AD7606_ReadOneChannelData(); /* 读第5路样本 */AdcValues[5] = AD7606_ReadOneChannelData(); /* 读第6路样本 */AdcValues[6] = AD7606_ReadOneChannelData(); /* 读第7路样本 */AdcValues[7] = AD7606_ReadOneChannelData(); /* 读第8路样本 */
}
代码中 AD7606_ReadOneChannelData(); 是一个宏,实际上是指向的一个内存地址, 这个内存地址是FSMC指定的地址. 使用FSMC接口, 可免于控制引脚, 直接读取某个地址即可, FSMC会自动产生操作时序. 具体请见FSMC相关知识.
关键要素之一
一定要在中断函数中判断中断状态,
在 __HAL_GPIO_EXTI_GET_IT() 和__HAL_GPIO_EXTI_CLEAR_IT()之间 进行读取转换数据.
另外, FRST引脚总是不正确, 所以不要使用它 .
最后,
数据太多, 通过接口发到上位机, 再处理, 是个非常糟糕的做法.
最好的做法是在单片机上进行计算, 再把计算结果发到上位机.
相关文章:

STM32F407 FSMC并口读取AD7606
先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟…...

WebGPU vs. 像素流
在构建 Bzar 之前,我们讨论过我们的技术栈是基于在云上渲染内容的像素流,还是基于使用设备自身计算能力的本地渲染技术。 由于这种选择会极大地影响项目的成本、可扩展性和用户体验,因此在开始编写一行代码之前,从一开始就采取正确…...

Windows下docker-compose部署DolphinScheduler
参照:快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址:https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录,进入apache-dolphinscheduler-xxx-…...

微服务项目sc2024通用Base工程
1. cloud-provider-payment8001 2.pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…...

git学习 1
打开自己想要存放git仓库的文件夹,右键打开git bush,用git init命令建立仓库 用 ls -a(表示全都要看,包括隐藏的)可以看到git仓库 也可以用 git clone 接github链接(点code选项里面会给链接,结尾是git的那个…...

HTML - 请你说一下如何阻止a标签跳转
难度级别:初级及以上 提问概率:55% a标签的默认语义化功能就是超链接,HTML给它的定位就是与外部页面进行交流,不过也可以通过锚点功能,定位到本页面的固定id区域去。但在开发场景中,又避免不了禁用a标签的需求,那么都有哪些方式可以禁用…...
【CV】ORB算法
1. ORB算法: 特点: 实现了旋转不变性、尺度不变性和计算效率高等特性。 旋转不变性: 通过计算关键点周围的梯度信息,确定关键点的主方向。将图像旋转到关键点的主方向,然后再提取BRIEF描述符,增强了旋转不…...
【算法】Cordic算法的原理及matlab/verilog应用
一、前言 单片机或者FPGA等计算能力弱的嵌入式设备进行加减运算还是容易实现,但是想要计算三角函数(sin、cos、tan),甚至双曲线、指数、对数这样复杂的函数,那就需要费些力了。通常这些函数的计算需要通者查找表或近似…...

QT:信号与槽
作业: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和…...

以动态库链接库 .dll 探索结构体参数
Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后,尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个,dll.dll是上面提到…...

vue快速入门(三)差值表达式
注释很详细,直接上代码 上一篇 新增内容 插值表达式基本用法插值表达式常用公式 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...

RabbitMQ的交换机与队列
一、流程 首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图 黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲&am…...
Spring的 IOC和AOP编程思想
Spring的IOC(控制反转)编程思想 IOC(Inversion of Control,控制反转)是Spring框架的核心思想之一。在传统的编程方式中,我们直接通过new关键字来创建对象,并直接调用对象的方法。这种方式下&am…...
Qt中显示hex数据的控件
效果类似QTextEdit,但是显示十六进制的数据,比如用于显示抓取串口或者bin文件的数据等等 chunks.h #ifndef CHUNKS_H #define CHUNKS_H/** \cond docNever *//*! The Chunks class is the storage backend for QHexEdit.** When QHexEdit loads data, C…...
python web 开发 - 常用Web框架
python web 开发 - 文章目录 python web 开发 -1、关于Web开发2、常用Web框架3、开发案例3.1. 使用Flask框架创建一个简单的Web应用程序3.2. 使用tornado框架创建一个简单的Web应用程序3.3. 使用Django框架创建一个简单的待办事项应用程序 4、总结 1、关于Web开发 Web当然是网…...
设计模式——适配器模式06
适配器模式 通常在已有程序中使用,至少有两个类的接口不兼容时,让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用,现在要新增第三方接口Adaptee。如何进行适配,面向客户端提供 调用Target接口方式达到使用Adaptee…...

【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink
1. Prop 父子单向同步 概述 Prop装饰的变量和父组件建立单向的同步关系: Prop变量允许在本地修改,但修改后的变化不会同步回父组件。当父组件中的数据源更改时,与之相关的Prop装饰的变量都会自动更新。如果子组件已经在本地修改了Prop装饰…...

Web 前端性能优化之八:前端性能检测实践
五、前端性能检测实践 1、常用的检测工具 Lighthouse、Chrome开发者工具中与性能检测相关的一些工具面板、页面加载性能分析工具PageSpeed Insights、专业的性能检测工具WEBPAGETEST等 1、Chrome 任务管理器 通过Chrome任务管理器我们可以查看当前Chrome浏览器中࿰…...

安装VMware ESXi虚拟机系统
简介:ESXi是VMware公司开发的一款服务器虚拟化操作系统。它能够在一台物理服务器上运行多个虚拟机,每个虚拟机都可以独立运行操作系统和应用程序,而且对硬件配置要求低,系统运行稳定。 准备工具: 1.8G或者8G以上容…...
Vue3实践之全局请求URL配置和请求参数说明
Vue3实践之全局请求URL配置和请求参数说明 全局请求URL配置 1、首先需要导入router和axios import router from "/router";2、创建app,将router挂载到app上 const app createApp(App) app.use(router).use(elementIcons).mount(#app)3、设置全局请求…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...