OpenEdv-开源电子网

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

战舰的板子,使用Tim3输出pwm时,全映像时是正常的,部分映像只有PB5输出pwm,是怎么回事啊

[复制链接]

1

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-28
在线时间
2 小时
发表于 2021-7-28 23:27:21 | 显示全部楼层 |阅读模式
1金钱

void Pwm_Init(u16 arr,u16 psc){
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定时器3时钟
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
       
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);         //Timer3部分重映射
//        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);         //Timer3全重映射

  //设置该引脚为复用输出功能
        GPIO_InitStructure.GPIO_Mode                 = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed         = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Pin                 = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5;//GPIO_Pin_4|GPIO_Pin_0|GPIO_Pin_1|
        GPIO_Init(GPIOB, &GPIO_InitStructure);       

   //初始化TIM3
        TIM_TimeBaseStructure.TIM_Period                                 = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM_TimeBaseStructure.TIM_Prescaler                 =        psc; //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode         = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
       
        //
        TIM_OCInitStructure.TIM_OCMode                                 = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState         = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity                 = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
       
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC3
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC3
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC3
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC3
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器
        TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器
       
        TIM_Cmd(TIM3, ENABLE);  //使能TIM3

}


//10ms调用一次,产生呼吸灯效果

u16 led0pwmval=50;
u8 CStatus=0;
void PwmDuteChange(void){
        switch(CStatus){
                case 0:
                        if(++led0pwmval>=100){
                                CStatus=1;
                        }
                        break;
                default:
                        if(--led0pwmval<=0){
                                CStatus=0;
                        }
                        break;
        }                                          
        TIM_SetCompare1(TIM3,led0pwmval);       
        TIM_SetCompare2(TIM3,led0pwmval);       
        TIM_SetCompare3(TIM3,led0pwmval);       
        TIM_SetCompare4(TIM3,led0pwmval);               
}


最佳答案

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

试下一个引脚一个引脚的来初始化,不要或在一起
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-7-28 23:27:22 | 显示全部楼层
试下一个引脚一个引脚的来初始化,不要或在一起
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-7-29 09:48:00 | 显示全部楼层
这不是正常吗?
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2021-7-29 13:29:31 | 显示全部楼层
程序看着没问题,硬件上是不是被其他外设干扰了
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2021-7-29 16:26:00 | 显示全部楼层
直接拿战舰的PWM例程去添加多几个通道试试看。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-28
在线时间
2 小时
 楼主| 发表于 2021-7-29 18:37:33 | 显示全部楼层
疾如风 发表于 2021-7-29 16:26
直接拿战舰的PWM例程去添加多几个通道试试看。

这个就是战舰的例程,直接换通道也不可以,就PB5可以
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-28
在线时间
2 小时
 楼主| 发表于 2021-7-29 18:38:40 | 显示全部楼层

对啊,实在是找不到问题了,但是就是只有一个通道有效果
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-28
在线时间
2 小时
 楼主| 发表于 2021-7-29 18:39:46 | 显示全部楼层
阿侑kevin 发表于 2021-7-29 13:29
程序看着没问题,硬件上是不是被其他外设干扰了

我换了一块别家的板子也是没反应
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-28
在线时间
2 小时
 楼主| 发表于 2021-7-30 22:57:36 | 显示全部楼层
A571157242 发表于 2021-7-30 10:43
试下一个引脚一个引脚的来初始化,不要或在一起

单个引脚初始化可以了
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-28
在线时间
2 小时
 楼主| 发表于 2021-7-30 23:01:26 | 显示全部楼层
A571157242 发表于 2021-7-30 10:43
试下一个引脚一个引脚的来初始化,不要或在一起

单个引脚初始化确实可以,emmm,全映射可以一起初始化,其他不可以,就挺神奇的
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-11-2
在线时间
4 小时
发表于 2022-11-2 16:20:53 | 显示全部楼层
PB4被占用了,需要解除swj占用
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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