OpenEdv-开源电子网

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

有好兄弟知道STM32F407 PB5 TIM3_CH2配置PWM没有效果么?

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2023-1-6
在线时间
4 小时
发表于 2023-1-6 14:55:13 | 显示全部楼层 |阅读模式
void Timer3_Init(u32 arr,u32 psc)        //PB5 TIM3_CH2 无效果
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);          //TIM3时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);         //使能PORTB时钟       

        GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_TIM3);         //GPIOB3复用为定时器3

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;           //GPIOB5
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
        GPIO_Init(GPIOB,&GPIO_InitStructure);                      //初始化PB5

        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//初始化定时器3

        //初始化TIM3 Channel2 PWM模式         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1

        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR1上的预装载寄存器 //CCR

        TIM_ARRPreloadConfig(TIM3,ENABLE);//ARPE使能         ARR

        TIM_Cmd(TIM3, ENABLE);  //使能TIM3
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2023-1-7 15:32:41 | 显示全部楼层
没有设置pwm的比较值 TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2)
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2023-1-6
在线时间
4 小时
 楼主| 发表于 2023-1-9 15:31:24 | 显示全部楼层
zzk111 发表于 2023-1-7 15:32
没有设置pwm的比较值 TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2)

我再主函数中设置了,还是没有效果
int main(void)
{
        u16 led0pwmval=0;   
        u8 dir=1;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);//初始化串口波特率为115200
        TIM14_PWM_Init(500-1,84-1);        //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.     
        TIMPWM_Init();
   while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
        {
                delay_ms(10);         
                if(dir)led0pwmval++;//dir==1 led0pwmval递增
                else led0pwmval--;        //dir==0 led0pwmval递减
                if(led0pwmval>300)dir=0;//led0pwmval到达300后,方向为递减
                if(led0pwmval==0)dir=1;        //led0pwmval递减到0后,方向改为递增

                TIM_SetCompare1(TIM14,led0pwmval);        //修改比较值,修改占空比
//                TIM_SetCompare1(TIM3,100);
//                TIM_SetCompare1(TIM4,200);
                TIM_SetCompare1(TIM3,led0pwmval);
                TIM_SetCompare1(TIM4,led0pwmval);
                TIM_SetCompare1(TIM9,led0pwmval);
//                printf("X:%d\r\n",Get_VRX(8));
//                printf("Y:%d\r\n",Get_VRX(9));
//                delay_ms(1000);
        }
}
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2020-4-14
在线时间
67 小时
发表于 2023-1-9 16:10:44 | 显示全部楼层
PB5的PWM设置有点特殊,等晚上回去我发代码给你看看
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2020-4-14
在线时间
67 小时
发表于 2023-1-9 16:14:29 | 显示全部楼层
杯酒问月 发表于 2023-1-9 16:10
PB5的PWM设置有点特殊,等晚上回去我发代码给你看看

记错了,是TIM8_CH1N有点特殊
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2023-1-6
在线时间
4 小时
 楼主| 发表于 2023-1-9 17:19:32 | 显示全部楼层
杯酒问月 发表于 2023-1-9 16:14
记错了,是TIM8_CH1N有点特殊

好的,谢谢
其它引脚是不是跟着示例代码里面的PF9一样配置就可以呀?
我还是尝试过其它的几个引脚,跟着PF9配置也是一样的没有效果。
我PB6跟着例程里面的PF9配置就可以
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2020-4-14
在线时间
67 小时
发表于 2023-1-10 08:38:20 | 显示全部楼层
YYM沐沐 发表于 2023-1-9 17:19
好的,谢谢
其它引脚是不是跟着示例代码里面的PF9一样配置就可以呀?
我还是尝试过其它的几个引脚,跟 ...

PF9和PB6都是定时器14的通道1(CH1),所以用TIM_SetCompare1()修改比较值,PB5是定时器3的通道2(CH2),试着用TIM_SetCompare2()看看。
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2023-1-6
在线时间
4 小时
 楼主| 发表于 2023-1-11 18:27:52 | 显示全部楼层
zzk111 发表于 2023-1-7 15:32
没有设置pwm的比较值 TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2)

什么时候方把你的发我看看可以么,哥们
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 20:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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