STM32H7实现8通道ADC采集(软件触发+DMA传输)

使用CubeMX工具,对DMA进行配置。
CubeMX工程下载
dma相关的配置比较简单,主要是adc配置相关的修改:
数据要设置成DMA循环模式ADC_CONVERSIONDATA_DMA_CIRCULAR;
溢出操作要设置为覆盖ADC_OVR_DATA_OVERWRITTEN;
主函数逻辑代码如下:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "adc.h"
#include "dma.h"

u16 buffer[128];
int main(void)
{
    u16 adcx;
    //Cache_Enable();                 //打开L1-Cache
    HAL_Init();                           //初始化HAL库
    Stm32_Clock_Init(200, 2, 2, 2); //设置时钟,400Mhz
    delay_init(400);                        //延时初始化
    uart_init(115200);                  //串口初始化
    printf("hello\r\n");
    MX_DMA_Init();
    MX_ADC1_Init();
    HAL_ADC_Start_DMA(&hadc1, (uint32_t *)buffer, 16);
    while (1)
    {
        printf("\r\nvalue:");
        for (int i = 0; i < 32; i++)
        {
            if (i % 8 == 0)   printf("\r\n");
            printf("%d\t", buffer[i]);              //返回最近一次ADC1规则组的转换结果
        }
        delay_ms(500);
    }
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
    printf("DMA transfer complete\r\n");
}
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
{
    printf("DMA Half transfer complete\r\n");
}

void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
{
    printf("DMA transfer error\r\n");
}



void Error_Handler(void)
{
    /* USER CODE BEGIN Error_Handler_Debug */
    /* User can add his own implementation to report the HAL error return state */

    /* USER CODE END Error_Handler_Debug */
}

单次转换完成的效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值