OpenEdv-开源电子网

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

ADC1注入通道4个序列 扫描 读数据 但都是PA1的数据 其余读不到 神们帮我看看哪有问题

[复制链接]

6

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-4-16
在线时间
0 小时
发表于 2015-4-16 15:34:44 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "adc.h" #include "delay.h" #include "led.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK STM32F407开发板 //ADC 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //创建日期:2014/5/6 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2014-2024 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //初始化ADC void Adc_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; NVIC_InitTypeDef NVIC_InitStructure_ADC_inject; //??? RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟 //先初始化ADC1通道1-4 IO口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PA5 通道1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA5 通道2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PA5 通道3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道4 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1复位 RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); //复位结束 //ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式 ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟 ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能 ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div6;//预分频4分频。ADCCLK=PCLK2/4=84/6=14Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化 ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//关闭连续转换,注入不支持 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐 ADC_InjectedChannelConfig( ADC1,ADC_Channel_0,1,ADC_SampleTime_480Cycles); ADC_InjectedChannelConfig( ADC1,ADC_Channel_1,2,ADC_SampleTime_480Cycles); ADC_InjectedChannelConfig( ADC1,ADC_Channel_4,3,ADC_SampleTime_480Cycles); ADC_InjectedChannelConfig( ADC1,ADC_Channel_5,4,ADC_SampleTime_480Cycles); ADC_InjectedSequencerLengthConfig(ADC1,4); //ADC1 4 inject sequencer ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化 ADC_ITConfig(ADC1, ADC_IT_JEOC,ENABLE);//开启ADC_inject转换结束中断。 NVIC_InitStructure_ADC_inject.NVIC_IRQChannel=ADC_IRQn; //ADC中断 NVIC_InitStructure_ADC_inject.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1 NVIC_InitStructure_ADC_inject.NVIC_IRQChannelSubPriority=0x03; //子优先级3 NVIC_InitStructure_ADC_inject.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure_ADC_inject); ADC_Cmd(ADC1, ENABLE);//开启AD转换器NVIC_IRQChannel } //ADC中断服务函数 void ADC_IRQHandler(void) { u16 ADC_VALUE; if(ADC_GetFlagStatus(ADC1,ADC_IT_JEOC)==1) { ADC_VALUE=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1); printf("1:%.4d ",ADC_VALUE ); ADC_VALUE=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_2); printf("2:%.4d ",ADC_VALUE ); ADC_VALUE=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_3); printf("3:%.4d ",ADC_VALUE ); ADC_VALUE=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_4); printf("4:%.4d\r\n",ADC_VALUE ); ADC1->SR&=~(1<<2); //清除中断 } } //获得ADC值 //ch: @ref ADC_channels //通道值 0~16取值范围为:ADC_Channel_0~ADC_Channel_16 //返回值:转换结果 u16 Get_Adc(u8 ch) { ADC_SoftwareStartInjectedConv(ADC1); //Enables the ADC1 software start conversion of the injected channels. //设置指定ADC的规则组通道,一个序列,采样时间 // ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles ); //ADC1,ADC通道,480个周期,提高采样时间可以提高精确度 //ADC_SoftwareStartConv(ADC1); //使能指定的ADC1的软件转换启动功能 // while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果 } //获取通道ch的转换值,取times次,然后平均 //ch:通道编号 //times:获取次数 //返回值:通道ch的times次转换结果平均值 [/mw_shl_code]

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-16 22:41:09 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 11:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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