OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5898|回复: 5

求助,关于STM8L051F3芯片,多路ADC采集DMA传输遇到的问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-4-5
在线时间
10 小时
发表于 2016-8-23 15:31:26 | 显示全部楼层 |阅读模式
5金钱
新人求助使用STM8L051F3主控芯片的ADC循环采样DMA传输功能,遇到DMA传输位数变动,采样值交换的问题。
还不能确定是ADC触发DMA的错误还是DMA传输的错误,求大神帮助。
以下是主要代码:
主函数:
void main(void)
{

//  GPIO_Init(LED_PORT,LED_PINS,GPIO_Mode_Out_PP_Low_Fast);

  GPIO_Init(GPIOC,GPIO_Pin_0,GPIO_Mode_Out_PP_Low_Fast);
  GPIO_Init(GPIOC,GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Fast);
  GPIO_Init(GPIOB,GPIO_Pin_0,GPIO_Mode_Out_PP_Low_Fast);


  Tim2_Init();//向量21 200MS定时处理治疗进程和1S定时
  Tim3_Init();//PWM

  DMA_InitConfig();

  ADC_InitConfig();//ADC8位分辨率

  enableInterrupts();

  GPIO_SetBits(GPIOA,GPIO_Pin_1);

while (1)
{

}


}
DMA初始化配置
void DMA_InitConfig(void)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);

  SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);

//*******************************************************************

  DMA_Init( DMA1_Channel0,
            BUFFER_ADDRESS,
            ADC1_DR_ADDRESS,
            2,
            DMA_DIR_PeripheralToMemory,
            DMA_Mode_Circular,
            DMA_MemoryIncMode_Inc,
            DMA_Priority_VeryHigh,
            DMA_MemoryDataSize_HalfWord);

   /* DMA Channel0 enable */
  DMA_Cmd(DMA1_Channel0, ENABLE);

  /* Enable DMA1 channel0 Transfer complete interrupt */
//  DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);

  /* DMA enable */
  DMA_GlobalCmd(ENABLE);



}


宏定义
#define ADC1_DR_ADDRESS ((uint16_t)0x5344)
#define BUFFER_SIZE     ((uint8_t)0x02)
#define BUFFER_ADDRESS  ((uint32_t)DMAResult)


ADC初始化配置
void ADC_InitConfig(void)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

  ADC_Init(ADC1,ADC_ConversionMode_Continuous,ADC_Resolution_12Bit,ADC_Prescaler_2);

  ADC_SamplingTimeConfig(ADC1,ADC_Group_SlowChannels,ADC_SamplingTime_48Cycles);

  ADC_Cmd(ADC1,ENABLE);

  GPIO_Init(GPIOB,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT);//按键1
  GPIO_Init(GPIOB,GPIO_Pin_6,GPIO_Mode_In_FL_No_IT);//按键2

  ADC_ChannelCmd(ADC1,ADC_Channel_12,ENABLE);//PB6
  ADC_ChannelCmd(ADC1,ADC_Channel_13,ENABLE);//PB5

// ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);

  ADC_DMACmd(ADC1,ENABLE);

  ADC_SoftwareStartConv(ADC1);

//  ADC_DMARequestAfterLastTransferCmd();



}

运行后查看寄存器与存储数组







可以看到出现两位通道数值交换问题,为什么呢?
数据位数寄存器C0NDTR并不一直为2.但是配置的BUFFERSIZE是2。
请大神给予解答,不胜感激

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-4-5
在线时间
10 小时
 楼主| 发表于 2016-8-24 14:00:18 | 显示全部楼层
一天了仍然没有解决,看寄存器是会出现End of conversion中断和OVERRUN中断的,求助求助
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2016-8-24 20:43:32 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-4-5
在线时间
10 小时
 楼主| 发表于 2016-8-25 15:53:44 | 显示全部楼层
实在找不到DMA的问题出在哪,换了单通道轮询方式了
回复

使用道具 举报

1

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2015-12-26
在线时间
47 小时
发表于 2019-7-24 21:34:42 | 显示全部楼层
304069320 发表于 2016-8-25 15:53
实在找不到DMA的问题出在哪,换了单通道轮询方式了

楼主解决了没?
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-8-5
在线时间
14 小时
发表于 2019-8-5 21:37:22 | 显示全部楼层
找到原因没有我的也是这样的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 21:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表