基于原子STM32F103RC(STM32Fmini)/STM32F407ZG(STM32F4探索者)的多通道ADC采集,通过MDA传输采集数据。

在学习STM32的时候,发现无论是STM32F103RC还是STM32F407ZG都只有ADC转换的例程和UART DMA的例程。所以写了一份DMA传输ADC的程序,希望对大家有帮助。
程序:使用了STM32F407ZG(STM32F4探索者)的开发板,通过ADC去采集PA5,PA6,PA7引脚的电平。然后由DMA传输,在串口上显示出采集的值。
PS:程序在STM32F1mini上也通用自己对照着改一下IO口和一些通道配置就好。


首先当然是配置我们的IO口:

void My_DAC_IO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

      //初始化ADC1通道5.6.7
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;       //PA5 通道5 PA6 通道6 PA7 通道7
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                             //模拟输入模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;                         //不带上下拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);                                      
}

这里写图片描述这里写图片描述


查阅手册可以看到PA5对应的是ADC的IN5,PA6对应的是ADC的IN6,PA7对应的是ADC的IN7。
这样就配置好了通道。通道也选择的是相近的这方便与DMA传输过程中的地址增加。


接下来配置ADC:

void My_Adc_Init(void)
{
    ADC_CommonInitTypeDef ADC_CommonInitStructure;
    ADC_InitTypeDef ADC_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);


    ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;       //禁止DMA直接访问
    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;                      //ADC独立模式
    ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;                   //4分频
    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles; //采样时间间隔
    ADC_CommonInit(&ADC_CommonInitStructure);

    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                            //连续转换使能,因为这里是转换三个通道
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                          //ADC的对齐模式
    ADC_InitStructure.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值