c_lass 发表于 2017-9-1 16:57:58

STM32F302 模拟比较器输出问题

         测试STM32F302RB 的模拟比较器的时候 使用PA3,PA4作为 COMPARE2 D的输入,PA2作为COMPARE2的输出, 无论PA3>PA4 还是PA4>PA3 PA2的电平都不翻转。为0.1-0.5V,我以为是我配置除了问题,拿cubemax 配置了一下仍然不能解决问题,结合前段时候用它测试 TIM15 更新事件产生TRGO 触发ADC转换DMA转移数据,使能DMA1_Channel_1中断,中断只进一次,觉得STM32F3系列有较多问题,去年同事用STM32F334做LLC,然后又放弃了,换TI 的 ucd3138(查了下它的AC/DC方案可以做 1KW 99%效率) ,好像官方给的例程就有问题。
测试代码如下:
                   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;                  //PA3 COMPARE2+PA4 COMPARE2-
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_2;                  //PA2 COMPARE2_OUT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_8);
   
//    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
//    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                  
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   
   
//COMP_StructInit(&COMP_InitStructure);
//COMP_InitStructure.COMP_InvertingInput = COMP_InvertingInput_DAC1OUT1;      // 1/2 VREFINT×÷Ϊ±È½ÏÆ÷¸º¼«ÊäÈë
//COMP_InitStructure.COMP_Output = COMP_Output_None;                              //Êä³ö²»Öض¨Ïò
//    COMP_InitStructure.COMP_BlankingSrce=COMP_BlankingSrce_None;                  //²»Ê¹ÄÜÊä³öÏûÒþ
//COMP_InitStructure.COMP_Mode = COMP_Mode_HighSpeed;                           //±È½ÏÆ÷¸ßËÙģʽ
//    COMP_InitStructure.COMP_OutputPol=COMP_OutputPol_NonInverted;                   //Êä³ö²»·´Ïò
//    COMP_InitStructure.COMP_NonInvertingInput=COMP_NonInvertingInput_IO1;         //PA1 ×÷Ϊ COMPARE1 Õý¶ËÊäÈë
//COMP_InitStructure.COMP_Hysteresis = COMP_Hysteresis_High;                      //Êä³ö³ÙÖ͸ß
//COMP_Init(COMP_Selection_COMP1, &COMP_InitStructure);

COMP_StructInit(&COMP_InitStructure);
COMP_InitStructure.COMP_InvertingInput = COMP_InvertingInput_DAC1OUT1;         //PA4 DAC1OUT1 ×÷Ϊ±È½ÏÆ÷¸º¼«ÊäÈë
    COMP_InitStructure.COMP_NonInvertingInput=COMP_NonInvertingInput_IO2;   //PA3 ×÷Ϊ COMPARE2 Õý¶ËÊäÈë
COMP_InitStructure.COMP_Output = COMP_Output_None;                              //Êä³öδÁ¬½ÓÆäËûÍâÉè
COMP_InitStructure.COMP_Mode = COMP_Mode_HighSpeed;                           //
COMP_InitStructure.COMP_Hysteresis = COMP_Hysteresis_No;                      //Êä³ö³ÙÖ͸ß
    COMP_InitStructure.COMP_OutputPol=COMP_OutputPol_NonInverted;
    COMP_InitStructure.COMP_BlankingSrce=COMP_BlankingSrce_None;
COMP_Init(COMP_Selection_COMP2, &COMP_InitStructure);

无薪税绵 发表于 2017-9-4 12:33:08

一般情况下,官方例程是不会有问题的。
请检查一下,IO引脚的复用问题,
看看是否已经正确配置了。
页: [1]
查看完整版本: STM32F302 模拟比较器输出问题