开心/xin男孩 发表于 2016-9-6 08:43:52

签到签到

乞丐工程师 发表于 2016-9-6 09:05:11

顶顶顶!!!

chifen 发表于 2016-9-6 09:18:37

void HAL_COMP_MspInit(COMP_HandleTypeDef* hcomp)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(hcomp->Instance==COMP3)
{
/* USER CODE BEGIN COMP3_MspInit 0 */

/* USER CODE END COMP3_MspInit 0 */

    /**COMP3 GPIO Configuration   
    PA4   ------> COMP3_INM
    PB14   ------> COMP3_INP
    PC8   ------> COMP3_OUT
    */
    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_8;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF7_COMP3;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/* USER CODE BEGIN COMP3_MspInit 1 */

/* USER CODE END COMP3_MspInit 1 */
}
}void HAL_COMP_MspDeInit(COMP_HandleTypeDef* hcomp)
{

if(hcomp->Instance==COMP3)
{
/* USER CODE BEGIN COMP3_MspDeInit 0 */

/* USER CODE END COMP3_MspDeInit 0 */

    /**COMP3 GPIO Configuration   
    PA4   ------> COMP3_INM
    PB14   ------> COMP3_INP
    PC8   ------> COMP3_OUT
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4);

    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14);

    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_8);

}
/* USER CODE BEGIN COMP3_MspDeInit 1 */

/* USER CODE END COMP3_MspDeInit 1 */
} STM32CubeMX生成的, 比较器需要有两个输入进行对比, 上面是PC8为输出,
以下更改为PA8,希望对你有帮助
void HAL_COMP_MspInit(COMP_HandleTypeDef* hcomp)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(hcomp->Instance==COMP3)
{
/* USER CODE BEGIN COMP3_MspInit 0 */

/* USER CODE END COMP3_MspInit 0 */

    /**COMP3 GPIO Configuration   
    PA4   ------> COMP3_INM
    PB14   ------> COMP3_INP
    PA8   ------> COMP3_OUT
    */
    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_8;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF8_COMP3;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* USER CODE BEGIN COMP3_MspInit 1 */

/* USER CODE END COMP3_MspInit 1 */
}
}

void HAL_COMP_MspDeInit(COMP_HandleTypeDef* hcomp)
{

if(hcomp->Instance==COMP3)
{
/* USER CODE BEGIN COMP3_MspDeInit 0 */

/* USER CODE END COMP3_MspDeInit 0 */

    /**COMP3 GPIO Configuration   
    PA4   ------> COMP3_INM
    PB14   ------> COMP3_INP
    PA8   ------> COMP3_OUT
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_8);

    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14);

}
/* USER CODE BEGIN COMP3_MspDeInit 1 */

/* USER CODE END COMP3_MspDeInit 1 */
}

johnson_gong 发表于 2016-9-6 09:21:26

1.配置成复用模式
2.配置相应的输入输出模式

Dylan疾风闪电 发表于 2016-9-6 12:11:42

本帖最后由 Dylan疾风闪电 于 2016-9-6 12:19 编辑

5楼说的蛮好的。
第一步,看数据手册的映射功能:找到PA8复用功能的COMP3_OUT的配置值是AF8。
第二步,就是调用库函数来实现:以库函数为例
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource8,GPIO_AF_8);




zbber 发表于 2016-9-6 14:11:05

收藏了,感谢楼主的无私分享

anywill 发表于 2016-10-23 17:52:22

路过,支持:)
页: 1 [2]
查看完整版本: STM32F303VC的引脚功能复用问题