STM32H743VIT6 ADC DMA 读取数据

STM32H743VIT6 ADC DMA 读取数据

目的:使用DMA方式,连续读取4个ADC通道数据,从串口发送到上位机。

工作环境:STM32CubeIDE1.7.0, H743VIT6芯片。

配置操作步骤如下:

 

 

 

电阻的测试结果:

外接可调

关键代码,指定存储空间的位置。

#define ADC_CONVERTED_DATA_BUFFER_SIZE ((uint32_t)  200)

uint16_t ADC_DATA[ADC_CONVERTED_DATA_BUFFER_SIZE] __attribute__((section(".ARM.__at_0x24000000")));

关键代码如下:

#define ADC_CONVERTED_DATA_BUFFER_SIZE ((uint32_t)  200)
uint16_t ADC_DATA[ADC_CONVERTED_DATA_BUFFER_SIZE] __attribute__((section(".ARM.__at_0x24000000")));
void ShowADCResult(void)
{
	uint32_t ad1,ad2,ad3,ad4;
	uint16_t i;
	for(i = 0,ad1=0,ad2=0,ad3=0,ad4=0; i < ADC_CONVERTED_DATA_BUFFER_SIZE;)
		{
			ad1 += ADC_DATA[i++];
			ad2 += ADC_DATA[i++];
			ad3 += ADC_DATA[i++];
			ad4 += ADC_DATA[i++];
		}
		ad1 /= 50;//累加50次,�??后求均�??
		ad2 /= 50;
		ad3 /= 50;
		ad4 /= 50;
		printf("\r\n******** ADC DMA Example ********\r\n\r\n");
		printf(" AD1 value = %1.3fV \r\n", ad1*3.3f/65536);//转换后的真实电压
		printf(" AD2 value = %1.3fV \r\n", ad2*3.3f/65536);
		printf(" AD3 value = %1.3fV \r\n", ad3*3.3f/65536);
		printf(" AD4 value = %1.3fV \r\n", ad4*3.3f/65536);
}
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE BEGIN 4 */
/**
  * @brief  Conversion complete callback in non-blocking mode
  * @param  hadc: ADC handle
  * @retval None
  */
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{
  /* Invalidate Data Cache to get the updated content of the SRAM on the first half of the ADC converted data buffer: 32 bytes */
  SCB_InvalidateDCache_by_Addr((uint32_t *) &ADC_DATA[0], ADC_CONVERTED_DATA_BUFFER_SIZE);
}

/**
 * @brief  Conversion DMA half-transfer callback in non-blocking mode
 * @param  hadc: ADC handle
 * @retval None
  */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
   /* Invalidate Data Cache to get the updated content of the SRAM on the second half of the ADC converted data buffer: 32 bytes */
  SCB_InvalidateDCache_by_Addr((uint32_t *) &ADC_DATA[ADC_CONVERTED_DATA_BUFFER_SIZE/2], ADC_CONVERTED_DATA_BUFFER_SIZE);
}

这几天在调试ADC与DMA时,发现2个问题,这里记录以下,方便自己,也供大家参考。

1,ADC采集完成后能正确产生DMA请求,数据不对。解决的最快办法就是修改CubeIDE CORTEX_M7的RAM配置,同时用__attribute__属性修改ADC buffer到一个DMA可以访问的地址。

2,CubeIDE生成的代码中, 调整初始化顺序,先初始化DMA再初始化ADC。默认生成的代码有时候ADC先于DMA初始化,导致数据采集的数据不正常,需要手动调整一下初始化顺序。

代码的下载链接:STM32CubeIDE_ADC_DMA_4channle-单片机文档类资源-CSDN下载 

### STM32H743VGT6 HAL库使用教程与文档下载 对于STM32H743VGT6微控制器而言,获取其HAL库的相关资料和教程可以通过多种途径实现。官方提供的资源是最权威且最全面的选择之一。 #### 官方网站与STMCubeMX工具 访问意法半导体官方网站可以找到针对不同系列的STM32产品所对应的固件包和支持文件。特别是通过STM32CubeMX这一图形化配置工具,不仅可以方便地初始化项目设置,还能一键下载对应型号处理器的HAL库源码及其配套的手册说明[^1]。 #### CSDN及其他技术社区平台 除了厂商本身外,在线的技术交流平台上也存在大量由开发者贡献的内容。例如CSDN这样的中文编程论坛里经常会有用户上传自己整理过的关于特定硬件平台开发指南或是遇到问题后的解决方案分享。像提到的`STM32CubeIDE_ADC_DMA_4channel`这类具体应用场景下的实例代码同样可以在这些地方寻得灵感。 #### 参考手册的重要性 当深入研究某个功能模块时,《参考手册》是非常重要的参考资料。它详细描述了各个寄存器的功能以及如何利用它们来完成预期的操作。虽然这里讨论的是F4系列的例子,但对于理解其他家族成员如H7来说也是非常有帮助的。掌握阅读《参考手册》的方法能够使工程师更加灵活自如地运用各种特性而不仅仅局限于简单的复制粘贴操作[^3]。 为了更好地适应新器件的特点并充分利用高性能的优势,建议从以下几个方面入手寻找适合自己的学习材料: - **查阅最新的数据表和技术笔记** - **参与活跃的技术支持群组或论坛讨论** - **观看在线课程视频**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值