求一个MM32SPIN0230的ADC采集例程

[复制链接]
1476|2
手机看帖
扫描二维码
随时随地手机跟帖
MM957234|  楼主 | 2024-4-27 21:13 | 显示全部楼层 |阅读模式
项目紧急求好心人提供一个求一个MM32SPIN0230的ADC采集例程,官网的还需要移植删减有点麻烦,谢谢叩头

使用特权

评论回复
MM957234|  楼主 | 2024-4-27 21:15 | 显示全部楼层

求一个MM32SPIN0230的ADC采集例程

能编译通过的,ADC DMA采集即可,谢谢

使用特权

评论回复
yangjiaxu| | 2024-5-18 10:01 | 显示全部楼层
你试试这个
#include "mm32.h"

#define ADC_CHANNEL 0
#define ADC_SAMPLE_COUNT 10

uint16_t adc_data[ADC_SAMPLE_COUNT];

void ADC_DMA_Init()
{
    // 初始化ADC
    ADC_InitTypeDef ADC_InitStruct;
    ADC_InitStruct.ADC_Mode = ADC_Mode_Continue;
    ADC_InitStruct.ADC_ScanMode = DISABLE;
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
    ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStruct.ADC_NbrOfChannel = 1;
    ADC_Init(ADC1, &ADC_InitStruct);

    // 配置ADC通道
    ADC_RegularChannelConfig(ADC1, ADC_CHANNEL, 1, ADC_Samctl_239_5);

    // 初始化DMA
    DMA_InitTypeDef DMA_InitStruct;
    DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));
    DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)adc_data;
    DMA_InitStruct.DMA_Direction = DMA_DIR_PeripheralSRC;
    DMA_InitStruct.DMA_BufferSize = ADC_SAMPLE_COUNT;
    DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStruct.DMA_Priority = DMA_Priority_High;
    DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStruct);

    // 启动DMA
    DMA_Cmd(DMA1_Channel1, ENABLE);

    // 启动ADC
    ADC_Cmd(ADC1, ENABLE);
    ADC_DMACmd(ADC1, ENABLE);
}

int main()
{
    // 初始化系统时钟等

    // 初始化ADC和DMA
    ADC_DMA_Init();

    while (1)
    {
        // 等待DMA传输完成
        while (!DMA_GetFlagStatus(DMA1_FLAG_TC1))
        {
        }

        // 数据处理
        for (int i = 0; i < ADC_SAMPLE_COUNT; i++)
        {
            // 处理adc_data[i]
        }

        // 清除DMA传输完成标志
        DMA_ClearFlag(DMA1_FLAG_TC1);
    }
}
但需要自己改哈,肯定不能直接编译通过的,可以参考一下思路

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