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

STM32F4 adc扫描模式采集实验

做adc采集的时候用扫描模式发现读数据时只能读到一个通道的数据,想显示其他几个通道的数据只能进行多次单个扫描,违背了扫描模式的本意,故用ai做了一个将扫描数据用dma储存在内存的adc三通道采集实验,若有巨佬发现有错望告知。

代码如下:

#include "stm32f4xx_hal.h"  // ?? HAL ????
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "sdram.h"

DMA_HandleTypeDef dma_handle;      // DMA ??
ADC_HandleTypeDef adc_handle;      // ADC ??
uint16_t adc_buffer[3];            // ADC ???????

void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
    __HAL_RCC_GPIOA_CLK_ENABLE();          // ?? GPIOA ??
    __HAL_RCC_ADC1_CLK_ENABLE();           // ?? ADC1 ??
    __HAL_RCC_DMA2_CLK_ENABLE();           // ?? DMA2 ??

    GPIO_InitTypeDef GPIO_Initure;
    GPIO_Initure.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_5;  // ?? PA1?PA2?PA3 ??
    GPIO_Initure.Mode = GPIO_MODE_ANALOG;                      // ??????
    GPIO_Initure.Pull = GPIO_NOPULL;                            // ???????
    GPIO_Initure.Speed = GPIO_SPEED_HIGH;                       // ????
    HAL_GPIO_Init(GPIOA, &GPIO_Initure);                        // ??? GPIOA

    // DMA ??
    dma_handle.Instance = DMA2_Stream0;   // ?? DMA2 ? 0
    dma_handle.Init.Channel = DMA_CHANNEL_0;
    dma_handle.Init.Direction = DMA_PERIPH_TO_MEMORY;           // ?????
    dma_handle.Init.PeriphInc = DMA_PINC_DISABLE;           // ????????
    dma_handle.Init.MemInc = DMA_MINC_ENABLE;                   // ????????
    dma_handle.Init.PeriphInc = DMA_PDATAALIGN_HALFWORD; // ??????? 16 ?
    dma_handle.Init.MemBurst = DMA_MDATAALIGN_HALFWORD;        // ??????? 16 ?
    dma_handle.Init.Mode = DMA_CIRCULAR;                         // ????
    dma_handle.Init.Priority = DMA_PRIORITY_LOW;                 // ????
    dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;             // ?? FIFO ??
    HAL_DMA_Init(&dma_handle);                                    // ??? DMA

    // ?? DMA ? ADC
    __HAL_LINKDMA(hadc, DMA_Handle, dma_handle);                  // ? DMA ? ADC ????
}

void MY_ADC1_Init(void)
{
    adc_handle.Instance = ADC1;
    adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
    adc_handle.Init.ContinuousConvMode = ENABLE;
    adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    adc_handle.Init.DiscontinuousConvMode = DISABLE;
    adc_handle.Init.DMAContinuousRequests = ENABLE;               // ?? DMA ????
    adc_handle.Init.EOCSelection = DISABLE;
    adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;        // ??????
    adc_handle.Init.NbrOfConversion = 3;                          // ?? 3 ???
    adc_handle.Init.Resolution = ADC_RESOLUTION_12B;              // 12 ????
    adc_handle.Init.ScanConvMode = ENABLE;                        // ????
    HAL_ADC_Init(&adc_handle);                                     // ??? ADC
}

void MY_ADC1_ConfigChannels(void)
{
    ADC_ChannelConfTypeDef channelConfig;

    // ???? 1 (PA1)
    channelConfig.Channel = ADC_CHANNEL_1;
    channelConfig.Rank = 1;      // ???????
    channelConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;        // ??????
    channelConfig.Offset = 0;
    HAL_ADC_ConfigChannel(&adc_handle, &channelConfig);

    // ???? 2 (PA2)
    channelConfig.Channel = ADC_CHANNEL_2;
    channelConfig.Rank = 2;      // ???????
    HAL_ADC_ConfigChannel(&adc_handle, &channelConfig);

    // ???? 3 (PA3)
    channelConfig.Channel = ADC_CHANNEL_5;
    channelConfig.Rank = 3;      // ???????
    HAL_ADC_ConfigChannel(&adc_handle, &channelConfig);
}

void Start_ADC_DMA_Conversion(void)
{
    // ?? ADC ????? DMA
    HAL_ADC_Start_DMA(&adc_handle, (uint32_t*)adc_buffer, 3);    // ?? ADC ? DMA,3 ???? 3 ???
}

