采用stvd +库函数。
void ADC1_INIT(void)
{
ADC1_DeInit();
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);
// ADC1_ScanModeCmd(ENABLE);//启用扫描模式
// ADC1_DataBufferCmd(ENABLE);//启用缓存寄存器存储数据
ADC1_ITConfig(ADC1_IT_EOCIE, DISABLE);
ADC1_Cmd(ENABLE);
ADC1_StartConversion();
}
u16 ADC1_GET(void)
{
FlagStatus flag_status; //设定标志位 SET/RESET
u16 ad_value=0;
ADC1_StartConversion();
flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
// flag_status = ADC1_GetFlagStatus(ADC1_FLAG_AWS4);
if (flag_status == SET) // SET or RESET
{
// flag_status=RESET;
// ADC1_ClearFlag(ADC1_FLAG_EOC);
ad_value=ADC1_GetConversionValue();
}
return ad_value;
}
一直进不了if,查不到转换完成标志位置位,返回结果一直是00。注释掉判断标致位这段的话,能正常采集。
采用的是库函数2.1版
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
最近刚用过,贴上我的单次转换模式,IAR下面的,看对你是否有帮助
#include "App.h"
/*******************************************************************************
* @函数名称 ADCInit
* @函数说明 ADC初始化
* @输入参数 无
* @输出参数 无
* @返回参数 无
*******************************************************************************/
void ADCInit(void)
{
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D6, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3, DISABLE);
ADC1_Cmd(DISABLE);
}
/*******************************************************************************
* @函数名称 ADCGet
* @函数说明 ADC获取转换值
* @输入参数 无
* @输出参数 AD转换值
* @返回参数 无
*******************************************************************************/
u16 ADCGet(void)
{
FlagStatus ADCRdy = RESET;
ADC1_StartConversion();
do
{
ADCRdy = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
}
while(ADCRdy == RESET); // SET or RESET
return (ADC1_GetConversionValue());
}
对了,我转换前才用ADC1_Cmd(ENABLE),我的产品要省电一点,ADC要400uA呢,这里别误导你了
你只 ADC1_StartConversion(); 了一次吗?
我看手册说要两次 ADON的
多谢,用你的 do while 的方法可以搞定了。
看来库函数里的if 有问题还是我那个库函数中文参考有问题。
一周热门 更多>