打印

关于GD32F150C8T6 ADC+DMA取数问题

[复制链接]
3153|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mrjiang88178|  楼主 | 2016-12-1 19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,用GD32F150C8T6这颗芯片,用PADC+DMA电压值,IO口为PA4,但是取到的值永远是第一次取到的值,不会改变。配置代码如下

GPIO配置GPIO_InitStructure.GPIO_Pin = GPIO_PIN_4 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AN;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC配置
    void ADC_Configuration(void)
{
    ADC_InitPara ADC_InitStructure;
   
    ADC_InitStructure.ADC_Mode_Scan = ENABLE;
    ADC_InitStructure.ADC_Mode_Continuous = DISABLE;
    ADC_InitStructure.ADC_Trig_External = ADC_EXTERNAL_TRIGGER_MODE_NONE;
    ADC_InitStructure.ADC_Data_Align = ADC_DATAALIGN_RIGHT;
    ADC_InitStructure.ADC_Channel_Number = 2;
    ADC_Init(&ADC_InitStructure);
   
    /* Configure ADC regular channelx */
    ADC_RegularChannel_Config(ADC_CHANNEL_4, 1, ADC_SAMPLETIME_239POINT5);
   
    /* Enable ADC DMA */
    ADC_DMA_Enable(ENABLE);
   
    /* Enable ADC */
    ADC_Enable(ENABLE);
   
    ADC_Calibration();
     
    /* Start ADC Software Conversion */
    ADC_SoftwareStartConv_Enable(ENABLE);
}

DMA配置
  void DMA_Configuration(void)
{
    DMA_InitPara DMA_InitStructure;
   
    DMA_DeInit(DMA1_CHANNEL1);
    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC_RDTR_Address;//设置 DMA 传输的外设基地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&AD_Value;//内存基地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC;//设置数据传输方向
    DMA_InitStructure.DMA_BufferSize = 2;//设置一次传输数据量的大小
    DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;//设置传输数据的时候外设地址是不变还是递增
    DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;//设置传输数据时候内存地址 是否递增
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_HALFWORD;//设置外设的数据长度是为字节传输
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_HALFWORD;//设置内存的数据长度
    DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;//设置 DMA 模式是否循环采集
    DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;//设置 DMA 通道的优先级
    DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;//设 置 是 否 是 存 储 器 到 存 储 器 模 式 传 输
    DMA_Init(DMA1_CHANNEL1, &DMA_InitStructure);
   
    /* Enable DMA1 channel1 */
    DMA_Enable(DMA1_CHANNEL1, ENABLE);
}
请高手不吝赐教,谢谢
沙发
Mrjiang88178|  楼主 | 2016-12-1 19:28 | 只看该作者
自己顶下

使用特权

评论回复
板凳
咫音| | 2016-12-2 10:24 | 只看该作者
ADC+DMA,有例程可以参考吧

使用特权

评论回复
地板
Mrjiang88178|  楼主 | 2016-12-2 12:36 | 只看该作者
咫音 发表于 2016-12-2 10:24
ADC+DMA,有例程可以参考吧

GD的例程很少,都是参照着配置,但是出不来

使用特权

评论回复
5
chenlei1910| | 2016-12-3 15:18 | 只看该作者
  ADC_InitStructure.ADC_Mode_Continuous = DISABLE;连续转换要开启,你的关了

使用特权

评论回复
6
Mrjiang88178|  楼主 | 2016-12-3 23:16 | 只看该作者
chenlei1910 发表于 2016-12-3 15:18
ADC_InitStructure.ADC_Mode_Continuous = DISABLE;连续转换要开启,你的关了

正解,其实我也发现了,结贴。

使用特权

评论回复
7
wangguanfu| | 2016-12-4 09:28 | 只看该作者
gd32f130/150  用哪个库

使用特权

评论回复
8
Mrjiang88178|  楼主 | 2016-12-5 11:03 | 只看该作者
wangguanfu 发表于 2016-12-4 09:28
gd32f130/150  用哪个库

gd150自带的库

使用特权

评论回复
9
comeon201208| | 2016-12-7 22:47 | 只看该作者
DMA的合理利用,可以提高adc的数据采集效率的

使用特权

评论回复
10
Mrjiang88178|  楼主 | 2016-12-12 09:35 | 只看该作者
comeon201208 发表于 2016-12-7 22:47
DMA的合理利用,可以提高adc的数据采集效率的

是的

使用特权

评论回复
11
shenmu2012| | 2016-12-13 21:17 | 只看该作者
DMA的合理利用非常有效的,对ad数据的采集与传输而言

使用特权

评论回复
12
Dennis-Zhou| | 2016-12-21 20:08 | 只看该作者
Mrjiang88178 发表于 2016-12-2 12:36
GD的例程很少,都是参照着配置,但是出不来

照猫画虎,和STM32的差不了多少的。

使用特权

评论回复
13
baimiaocun2015| | 2016-12-22 22:30 | 只看该作者
采用DMA 的模式进行AD数据的采集的,很快捷的。

使用特权

评论回复
14
kingpower2019| | 2020-3-7 11:37 | 只看该作者
    ADC_InitStructure.ADC_Mode_Scan = DISABLE;  // //一个通道不用扫描
    ADC_InitStructure.ADC_Mode_Continuous = ENABLE;
  ADC_InitStructure.ADC_Channel_Number = 1;  //一个通道所以要用1

使用特权

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

本版积分规则

4

主题

33

帖子

0

粉丝