PA3管脚复用映射TIM5_Ch4配置PWM输出

错误原因:将PA3复用为TIM5_Ch4,然后又将PA3初始化普通IO管脚,导致PA3管脚复用失败。

何为管脚复用:复用就是一个引脚有几个功能,1.做普通IO输入输出2.其他外设的输入输出(比如I2C,TIM,SPI等等),这就是复用。

注:管脚功能只能使用一种。

上代码:

#####################################################################

//LED.c

void LedColor_Init(u32 arr,u32 psc)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;

    //  错误原因,RCC_APB1,用RCC_APB2PeriphClockCmd,导致错误
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);      
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_TIM5);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;           //GPIOA0
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //¸´Óù¦ÄÜ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;    //ËÙ¶È100MHz
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //ÍÆÍ츴ÓÃÊä³ö
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //ÉÏÀ­
    GPIO_Init(GPIOA,&GPIO_InitStructure); 
    TIM_DeInit(TIM5);
    TIM_TimeBaseStructure.TIM_Period=arr;   //×Ô¶¯ÖØ×°ÔØÖµ
    TIM_TimeBaseStructure.TIM_Prescaler=psc;  //¶¨Ê±Æ÷·ÖƵ
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
    TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);//³õʼ»¯¶¨Ê±Æ÷5
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1????????,PWM2??????
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //????
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //High???????,??????20%;Low?????,????80%
    TIM_OC4Init(TIM5, &TIM_OCInitStructure);
    TIM_OCStructInit(&TIM_OCInitStructure);      //在程序中这行代码放在了初始化前面。导致初始化异常。
    TIM_OC4PreloadConfig(TIM5, TIM_OCPreload_Enable);
    
    TIM_ARRPreloadConfig(TIM5,ENABLE);//ARPEʹÄÜ 
    TIM_Cmd(TIM5, ENABLE);  //ʹÄÜTIM5
}

void LED_Init(void)
{
    GPIO_InitTypeDef   GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //KEY0 KEY1 KEY2¶ÔÓ¦Òý½Å
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOE2,3,4
}

void LedColor(void)
{
    static  u16 LED_CNT=0;
    if(1)
    {
        if(Flag)
        {
            LED_CNT++;
            if(LED_CNT>=1800)
            {
                Flag = false;
            }
        }
        else
        {
            LED_CNT--;
            if(LED_CNT<=0)
            {
                Flag = true;
            }
        }
        TIM_SetCompare4(TIM5,LED_CNT);
        delay_ms(1);
//        printf("LED_CNT=%d\r\n",LED_CNT);
    }
    else
    {
        TIM_SetCompare4(TIM5,0);
    }
}

#####################################################################

//mian.c

int main(void)
{    
    delay_init(168);            
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    LedColor_Init(1799,800-1);
   // -->LED_Init();  //因为将PA3重新初始化为普通IO将PA3重映射覆盖,所以导致定时器功能无法使用。

    while(1)
    {
        LedColor();
    }
}

//一直在路上,加油

PA11引脚是STM32微控制器中的一个GPIO引脚,可以用于多种功能,并且具备输出PWM信号的能力。在使用TIM1的CH4通道进行PWM输出时,我们需要进行一些设置和配置。 首先,我们需要将PA11引脚配置复用功能。这可以通过设置GPIO端口模式控制寄存器(GPIOx_MODER)中的相应位来实现。具体来说,我们需要将PA11引脚配置为“复用功能”模式,即设置其MODE[1:0]位为“10”。 然后,我们需要选择相应的复用功能。这可以通过设置GPIO复用功能高位寄存器(GPIOx_AFRL或GPIOx_AFRH)中的相应位来实现。对于PA11引脚,我们需要选择TIM1作为其复用功能。因此,我们需要在GPIOx_AFRL或GPIOx_AFRH中相应的位置上设置TIM1的编号。具体来说,我们需要将PA11引脚的AF[7:0]位设置为“00000001”,表示选择TIM1。 接下来,我们需要对TIM1进行配置,使其能够生成PWM信号并输出到PA11引脚。具体的配置包括设置TIM1的时钟源、预分频因子和周期等参数,以及在CH4通道上启用PWM输出和设置脉冲宽度。这些配置可以通过对TIM1相关寄存器进行适当的设置来完成,具体的设置步骤可以参考STM32的技术手册和参考资料。 最后,我们需要将TIM1使能,以便开始生成PWM信号并输出到PA11引脚。这可以通过设置TIM1的使能位来实现。通过配置相关的TIM1使能位后,PWM信号就会根据我们之前的设置进行生成,并通过PA11引脚输出到外部电路中。 总结起来,要使用PA11进行PWM输出,我们需要先进行相应的引脚配置,然后对TIM1进行详细的配置,最后使能TIM1,才能实现PWM信号的生成和输出。通过这些步骤的操作,我们就能够在PA11引脚上实现所需的PWM输出功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值