STM32 TIM2通道重映射 PWM 无输出波形

TIM2_CH3按照如下步骤配置为PWM输出模式:

1、配置时钟、管脚模式

         开启GPIOB、TIM2、AFIO时钟,配置PB10为复用功能推挽输出模式。

 

         //TIM2_CH3管脚重映射

         GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE);  //PB10 TIM2_CH3

2、配置TIM2相关参数

         //配置定时器时钟分频、定时周期

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

 

         //配置CH3比较输出模式、PWM脉宽

        TIM_OC3Init(TIM2,&TIM_OCInitStructure);             //PB3 PWM输出(此处导致未能输出波形,配错了、、、)

 

         //比较输出预装载使能

        TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);     

 

         //定时器自装载使能

        TIM_ARRPreloadConfig(TIM2, ENABLE);

         //开中断

        TIM_ITConfig(TIM2, TIM_IT_CC3,  ENABLE );

 

        //使能定时器

        TIM_Cmd(TIM2, ENABLE);

 

         //配置中断优先级

  NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;

  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStruct);

3、中断服务程序

         TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);

         TIM_SetCompare3(TIM2,Pulse_value);           //改变PWM占空比

 

按照以上配置好后,编译下载没有看到期望的波形,但先前按照此步骤写的一个测试程序就能够正常输出波形。非常郁闷,比较两套程序,配置步骤一样,运行时各个寄存器的配置也完全一样,但是后来写的程序就是没有波形。找了一整天的问题,也没有发现问题的原因,无意看到此文。又重新检查了下程序、、发现黄色处的配置错误、、

STM32 某些通道PWM无法输出波形解决

以下为此文的原因:

如果同时开启默认的复用功能USART3_TX)和重映射后的复用功能TIM2_CH3)的时钟,外设功能会产生冲突,造成工作异常的情况。

 

检查工程中与USART3时钟初始化的代码,发现如下语句,

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB1Periph_USART3, ENABLE);

删除后,编译、下载,波形输出终于出来了。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在STM32上使用TIM2模块输出PWM信号,你需要按照以下步骤进行设置: 1. 首先,确保你已经正确配置了GPIO引脚,将其连接到要输出PWM信号的外设。例如,如果你要将PWM信号输出到引脚PA5,则需要将PA5配置为复用功能,并将其连接到TIM2通道1。 2. 启用TIM2时钟。这可以通过在RCC寄存器中设置相应的位来完成。例如,对于STM32F4系列,你可以使用如下代码启用TIM2时钟: ```c RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); ``` 3. 配置TIM2的基本定时器模式。这包括设置计数器的时钟分频因子和计数器的自动装载值。以下是一个示例代码片段: ```c TIM_TimeBaseInitTypeDef TIM_InitStruct; TIM_InitStruct.TIM_Prescaler =100; // 设置时钟分频因子 TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 设置计数器模式为向上计数 TIM_InitStruct.TIM_Period =999; // 设置自动装载值 TIM_TimeBaseInit(TIM2, &TIM_InitStruct); ``` 4. 配置TIM2通道1为PWM输出模式。这包括设置通道的工作模式和占空比。以下是一个示例代码片段: ```c TIM_OCInitTypeDef TIM_OCInitStruct; TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; // 设置工作模式为PWM模式 TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; // 允许输出 TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; // 设置极性为高电平 TIM_OC1Init(TIM2, &TIM_OCInitStruct); ``` 5. 最后,启动TIM2定时器。这将开始生成PWM信号。以下是一个示例代码片段: ```c TIM_Cmd(TIM2, ENABLE); ``` 请注意,以上代码片段仅为示例,你需要根据自己的需求进行适当的配置和调整。还有其他参数可以配置,例如占空比和脉冲宽度调制模式等,你可以根据自己的需求进行进一步的研究和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值