OpenEdv-开源电子网

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

STM32F4片内AD中断方式循环采集各通道数据

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-6-5
在线时间
13 小时
发表于 2019-12-5 10:29:47 | 显示全部楼层 |阅读模式
最近项目用到了F4单片机的片内AD,在网上搜索到的中断采集方式介绍都不详细,现分享一下自己调试通过的代码,希望对大家有所帮助,如有不足望指导,谢谢!!!
   一、目的:使用多通道中断方式进行采集
二、实施步骤:
1、配置ADC
    企业微信截图_15755121808763.png
   ->开启扫描模式
->开启EOC中断
->开启连续转换
->设置通道总数量,即你要用几个通道进行转换(勿忘)
2、ADC回调函数内配置各模拟输入引脚,选为模拟不带上下拉.
3、配置ADC通道:
       企业微信截图_157551223022.png
  ->  配置第几个通道,第几次转换,转换时间,以上图为例,因为在初始化中配置通道总数为3个,所以通道5为第一次转换,通道6第二次转换,通道9第三次转换,采样周期 480个时钟周期
  ->以中断方式开启ADC(勿忘此处必须以中断方式开启)
  ->配置中断优先级并开启AD中断
4、重写ADC中断回调函数以及服务函数:
    企业微信截图_15755122489249.png
  ->  在服务函数内需要进行计数判断当前中断的转换值属于哪一个通道,因为在通道配置内设置的顺序为通道5,通道6,通道9,切为扫描模式转换,所以进入中断的顺序即转换的顺序也为5,6,9,因此此处直接判断计数值将转换数值放入相应位置即可。(此处直接操作寄存器提取转换数值速度会快很多)
5、程序源码:
void MY_ADC_Init(void)
{          //ADC初始化程序
    ADC1_Handler.Instance=ADC1;
    ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;  
    ADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B;            
    ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT;           
    ADC1_Handler.Init.ScanConvMode=ENABLE;      //开启扫描模式            
    ADC1_Handler.Init.EOCSelection=ENABLE;      //开启EOC中断        
    ADC1_Handler.Init.ContinuousConvMode=ENABLE;//开启连续按转换               
    ADC1_Handler.Init.NbrOfConversion=3;        //通道总数为3                 
    ADC1_Handler.Init.DiscontinuousConvMode=DISABLE;         
    ADC1_Handler.Init.NbrOfDiscConversion=0;                  
    ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;      
    ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;
    ADC1_Handler.Init.DMAContinuousRequests=DISABLE;            
    HAL_ADC_Init(&ADC1_Handler);                                
}
void ch_config (void)   
{  //通道配置
    ADC_ChannelConfTypeDef ADC1_ChanConf;
   
    ADC1_ChanConf.Channel=ADC_CHANNEL_5;    //通道5                              
    ADC1_ChanConf.Rank=1;                   //第一次转换                              
    ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES;//转换周期              
    ADC1_ChanConf.Offset=0;                 
    HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf);               
         ADC1_ChanConf.Channel=ADC_CHANNEL_6;    //通道6                             
    ADC1_ChanConf.Rank=2;                   //第二次转换                             
    ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES;                 
    ADC1_ChanConf.Offset=0;                 
    HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf);                 
       
         ADC1_ChanConf.Channel=ADC_CHANNEL_9;    //通道9                           
    ADC1_ChanConf.Rank=3;                   //第三次转换                           
    ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES;                 
    ADC1_ChanConf.Offset=0;                 
    HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf);                 
                        
    HAL_ADC_Start_IT(&ADC1_Handler);         //必须以中断方式开启                             
       
         HAL_NVIC_SetPriority(ADC_IRQn,1,0);      //中断优先级
    HAL_NVIC_EnableIRQ(ADC_IRQn);                  //开启中断
}
void ADC_IRQHandler(void)
{    //回调函数
            HAL_ADC_ConvCpltCallback(&ADC1_Handler);                            
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{  //服务函数,真正要干的事
     nn++;       
     HAL_NVIC_ClearPendingIRQ(ADC_IRQn); //清除中断
      switch(nn)                                   //判断相应通道值,存入相应位置
    {
        case 1:
          aa=ADC1_Handler.Instance->DR;
                        break;
        case 2:
          bb=ADC1_Handler.Instance->DR;
                       //nn=0;
                       break;
         case 3:
       cc=ADC1_Handler.Instance->DR;
                         nn=0;
                       break;
     }
}


STM32F429片内AD使用总结.rar (105.03 KB, 下载次数: 18)
唯有看遍世间繁华,方能笑对人生百态.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-6-5
在线时间
13 小时
 楼主| 发表于 2019-12-5 10:31:41 | 显示全部楼层
文本有些没对齐还望见谅
唯有看遍世间繁华,方能笑对人生百态.
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-5 10:34:34 | 显示全部楼层
帮顶                                             
成功没有捷径
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-5 10:34:55 | 显示全部楼层
感谢楼主分享                     
成功没有捷径
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-6-5
在线时间
13 小时
 楼主| 发表于 2019-12-5 10:53:51 | 显示全部楼层

没事,就是希望有人遇到的时候能有点参考,不然真头疼
唯有看遍世间繁华,方能笑对人生百态.
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-5 10:54:51 | 显示全部楼层
ズJYLDXズ595 发表于 2019-12-5 10:53
没事,就是希望有人遇到的时候能有点参考,不然真头疼

但还是要感谢你呀,
成功没有捷径
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-12-5 14:05:39 | 显示全部楼层
谢谢分享!
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-26 09:13:02 | 显示全部楼层
感谢楼主分享,现在我好像要用到了,不过是在串口助手上发送指令,出发相对应的中断,执行相对应的功能
成功没有捷径
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-26 09:14:55 | 显示全部楼层
                              
成功没有捷径
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-6-5
在线时间
13 小时
 楼主| 发表于 2019-12-27 09:00:41 | 显示全部楼层

??????????????
唯有看遍世间繁华,方能笑对人生百态.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 01:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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