用的是APM32F072RBT6官方例程,修改ADC采样通道为ADC8--PB0 ADC9--PB1,例程只要单通道转换,请教大神如何获取两个通道的值,代码需要配置哪些参数?int main(void)
{
uint32_t adcData = 0;
uint32_t voltage = 0;
uint32_t adcData2 = 0;
uint32_t voltage2 = 0;
APM_MINI_LEDInit(LED2);
APM_MINI_LEDInit(LED3);
APM_MINI_COMInit(COM1);
/** TMR1 Configuration */
TMR1Init();
/** ADC Configuration */
ADCInit();
/** Wait until ADC is ready */
while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY));
ADC_StartConversion();
for (;;)
{
while (ADC_ReadStatusFlag(ADC_FLAG_CC) == RESET);
/** Read ADC Conversion value*/
adcData = ADC_ReadConversionValue();
/** voltage(mV) = adcData * (3300mV / 4095) */
voltage = (adcData*3300)/4095;
/** output to serial port*/
printf("\r\n volatage : %d\r\n", voltage);
}
}
void ADCInit(void)
{
GPIO_Config_T gpioConfig;
ADC_Config_T adcConfig;
/** RCM Enable*/
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);
/** GPIO Configuration */
gpioConfig.pin = GPIO_PIN_0|GPIO_PIN_1;
gpioConfig.mode = GPIO_MODE_AN;
gpioConfig.pupd = GPIO_PUPD_PU;
GPIO_Config(GPIOB, &gpioConfig);
/** ADC Configuration */
ADC_Reset();
ADC_ConfigStructInit(&adcConfig);
/** Set resolution*/
adcConfig.resolution = ADC_RESOLUTION_12B;
/** Set dataAlign*/
adcConfig.dataAlign = ADC_DATA_ALIGN_RIGHT;
/** Set scanDir*/
adcConfig.scanDir = ADC_SCAN_DIR_UPWARD;
/** Set convMode continous*/
adcConfig.convMode = ADC_CONVERSION_SINGLE;
// adcConfig.convMode = ADC_CONVERSION_CONTINUOUS;
/** Set extTrigConv*/
adcConfig.extTrigConv = ADC_EXT_TRIG_CONV_TRG1;
/** Set TrigEdge*/
adcConfig.extTrigEdge = ADC_EXT_TRIG_EDGE_RISING;
ADC_Config(&adcConfig);
ADC_ConfigChannel(ADC_CHANNEL_8 , ADC_SAMPLE_TIME_239_5);
// ADC_ConfigChannel(ADC_CHANNEL_9 , ADC_SAMPLE_TIME_239_5);
/** Calibration*/
ADC_ReadCalibrationFactor();
/** Enable ADC*/
ADC_Enable();
}
/*!
* @brief TMR1 Init
*
* @param None
*
* @retval None
*
* @note
*/
void TMR1Init(void)
{
TMR_TimeBase_T timeBaseConfig;
TMR_OCConfig_T occonfig;
/** Enable Clock*/
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_TMR1);
/** Set clockDivision = 1 */
timeBaseConfig.clockDivision = TMR_CKD_DIV1;
/** Up-counter */
timeBaseConfig.counterMode = TMR_COUNTER_MODE_UP;
/** Set divider = 47.So TMR1 clock freq ~= 48/(47 + 1) = 1MHZ */
timeBaseConfig.div = 4799 ;
/** Set counter = 0xff */
timeBaseConfig.period = 0xFF;
/** Repetition counter = 0x0 */
timeBaseConfig.repetitionCounter = 0;
TMR_ConfigTimeBase(TMR1, &timeBaseConfig);
/** PWM1 mode */
occonfig.OC_Mode = TMR_OC_MODE_PWM1;
/** Idle State is reset */
occonfig.OC_Idlestate = TMR_OCIDLESTATE_RESET;
/** NIdle State is reset */
occonfig.OC_NIdlestate = TMR_OCNIDLESTATE_RESET;
/** Enable CH1N ouput */
occonfig.OC_OutputNState = TMR_OUTPUT_NSTATE_ENABLE;
/** Enable CH1 ouput */
occonfig.OC_OutputState = TMR_OUTPUT_STATE_ENABLE;
/** CH1 polarity is high */
occonfig.OC_Polarity = TMR_OC_POLARITY_HIGH;
/** CH1N polarity is high */
occonfig.OC_NPolarity = TMR_OC_NPOLARITY_HIGH;
/** Set compare value = 0x01 */
occonfig.Pulse = 0x1;
TMR_OC4Config(TMR1, &occonfig);
/** Enable PWM output */
TMR_EnablePWMOutputs(TMR1);
/** Enable TMR1 */
TMR_Enable(TMR1);
}
|