OpenEdv-开源电子网

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

多路ADC转换,ADC的值不更新,永远是起始值,求解决

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-1-17
在线时间
8 小时
发表于 2017-1-17 13:19:20 | 显示全部楼层 |阅读模式
1金钱
如题,硬件已经测试过了,没有问题。可是结果从串口传输到电脑上保持不变,不知道是什么问题呢?

四路ADC.rar

481.58 KB, 下载次数: 200

最佳答案

查看完整内容[请看2#楼]

这个问题我建议你肯透原子的adc ,dma两篇。对应std库在在设置的时候存储区要明白一个通道和多个通道的设置时候,存储数组每个地址对应的通道。这样就很容易了。我一般用多采的时候设置N*M数组,n采样次数,m为采样通道数。这样好设计滤波函数。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2017-1-17 13:19:21 | 显示全部楼层
这个问题我建议你肯透原子的adc ,dma两篇。对应std库在在设置的时候存储区要明白一个通道和多个通道的设置时候,存储数组每个地址对应的通道。这样就很容易了。我一般用多采的时候设置N*M数组,n采样次数,m为采样通道数。这样好设计滤波函数。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-8-1
在线时间
0 小时
发表于 2017-1-17 13:52:47 | 显示全部楼层
串口上传的数据写死了没
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-1-17
在线时间
8 小时
 楼主| 发表于 2017-1-17 15:07:31 | 显示全部楼层
liyujian2014 发表于 2017-1-17 13:52
串口上传的数据写死了没

while循环里边每次都把缓存中的值计算平均值后上传,没有写死呀
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-1-17
在线时间
8 小时
 楼主| 发表于 2017-1-17 16:16:04 | 显示全部楼层
有人帮帮忙不。。。。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-1-17
在线时间
8 小时
 楼主| 发表于 2017-1-17 20:23:49 | 显示全部楼层
额。多通道转换问题,用的STM32F4xx
回复

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2017-1-19 00:06:24 | 显示全部楼层
你这程序错在adc设置部分,四路dma传输传到那里不知?先把一路dma调试清楚会好些。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-1-17
在线时间
8 小时
 楼主| 发表于 2017-1-29 09:42:19 | 显示全部楼层
bg8wj 发表于 2017-1-19 00:06
你这程序错在adc设置部分,四路dma传输传到那里不知?先把一路dma调试清楚会好些。

你好,谢谢你,那么ADC的DMA传输到的地方在库函数应该怎么设置呢?
回复

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2017-2-14 14:45:45 | 显示全部楼层
[mw_shl_code=applescript,true]/* DMA外设初始化配置 */
    DMA_ADC_Handler.Instance                                    = DMA2_Stream0;  //数据流选择
    DMA_ADC_Handler.Init.Channel                            = DMA_CHANNEL_0; //通道选择  
      DMA_ADC_Handler.Init.Direction                        = DMA_PERIPH_TO_MEMORY;//外设到存储器
        DMA_ADC_Handler.Init.PeriphInc                      = DMA_PINC_DISABLE;  //外设地址不增加
      DMA_ADC_Handler.Init.MemInc                           = DMA_MINC_ENABLE;   //存储器地址增加
    DMA_ADC_Handler.Init.PeriphDataAlignment    = DMA_PDATAALIGN_HALFWORD;//字节模式
    DMA_ADC_Handler.Init.MemDataAlignment       = DMA_PDATAALIGN_HALFWORD;//数据半字节
    DMA_ADC_Handler.Init.Mode                               = DMA_NORMAL;
        DMA_ADC_Handler.Init.Priority                       = DMA_PRIORITY_HIGH;
        DMA_ADC_Handler.Init.FIFOMode                       = DMA_FIFOMODE_DISABLE;
     
        HAL_DMA_Init(&DMA_ADC_Handler);
      
        /* 连接DMA */
    __HAL_LINKDMA(&ADC1_Handler,DMA_Handle,DMA_ADC_Handler);
//以上是dma 句柄设置

//adc 部分
void MX_ADC1_Init(void)
{
     ADC_ChannelConfTypeDef sConfig;
// ADC功能配置
  ADC1_Handler.Instance                   = ADC1;
    ADC1_Handler.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV4;   //4分频,ADCCLK=PCLK2/4=90/4=22.5MHZ
  ADC1_Handler.Init.Resolution            = ADC_RESOLUTION_12B;    //12位模式
  ADC1_Handler.Init.ScanConvMode          = ENABLE;              //扫描模式
    ADC1_Handler.Init.ContinuousConvMode    = ENABLE;               //打开连续转换
    ADC1_Handler.Init.DiscontinuousConvMode = DISABLE;             //不连续采样模式
    ADC1_Handler.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE; //软件触发
    ADC1_Handler.Init.ExternalTrigConv      = ADC_SOFTWARE_START;//ADC_EXTERNALTRIGCONV_T1_CC1;
    ADC1_Handler.Init.DataAlign             = ADC_DATAALIGN_RIGHT;  //右对齐   
    ADC1_Handler.Init.NbrOfConversion       = ADC_NUMOFCHANNEL;     //8个转换在规则序列中
    ADC1_Handler.Init.DMAContinuousRequests =   ENABLE;                         //打开DMA请求
  ADC1_Handler.Init.EOCSelection          = ADC_EOC_SEQ_CONV;     //关闭EOC中断
    if (HAL_ADC_Init(&ADC1_Handler) != HAL_OK){Error_Handler();}
     
  // 配置采样通道 1
  sConfig.Channel = ADC_CHANNEL_1;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_144CYCLES;
  if (HAL_ADC_ConfigChannel(&ADC1_Handler, &sConfig) != HAL_OK){Error_Handler();}

    // 配置采样通道 2
。。。。。。。。[/mw_shl_code]
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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