最近搞项目用STM32的片子,真是遇到很多问题,前一段时间遇到串口问题,现在又遇到AD的问题了,又来向各位大大求助了。我的问题如下:
用AD来检测温度值,一段时间就会导致芯片复位,不运行AD芯片就不会复位。
我的AD函数如下:
unsigned char f_MCU_ChkADValue(unsigned int i_Channel)
{
unsigned int DataValue;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // ´ò¿ªÊ±ÖÓ
ADC_DeInit(ADC1);
// Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
// ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
// ת»»ADC1ͨµÀ,ÖÜÆÚ²ÉÑùʱ¼ä
ADC_ChannelConfig(ADC1, i_Channel, ADC_SampleTime_28_5Cycles); // ÓÐÈý¸öADת»»¶Ë¿Ú£¬Èȹ޼ÓÈÈζÈ
// ADC Calibration-ADCУ׼
ADC_GetCalibrationFactor(ADC1);
// Enable the auto delay feature-ÆôÓÃ×Ô¶¯ÑÓʱ¹¦ÄÜ
ADC_WaitModeCmd(ADC1, ENABLE);
// ʹÄÜADC1
ADC_AutoPowerOffCmd(ADC1, ENABLE);
// Enable ADCperipheral[PerIdx]-ÆôÓÃADCÍâÉè[PerIdx]
ADC_Cmd(ADC1, ENABLE);
// Wait the ADCEN falg-µÈ´ýADC1У׼Íê³É
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
//ADC1 regular Software Start Conv
ADC_StartOfConversion(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
DataValue=ADC_GetConversionValue(ADC1);
return DataValue;
}
我在主函数中调用AD采样函数如下:
Ad_Heat3 = f_MCU_ChkADValue(ADC_Channel_13); // 用的13通道
就会一段时间产生复位(估计是看门狗复位)
把上面的调用注释掉以后就不会复位了,百度了半天闹不明白.....
端口初始化如下:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);//
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStruct);
初始化函数只初始化了系统时钟,看门狗,串口和IO口,我是不是AD配置少配置什么东西了?谢谢 |