嵌入式技术论坛
直播中

juju宇哥

9年用户 1474经验值
擅长:479809
私信 关注
[问答]

STM32F103系列TIM3 PWM输出异常这是什么原因?

用CUBEMX生产的代码 在keil5里面TIM3可以正常输出4路PWM信号 4路的引脚是 PB4 PB5 PB0 PB1 在RT-Thread studio中就只有 PB0 PB1 有输出,PB4 PB5 就死活都没有输出。这是什么原因?用设备框架也是同样的结果,库也更新了1.8.4。

int main(void)
{
int count = 1;
MX_TIM3_Init();
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
while (count++)
{
// LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
}
return RT_EOK;
}

其他代码都是CUBEMX生成。

回帖(8)

张红

2022-11-23 09:39:24
一、大概率还是配置的问题,既然定时器、PB0、PB1可以正常使用,说明你在配置定时器PWM方面是正确的;
所以专注于,PB4、PB5的配置;
二、你可以单独就这两个引脚进行配置研究,有以下几点
1.PB4、PB5的引脚配置;
2.定时器的PWM是否配置(即捕获比较寄存器);
3.PWM的输出控制是否使能(极性);
三、你还可以在RT-Thread Studio使用在KEIL中配置定时器驱动的方式来实现,也可以;
1.jpg
举报

张红

2022-11-23 09:39:38
1
举报

juju宇哥

2022-11-23 09:39:54
已成功 PB4 PB5 用在TIM3输出PWM时 是部分映射 ,而PB4有根调试脚有关,处理好这2个就OK了。
举报

张红

2022-11-23 09:40:03
一、我当时倒是猜测过是否跟JTAG的默认引脚有关系,但是一查数据手册,发现只有PB4是跟JTAG有关;
二、还真没注意到部分映射的问题;这是又是经验。
举报

杨丽

2022-11-23 09:40:11
有配置这四个引脚的 gpio ?
举报

juju宇哥

2022-11-23 09:40:21
有 该映射的都映射啦。

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(timHandle->Instance==TIM3)
  {
  /* USER CODE BEGIN TIM3_MspPostInit 0 */
  /* USER CODE END TIM3_MspPostInit 0 */
    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**TIM3 GPIO Configuration
    PB0     ------> TIM3_CH3
    PB1     ------> TIM3_CH4
    PB4     ------> TIM3_CH1
    PB5     ------> TIM3_CH2
    */
    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    __HAL_AFIO_REMAP_TIM3_PARTIAL();
  /* USER CODE BEGIN TIM3_MspPostInit 1 */
  /* USER CODE END TIM3_MspPostInit 1 */
  }
}
举报

杨丽

2022-11-23 09:40:37
这个不全吧,不影响吗?功能复用和上下拉不需要配置?
举报

王萍

2022-11-23 09:40:54
我用的stm32f407的片子,RT 4.0.3版本,studio 2.1.1使用TIM3的CH2,PB5。使用的是RT的PWM设备框架。PWM输出正常。
由于不了解你的整个配置过程,和所有PWM相关代码,暂时也没分析出问题。
大概描述一下配置过程,你看一下是否都做了吧:
1.在settings中,打开PWM设备,保存;
2.打开cubemx,配置TIM3的CH1和CH2为 PWM Generation CH1和PWM Generation CH2模式,保存生成代码;
3.在board.h文件中添加PWM宏定义

#define BSP_USING_PWM3
#define BSP_USING_PWM3_CH1
#define BSP_USING_PWM3_CH2
举报

更多回帖

发帖
×
20
完善资料,
赚取积分