初级会员

- 积分
- 178
- 金钱
- 178
- 注册时间
- 2019-10-22
- 在线时间
- 46 小时
|
2金钱
用的是蓝桥杯嵌入式开发板,主控STM32F103RBT6,板子上有一个滑动变阻器连接到ADC1通道8-PB0,同时扩展板上利用通道5-PA5做了ADC按键,使用过程中发现这两个引脚单独采AD都是没有问题的,但是一起使用的时候就会出现这两个通道给出的值是反的。
就是说代码采集通道5的时候返回的是通道8的值,采集通道8时返回的是通道5的值
初始化和调用代码如下
void adc_init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 2;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE)
}
u16 Get_adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_55Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
主函数里相关的的代码如下
sprintf(LCD_BUF, "ADC_IN8:%4d", Get_adc(ADC_Channel_8));
LCD_DisplayStringLine(Line2,(u8*)LCD_BUF);
memset(LCD_BUF, 21, 0);
sprintf(LCD_BUF, "ADC_IN5:%4d", Get_adc(ADC_Channel_5));
LCD_DisplayStringLine(Line3,(u8*)LCD_BUF);
memset(LCD_BUF, 21, 0);
下载到板子上后发现ADC_IN8显示的是通道5的值而ADC_IN5显示的是通道8的值。
试了一下其他的通道输出也全都是反过来的,你输出我的我输出你的值,非常离谱。
|
|