草庐IT

STM32F4 HAL库 GPIO+DMA 控制AD9226(采样率可达16M)

森林344 2023-11-13 原文

文章目录


这里使用的是STM32F407,主频168M。

图形化界面配置

引脚配置

这里使用GPIOD,需要注意的是,所用的引脚要来自同一个端口。

定时器配置

使用TIM8的原因

在STM32F4里,可以当DMA的触发源同时频率可以达到系统主频的定时器只有高级定时器(TIM8和TIM1)

基本配置

让TIM8产生上溢事件的的频率为主频的十分之一。
开启PWM输出,为ADC提供时钟。

PWM的配置

PWM mode2:让PWM上升沿的时候产生一次上溢事件
Pulse = 5:产生方波
Fast Mode :加快输出PWM波的引脚的电平反转速度

DAM配置

程序设计

官方函数的修改


需要注意的是,这里开启DMA的函数(HAL_TIM_DMABurst_MultiReadStart)被我改过
直接用是用不了的

函数里面我改了红框的位置,那里原本放的是一个定时器的寄存器地址。

中断回调

DMA中断时默认开启的

主函数

接线

AD9226的D11接到STM32的D0,D10接到D1·······以此类推,单片机与ADC上的引脚倒序相接。

效果和问题

波形跳变问题

下图是用AD9226采集1MHz的三角波打点的波形。
一个周期大约16~17个点,采样率达到要求

不过在第35个点的位置上,出现了波形跳变,不管我采几次,怎么设置频率,改数组长度,都没有用

然后我降低了采样率到1M,采集频率更低的信号

然后波形跳变的问题就消失了
目前还没找到原因

最大采样率

我试过将分频改为9,即采样率为168M的九分之一,依然可以工作,但偶尔会有漏采的情况。
再高就会工作不稳定。如下图

有关STM32F4 HAL库 GPIO+DMA 控制AD9226(采样率可达16M)的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

  3. ruby - 随机采样数组的唯一子集 - 2

    如果我有一个数组:a=[1,2,3]如何随机选择数组的子集,使每个子集的元素都是唯一的?也就是说,对于a,可能的子集是:[][1][2][3][1,2][2,3][1,2,3]我无法生成所有可能的子集,因为a的实际大小非常大,所以有很多很多子集。目前,我正在使用“随机游走”的想法——对于a的每个元素,我都会“抛硬币”,如果硬币正面朝上则将其包括在内——但我不确定这是否真的对空间进行了均匀采样。感觉它偏向于中间,但这可能只是我的想法在进行模式匹配,因为会有更多中等大小的可能性。我使用的方法是否正确,或者我应该如何随机抽样?(我知道这更像是一个与语言无关的“数学”问题,但我觉得这不是真正的

  4. 蓝桥杯 stm32 MCP4017 - 2

    本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B&#

  5. STM32 OTA应用开发——通过USB实现OTA升级 - 2

    STM32OTA应用开发——通过USB实现OTA升级目录STM32OTA应用开发——通过USB实现OTA升级前言1环境搭建2功能描述3BootLoader的制作4APP的制作5烧录下载配置6运行测试结束语前言什么是OTA?百度百科:空中下载技术(Over-the-AirTechnology;OTA),是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。经过公网多年的应用与发展,已十分成熟,网络运营商通过OTA技术实现SIM卡远程管理,还能提供移动化的新业务下载功能。实际上,现在我们所说的OTA比百度百科的定义还要更广泛,OTA的形式已经不再局限于手机和SIM卡,只要涉及

  6. 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32 - 2

    文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室

  7. STM32+ESP8266接入云(3) - 2

    解析数据     进入阿里云的IOTStdio,点击新建项目。         新建项目后点击新建Web应用。名称     应用名称随便填写              创建完成后我们进入应用。    在左侧组件处拖入一个指示灯和一个开关。     点击指示灯组件,点击配置数据源     选择我们的产品、数据、和属性。     我们还可以配置开和关的显示颜色。    点击按钮,配置交互动作。     选择设备和属性,设置值位置点击数据来源,选择组件值     配置完成后进入预览,点击按钮,在esp8266就会收到来自平台的json格式的数据,MCU端需要做的就是解析来自平台的数据,进而达到控制下

  8. STM32F103C8T6编码器电机的使用 - 2

    目录前言一、定时器部分和按键部分二、PWM调速三、电机驱动部分​​​​​​​三、编码器接口部分(测速)四.主函数总结​​​​​​​推荐STM32学习课程:[6-8]编码器接口测速_哔哩哔哩_bilibili[6-8]编码器接口测速是STM32入门教程-2022持续更新中的第20集视频,该合集共计30集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1th411z7sn/?p=20&spm_id_from=pageDriver&vd_source=ed36b2700bbc2bac7746c270bc391540OLED显示屏代码

  9. STM32F103C8T6—库函数应用I2C/SPI驱动OLED显示中文、字符串 - 2

    文章目录1.I2C与SPI通信协议对比2.四脚OLED与六脚OLED3.I2C驱动OLED显示oled.h&oled.c:汉字取模&oledfont.h:main.c显示示例:连线方法:4.SPI驱动OLED显示1.I2C与SPI通信协议对比I2C(Inter-IntegratedCircuit)SPI(SerialPeripheralInterface)传输方式半双工全双工传输速度低速,100Kbps----4Mbps高速,30Mbps以上几线制4线制:VCC,GND,SCL,SDA6/7线制:VCC,GND,SCLK(D0),MOSI(D1/SDA),DC,CS/SS主从模式多主机总线,通

  10. ruby - 有效地处理数字数组的 "scale"或 "resize"的算法(音频重采样) - 2

    做音频处理(虽然它也可以是图像处理)我有一个一维数字数组。(它们恰好是代表音频样本的16位有符号整数,这个问题同样适用于float或不同大小的整数。)为了匹配不同频率的音频(例如,将44.1kHz样本与22kHz样本混合),我需要拉伸(stretch)或压缩值数组以满足特定长度。将数组减半很简单:每隔一个样本丢弃一次。[231,8143,16341,2000,-9352,...]=>[231,16341,-9352,...]将数组宽度加倍稍微不那么简单:将每个条目加倍(或可选地在相邻的“真实”样本之间执行一些插值)。[231,8143,16341,2000,-9352,...]=>[2

随机推荐