int main(void)
{
    HAL_Init();                     // ??? HAL ?
    MY_ADC1_Init();                 // ??? ADC1
    MY_ADC1_ConfigChannels();       // ?? ADC ??
    Start_ADC_DMA_Conversion();    // ?? ADC DMA ??
 u16 adcx;
    float temp;
    HAL_Init();                     //???HAL?   
    Stm32_Clock_Init(360,25,2,8);   //????,180Mhz
    delay_init(180);                //???????
    uart_init(115200);              //???USART
    LED_Init();                     //???LED 
    KEY_Init();                     //?????
    SDRAM_Init();                   //???SDRAM
    LCD_Init();                     //???LCD                  //???LCD
    // ???????,?? USART?LCD ?
POINT_COLOR=RED; 
    LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");    
    LCD_ShowString(30,70,200,16,16,"ADC TEST");    
    LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
    LCD_ShowString(30,110,200,16,16,"2016/1/13");      
    POINT_COLOR=BLUE;//???????
    LCD_ShowString(30,130,200,16,16,"ADC1_CH5_VAL:");          
    while (1)
    {
        // ????? dma ?????????? LCD
        // ??:
        LCD_ShowxNum(134, 130, adc_buffer[0], 4, 16, 0);  // ???? 1 ? ADC ?
        LCD_ShowxNum(134, 150, adc_buffer[1], 4, 16, 0);  // ???? 2 ? ADC ?
        LCD_ShowxNum(134, 170, adc_buffer[2], 4, 16, 0);  // ???? 3 ? ADC ?
        HAL_Delay(500);  // ?? 500ms
    }
}
 

相关文章:

STM32F4 adc扫描模式采集实验

做adc采集的时候用扫描模式发现读数据时只能读到一个通道的数据,想显示其他几个通道的数据只能进行多次单个扫描,违背了扫描模式的本意,故用ai做了一个将扫描数据用dma储存在内存的adc三通道采集实验,若有巨佬发现有错望告知。 代…...

软考教材重点内容 信息安全工程师 第17章 网络安全应急响应技术原理与应用

17.1 网络安全应急响应概述 网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。 17.1.1 网络安全应急响应概念 网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。 17.2.3 网络安…...

点击修改按钮图片显示有问题

问题可能出在表单数据的初始化上。在 ave-form.vue 中,我们需要处理一下从后端返回的图片数据,因为它们可能是 JSON 字符串格式。 vue:src/views/tools/fake-strategy/components/ave-form.vue// ... existing code ...Watch(value)watchValue(v: any) …...

Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法

Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8 引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。…...

大模型在术后认知功能障碍预测及临床方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 研究创新点 二、术后认知功能障碍概述 2.1 定义与表现 2.2 危害与影响 2.3 发病机制与相关因素 三、大模型技术原理与应用现状 3.1 大模型技术原理 3.2 大模型在医疗领域的应用 四、基于大模型的术后认知…...

用DeepSeek来帮助学习three.js加载3D太极模形

画一个平面的太极图是很容易,要实现3D的应该会很难 一、参考3D模形效果 看某网页看到一个效果,像一个3D太极球,觉得挺有趣,挺解压的,想进一步去了解下这是如何实现 效果: 链接地址: http://www.…...

【JavaEE进阶】Spring Boot配置文件

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 SpringBoot配置⽂件 举例: 通过配置文件修改端口号 配置⽂件的格式 properties基本语法 读取配置⽂件 properties配置文件的缺点 yml配置⽂件 yml基本语法 yml和proper…...

学习通用多层次市场非理性因素以提升股票收益预测

“Learning Universal Multi-level Market Irrationality Factors to Improve Stock Return Forecasting” 论文地址:https://arxiv.org/pdf/2502.04737 Github地址:https://github.com/lIcIIl/UMI 摘要 深度学习技术与量化交易相结合,在股…...

【Godot4.3】基于绘图函数的矢量蒙版效果与UV换算

概述 在设计圆角容器时突发奇想: 将圆角矩形的每个顶点坐标除以对应圆角矩形所在Rect2的size,就得到了顶点对应的UV坐标。然后使用draw_colored_polygon,便可以做到用图片填充圆角矩形的效果。而且这种计算的效果就是图片随着其填充的图像缩…...

记一些工具(持续更新)

wireshark——网络抓包工具 mitmproxy ——利用中间人攻击进行https抓包的工具(需配合安装由此代理自己签发的根证书到客户机系统) Cloudflare—— 一个网站中间层,通过基于反向代理的内容分发网络(CDN),Cloudflare提供包括CDN、优化工具、安全、分析以…...

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址:GitHub - deepseek-ai/FlashMLA 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天! ​ 一、开源周震撼启幕 继上周预告后,DeepSeek于北京时间今晨9点准时开源「FlashMLA」,打响开源周五连…...

PCL 点云添加高斯噪声

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在点云模型中将所有的点沿其法向量方向随机偏移一定距离,以此来得到点云实体的噪声点,偏移的幅度与点云尺度有关,偏移距离服从高斯分布,以此来获得高斯分布的噪声数据。 二、实现代码 // 标准文件 #include &l…...

通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形

论文标题 英文标题:Improving TSN Traffic Shaping with Constant Bandwidth Server Scheduling 中文标题:通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形 作者信息 作者:Benjamin van Seggelen 指导教师&am…...

软件测试高频面试题

