OpenEdv-开源电子网

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

为什么配置定时器4输出不了pwm波

[复制链接]

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
发表于 2021-3-15 17:41:31 | 显示全部楼层 |阅读模式
1金钱
使用的是stm32f103的精英板,参照原子哥的pwm输出实验,原子哥的实验是使用的TIM3_CH2,我尝试追加使用TIM4_CH1也输出pwm(我想要做到TIM3和TIM4输出不同频率和占空比的PWM波),但TIM4_CH1的相应引脚一直输出低电平,TIM3可以正常输出PWM波。以下是我的TIM4_CH1的配置代码,麻烦各位大佬指点一下,谢谢。
定时器4通道1.png
void TIM4_PWM_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD  | RCC_APB2Periph_AFIO, ENABLE);


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //TIM4_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);


        TIM_TimeBaseStructure.TIM_Period = arr;
        TIM_TimeBaseStructure.TIM_Prescaler =psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
       
         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC2Init(TIM4, &TIM_OCInitStructure);

        TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);

        TIM_Cmd(TIM4, ENABLE);  
       
       
}


主函数中:(设置TIM3和TIM4输出不同频率和占空比的pwm波,但只有TIM3的相应引脚有PWM输出,TIM4对应的没有)
TIM3_PWM_Init(71,0);
        TIM4_PWM_Init(599,59);
                TIM_SetCompare2(TIM3,36);               
        TIM_SetCompare1(TIM4,300);


最佳答案

查看完整内容[请看2#楼]

你上面那个表 是要配置的通道一 你得换成 TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2021-3-15 17:41:32 | 显示全部楼层
翼行园子 发表于 2021-3-16 09:54
你这里不是配置的通道二吗  TIM_OC2Init(TIM4, &TIM_OCInitStructure);          TIM_OC2PreloadConfig(TIM ...

你上面那个表 是要配置的通道一 你得换成 TIM_OC1Init(TIM4, &TIM_OCInitStructure);

        TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
啊哈~加油!!
回复

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
发表于 2021-3-15 17:48:29 | 显示全部楼层
你看下引脚是不是要部分映射还是重映射
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-3-15 19:50:41 | 显示全部楼层
DFY 发表于 2021-3-15 17:48
你看下引脚是不是要部分映射还是重映射

您好感谢您的回复。我看了一下TIM4的映像,说PD12引脚的确是映像之后的通道一的引脚
我在配置中加了这一行代码 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE);
还是不能输出PWM波
然后我根据TIM_CH1不需要映射的引脚PB6配置,然后去掉上面这行代码,也是无法输出PWM波
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-3-15 20:02:28 | 显示全部楼层
车嘉炜 发表于 2021-3-15 19:50
您好感谢您的回复。我看了一下TIM4的映像,说PD12引脚的确是映像之后的通道一的引脚
我在配置中加了这一 ...

但是我配置通道二成功了,还是十分感谢您的回复!
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2021-3-16 09:54:15 | 显示全部楼层
你这里不是配置的通道二吗  TIM_OC2Init(TIM4, &TIM_OCInitStructure);          TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);        
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-3-16 10:03:30 | 显示全部楼层
翼行园子 发表于 2021-3-16 09:54
你上面那个表 是要配置的通道一 你得换成 TIM_OC1Init(TIM4, &TIM_OCInitStructure);

        TIM_OC1 ...

原来是这样,还是我自己不仔细。谢谢您的回复!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 06:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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