OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 184|回复: 3

复用PB3的TIM2后,stm32f103 PA0口输出不了pwm(TIM2_CH1)

[复制链接]

1

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2024-7-13
在线时间
31 小时
发表于 2025-3-8 11:08:28 | 显示全部楼层 |阅读模式
4金钱
在没有复用前可以正常使用
void PWM_UserConfig_2(u16 Period,u16 Prescaler){
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_InitStructure;
        TIM_OCInitTypeDef PWM_InitStructure;
       
        RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2 , ENABLE);
       
        GPIO_InitStructure.GPIO_Pin    = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode   = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        TIM_InitStructure.TIM_Period = Period;
        TIM_InitStructure.TIM_Prescaler = Prescaler;
        TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_InitStructure.TIM_RepetitionCounter = DISABLE;
        TIM_TimeBaseInit(TIM2,&TIM_InitStructure);
       
        TIM_Cmd(TIM2,ENABLE);
       
        PWM_InitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        PWM_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        PWM_InitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OC1Init(TIM2,&WM_InitStructure);
       
        TIM_OC1PreloadConfig(TIM2,ENABLE);

    TIM_Cmd(TIM2,ENABLE);

}
void PWM_UserConfig_5(u16 Period,u16 Prescaler)
{
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_InitStructure;
        TIM_OCInitTypeDef PWM_InitStructure;
       
        RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2 , ENABLE);
                GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin    = GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode   = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
       
        TIM_InitStructure.TIM_Period = Period;
        TIM_InitStructure.TIM_Prescaler = Prescaler;
        TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_InitStructure.TIM_RepetitionCounter = DISABLE;
        TIM_TimeBaseInit(TIM2,&TIM_InitStructure);
       
        TIM_Cmd(TIM2,ENABLE);
       
        PWM_InitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        PWM_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        PWM_InitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OC2Init(TIM2,&WM_InitStructure);
       
        TIM_OC2PreloadConfig(TIM2,ENABLE);

    TIM_Cmd(TIM2,ENABLE);

}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

556

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2869
金钱
2869
注册时间
2016-5-13
在线时间
182 小时
发表于 2025-3-13 11:53:50 | 显示全部楼层
PB3 :TIM2_CH2 / PB3 TRACESWO SPI1_SCK

PA0:WKUP/USART2_CTS(9)/ADC12_IN0/TIM2_CH1 ETR(9)

9. This alternate function can be remapped by software to some other port pins (if available on the used package). For more
details, refer to the Alternate function I/O and debug configuration section in the STM32F10xxx reference manual, available
from the STMicroelectronics website: www.st.com.
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

8

主题

556

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2869
金钱
2869
注册时间
2016-5-13
在线时间
182 小时
发表于 2025-3-13 12:00:20 | 显示全部楼层
你需要再单独配置TIM2_CH1和TIM2_CH2.
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

8

主题

556

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2869
金钱
2869
注册时间
2016-5-13
在线时间
182 小时
发表于 2025-3-13 12:05:02 | 显示全部楼层
如下供你参考:
/* 配置TIM1复用输出PWM时用到的I/O  */
static void TIM1_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

/* TIM3 clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 | GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

/*配置TIM1输出的PWM信号的模式,如周期、极性、占空比 */
static void TIM1_Mode_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        /* PWM信号电平跳变值 */
        u16 CCR1_Val = 50000;        
        u16 CCR2_Val = 50000;
        //u16 CCR3_Val = 250;
        //u16 CCR4_Val = 125;

/* -----------------------------------------------------------------------
    TIM1 Configuration: generate 2 PWM signals with 2 different duty cycles:
    TIM1CLK = 72 MHz, Prescaler = 0x0, TIM1 counter clock = 36 MHz
    TIM3 ARR Register = 50000 => TIM1 Frequency = TIM1 counter clock/(ARR + 1)
    TIM3 Frequency = 1440Hz.
    TIM1 Channel1 duty cycle = (TIM1_CCR1/ TIM1_ARR)* 100
    TIM1 Channel2 duty cycle = (TIM1_CCR2/ TIM1_ARR)* 100
   
  ----------------------------------------------------------------------- */

/* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 50000;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;//开反向通道
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

  TIM_OC1Init(TIM1, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

  /* PWM1 Mode configuration: Channel2 */
  
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;//开反向通道
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;          

  TIM_OC2Init(TIM1, &TIM_OCInitStructure);

  TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);       

  /* PWM1 Mode configuration: Channel3 */
  /*TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

  TIM_OC3Init(TIM3, &TIM_OCInitStructure);

  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);         */

  /* PWM1 Mode configuration: Channel4 */
  /*TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);

  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);*/

  TIM_ARRPreloadConfig(TIM1, ENABLE);

  /* TIM3 enable counter */
  TIM_Cmd(TIM1, ENABLE);
  TIM_CtrlPWMOutputs(TIM1, ENABLE);       
}

/*配置和初始化TIM1 */
void TIM1_PWM_Init(void)
{
        TIM1_GPIO_Config();
        TIM1_Mode_Config();       
}
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-3 03:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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