以下是一些软件测试高频面试题: 基础概念类 HTTP和HTTPS的区别:HTTPS使用SSL/TLS协议对传输数据加密,HTTP没有加密;HTTPS可确保数据完整性,防止传输中被篡改,HTTP不保证;HTTP默认用80端口&…...

英语学习DAY5

内心旁白 关于我为什么从2月5号开的这个篇章现在才第五天这件事? 咳咳咳,容许我狡辩一下,我是有事去忙了,我真的很想每日学习英语(信我兄弟们)! 虽然英语学习对我来说真的很难,你…...

如何查看图片的原始格式

问题描述:请求接口的时候,图片base64接口报错,使用图片url请求正常 排查发现是图片格式的问题: 扩展名可能被篡改:如果文件损坏或扩展名被手动修改,实际格式可能与显示的不同,需用专业工具验证…...

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来 在深度学习的优化中,自然梯度下降(Natural Gradient Descent)是一个强大的工具,它利用Fisher信息矩阵(FIM)调整梯度…...

赛前启航 | 三场重磅直播集结,予力微软 AI 开发者挑战赛!

随着微软 AI 开发者挑战赛的火热进行,赛前指导直播已成为众多参赛者获取技术干货、灵感碰撞和实战技巧的绝佳平台。继前两期的精彩呈现,第三、四、五期直播即将接连登场,为开发者们带来更加深入的 AI 技术剖析和项目实战指引。无论你是想进一…...

VMware安装Centos 9虚拟机+设置共享文件夹+远程登录

一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …...

【HarmonyOS Next】地图使用详解(一)

背景 这系列文章主要讲解鸿蒙地图的使用,当前可以免费使用,并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能,轻松完成地图构建工作。需要注意的是,现在测试只能使用实体手机去…...

【NLP 37、激活函数 ③ relu激活函数】

—— 25.2.23 ReLU广泛应用于卷积神经网络(CNN)和全连接网络,尤其在图像分类(如ImageNet)、语音识别等领域表现优异。其高效性和非线性特性使其成为深度学习默认激活函数的首选 一、定义与数学表达式 ReLU&#xff0…...

顶刊配图复现:Origin+DeepSeek完美协同

学习目标: (1)软件掌握熟练安装并配置Origin,掌握基础操作与核心功能。学会利用Origin进行多类型图表绘制及美化。掌握DeepSeek的数据清洗、统计分析与可视化方法。(2)设计能力理解顶刊图表的设计原则&…...

Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器

Fisher信息矩阵与自然梯度下降:机器学习中的优化利器 在机器学习尤其是深度学习中,优化模型参数是一个核心任务。我们通常依赖梯度下降(Gradient Descent)来调整参数,但普通的梯度下降有时会显得“笨拙”,…...

Scratch032(百发百中)

提示:知识回顾 1、排列克隆体的方法 2、复习“发送广播并等待”积木 3、“获取第几个字符”积木的使用 4、使用角色显示得分 前言 提示:中国射箭拥有悠久的历史,是最早进入教育体系的运动项目之一,君子六艺中“礼,乐,射,御,书,数”的射 ,就是指的射箭。这节课我带你…...

DeepSeek技术全景解析:架构创新与行业差异化竞争力

一、DeepSeek技术体系的核心突破 架构设计:效率与性能的双重革新 Multi-head Latent Attention (MLA):通过将注意力头维度与隐藏层解耦,实现显存占用降低30%的同时支持4096超长上下文窗口。深度优化的MoE架构:结合256个路由专家…...

开课倒计时 | 3月1-2日,DeepSeek时代下的可观测性(Observability)认证培训

前言: 随着DeepSeek等前沿AI技术的广泛应用,企业对可观测性的需求日益增长。DeepSeek作为一款强大的AI模型,已经在多个领域展现出其卓越的性能。然而,随着技术复杂性的增加,如何有效监控和优化这些系统成为关键挑战。…...

相似性搜索(2)

在本篇中,我们通过播客相似性搜索为例,进一步研究基于chroma 的相似性搜索: 参考: https://www.kaggle.com/code/switkowski/building-a-podcast-recommendation-engine/notebook 数据集来源: https://www.kaggle.…...

Python天梯赛L1-018-大笨钟详解

018-大笨钟 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点…...

HTTP代理与HTTPS代理的区别及HTTPS的工作原理

在互联网世界中,数据的传输与访问安全性是用户和企业共同关注的焦点。HTTP和HTTPS代理作为两种常用的网络协议代理,它们在工作原理和应用场景上存在显著区别。本文将深入浅出地解析HTTP代理与HTTPS代理的区别,并简明扼要地介绍HTTPS的工作原理…...

【Godot4.3】静态模板字符串函数库

概述 Godot的静态函数从3.4版本一直用到现在的4.3,也曾经编写过不少的静态函数库。 但是一直没怎么用过静态变量。这几天有心重新开发一下静态网页生成器。需要编写一些类,还有保存HTML页面或局部的模板字符串以及生成函数。静态变量就刚好用上了。 这…...