首页 > 其他分享 >STM32H723 ADC+DMA 误差解决

STM32H723 ADC+DMA 误差解决

时间:2024-10-24 10:50:23浏览次数:1  
标签:DMA HAL Init ADC STM32H723 hadc3 sConfig ADC3

很多论坛提到STM32H723 ADC不准的问题,在安富莱的论坛上很多。实测STM32Cube FW_H7 V1.9.1这个库生成的ADC的驱动代码可以实现ADC的精确测量。
需要注意的是在ADC的初始化后,要对ADC进行校准,如果不进行校准ADC1 ADC2会有50个ADC左右的误差,ADC3 有接近130个ADC值得误差。

`void MX_ADC3_Init(void)
{

/* USER CODE BEGIN ADC3_Init 0 */

/* USER CODE END ADC3_Init 0 */

ADC_ChannelConfTypeDef sConfig = {0};

/* USER CODE BEGIN ADC3_Init 1 */

/* USER CODE END ADC3_Init 1 /
/
* Common config
/
hadc3.Instance = ADC3;
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc3.Init.DataAlign = ADC3_DATAALIGN_RIGHT;
hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
hadc3.Init.LowPowerAutoWait = DISABLE;
hadc3.Init.ContinuousConvMode = ENABLE;
hadc3.Init.NbrOfConversion = 5;
hadc3.Init.DiscontinuousConvMode = DISABLE;
hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc3.Init.DMAContinuousRequests = ENABLE;
hadc3.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL;
hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR;
hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
hadc3.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc3) != HAL_OK)
{
Error_Handler();
}
/
* Configure Regular Channel
/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC3_SAMPLETIME_640CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
sConfig.OffsetSign = ADC3_OFFSET_SIGN_NEGATIVE;
sConfig.OffsetSaturation = DISABLE;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
/
* Configure Regular Channel
/
sConfig.Channel = ADC_CHANNEL_6;
sConfig.Rank = ADC_REGULAR_RANK_2;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
/
* Configure Regular Channel
/
sConfig.Channel = ADC_CHANNEL_7;
sConfig.Rank = ADC_REGULAR_RANK_3;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
/
* Configure Regular Channel
/
sConfig.Channel = ADC_CHANNEL_9;
sConfig.Rank = ADC_REGULAR_RANK_4;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
/
* Configure Regular Channel
/
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = ADC_REGULAR_RANK_5;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN ADC3_Init 2 /
HAL_ADCEx_Calibration_Start(&hadc3,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED);
/
USER CODE END ADC3_Init 2 */

}`
HAL_ADCEx_Calibration_Start 的第一个参数是使用的ADC的句柄,第二个参数表示使用偏移校准模式 第三个参数表示单端模式(ADC3的几个通道都是使用的单端模式)

标签:DMA,HAL,Init,ADC,STM32H723,hadc3,sConfig,ADC3
From: https://www.cnblogs.com/cxw1996/p/18499144

相关文章

  • 化繁为简,使用 ADManager Plus 简化账户生命周期管理
    在IT环境中,编排指的是对工作流、应用程序和系统的协调管理,旨在通过简化流程来优化业务性能。IT管理员可以通过编排,从单个控制台自动执行一系列任务,例如预配账户帐户、数据库管理、事件处理、应用程序和云资源管理。编排对支持分布于本地和云端的IT服务的大型工作流至关重要。......
  • xdma_multi_interrupt
    modulexdma_multi_interrupt(inputwireclk,//时钟信号inputwirerst_n,//复位信号,低电平有效inputwire[15:0]event_trigger,//16位事件信号,触发多个中断outputreg[15:0]usr_irq_req,//用户中断请求信......
  • PDManer 入门教程:超强代码生成工具!
    操作手册说明:https://www.yuque.com/pdmaner/docs/pdmaner-manual下载地址说明:https://gitee.com/robergroup/pdmaner/releases开源博客介绍说明:4.0最新版说明https://my.oschina.net/skymozn/blog/5515012PDman2.2.0下载地址:http://www.downza.cn/soft/278049.htmlPD......
  • 理解ADC:“过采样”算不算是神操作?附带介绍Noise Spectral Density
    前言上回说到“理想ADC”中只存在量化噪声,并且介绍了SNR=6.02N+1.76dB的计算公式。那么,是否意味着“底噪”(NoiseFloor)就是这个SNR的负数呢?先来看一张图,原始出自于ADI的文章(见参考资料[1]),我做了些标注:图1ADCSNR与Noisefloor图中假设了一个12-bit的ADC,......
  • STM32F407 HAL库:双DAC的信号发生器+双ADC采集
    文章目录概要CubeMX配置代码细节1.串口发送:串口重定向:调用HAL库函数:2.串口接收:3.DAC+DMA提前写入的数据:函数生成数据:DAC+DMA程序中调用:4.ADC+DMAADC转换标志位:ADC的使用:5.FFT操作总结概要使用F407内部的DAC由定时器触发并加上DMA操作实现如正弦波、方......
  • podman 无根用户分配系统CPU、内存等系统资源,提示cgroup相关权限不足
    问题:在使用Podman以无根用户(rootless)模式创建容器时,如果遇到分配系统CPU等资源时提示cgroup权限不足,这是因为无根用户没有直接访问cgroup相关资源的权限。以下是一些解决方法(目前采用的办法3临时解决,,主要是更改系统目录权限sudochown-R$USER:$USER/sys/fs/cgro......
  • Shadcn UI:现代前端的灵活组件库
    简要介绍ShadcnUI与其他UI和组件库如MaterialUI、AntDesign、ElementUI的设计理念截然不同。这些库一般通过npm包提供对组件的访问,而ShadcnUI允许用户将单个UI组件的源代码直接下载到项目中,提供了更大的灵活性和定制空间。按照ShadcnUI的说法,ShadcnUI实际......
  • Linux DMA Engine framework(2)_功能介绍及解接口分析
    1.前言从我们的直观感受来说,DMA并不是一个复杂的东西,要做的事情也很单纯直白。因此Linuxkernel对它的抽象和实现,也应该简洁、易懂才是。不过现实却不甚乐观(个人感觉),Linuxkerneldmaengineframework的实现,真有点晦涩的感觉。为什么会这样呢?如果一个软件模块比较复杂、晦涩,要......
  • Linux DMA Engine framework(3)_dma controller驱动
    1.前言本文将从provider的角度,介绍怎样在linuxkerneldmaengine的框架下,编写dmacontroller驱动。2.dmacontroller驱动的软件框架设备驱动的本质是描述并抽象硬件,然后为consumer提供操作硬件的友好接口。dmacontroller驱动也不例外,它要做的事情无外乎是:1)抽象并控制DMA控......
  • Linux DMA Engine framework(1)_概述
    1.前言前面文章介绍“LinuxMMCframework”的时候,涉及到了MMC数据传输,进而不可避免地遭遇了DMA(DirectMemoryAccess)。因而,择日不如撞日,就开几篇文章介绍Linux的DMAEngineframework吧。本文是DMAEngineframework分析文章的第一篇,主要介绍DMAcontroller的概念、术语(从硬......