发 帖  
原厂入驻New
[问答] STM32F0xx系列,不同引脚相同复用功能的问题
335 stm32 GPIO
分享
  • STM32f031的PA4和PB1都有相同的复用功能tiM14_CH1,我在开启定时器TIM14_CH1和TIM3_CH4的PWM输出时,发现只有PB1有方波输出,而PA4没有,经过检测,我禁用掉TIM3_CH4,只启用TIM14_CH1,依然只有PB1输出。而我的想法是PA4使用TIM14_CH1,PB1使用TIM3_CH4。
GPIOB AF GPIOA AF

2.GPIO配置如下:
        GPIO_InitTypeDef GPIO_InitStruct;
        RCC_AHBPeriphclockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2;
        GPIO_Init(GPIOA, &GPIO_InitStruct);
        
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 ;
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2;
        GPIO_Init(GPIOB, &GPIO_InitStruct);        
        GPIO_PinAFConfig(GPIOB, GPIO_Pin_1   , GPIO_AF_1);
        GPIO_PinAFConfig(GPIOA, GPIO_Pin_4  , GPIO_AF_4);
3.我用重映射函数,想将PB1重映射到AF_1,PA4重映射到AF_4,但发现结果依旧不变,而且F031的库函数也没有AFIO时钟函数。不知道大家有没有遇到这样的问题?

0
奖励6积分
2020-7-2 17:31:33   评论 分享淘帖 邀请回答

相关问题

3个回答
看网上有的例程是这样写的GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_0);        查查库函数说明
最佳答案
2020-7-2 17:31:34 2 评论

举报

2 条评论
  • 2020-7-6 11:00

    我也这样写的,比如这样GPIO_PinAFConfig(GPIOA, GPIO_Pin_4  , GPIO_AF_4);
    但是对于stm32f031来说就是执行不成功,所以我改用地址去使能如下:
            *(uint32_t *)(GPIOA_BASE + 0x20) = 0x11040000;
            *(uint32_t *)(GPIOB_BASE + 0x20) = 0x00000010;
    使用地址就能够将PA4 PA5 PA7 PB1重映射,但是使用库函数就不行,也不知道怎么回事

  • 2020-7-6 11:03

    我明白你的意思了,是我没看清楚库函数给的定义,怪不得总是出错,谢谢你的帮助。
    GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF),
    GPIO_PinSource: specifies the pin for the Alternate function.
      *          This parameter can be GPIO_PinSourcex where x can be (0..15) for GPIOA, GPIOB, GPIOD, GPIOE
      *          and (0..12) for GPIOC and (0, 2..5, 9..10) for GPIOF.

1 条评论
除了引脚的映射配置,应该还有定时器本身的一些与引脚相关的配置,看看是不是这部分问题
2020-7-2 19:42:03 1 评论

举报

1 条评论
  • 2020-7-3 08:22

    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
           
            TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
            TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
            TIM_TimeBaseInitStruct.TIM_Period = TIMER_TIM_Period;
            TIM_TimeBaseInitStruct.TIM_Prescaler = TIMER_TIM_Psc;
            TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
            TIM_TimeBaseInit(TIM14, &TIM_TimeBaseInitStruct);
           
            TIM_OCInitTypeDef TIM_OCInitStruct;
            //TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Set;
            TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
            TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
            TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
            TIM_OCInitStruct.TIM_Pulse = Pulse;
            TIM_OC1Init(TIM14, &TIM_OCInitStruct);
            TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
           
            TIM_Cmd(TIM14, ENABLE);
            //TIM_CtrlPWMOutputs(TIM14, ENABLE);

    这是定时器TIM14_CH1引脚输出的配置,只是单纯的从PB1输出,而不是PA4,哪怕我重映射后依然没有改变,我怀疑是映射函数没有起作用。

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表