搜索
查看: 2410|回复: 10

[已解决] 大佬们 STM32F334的TIM1不能生成PWM

[复制链接]

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2018-8-14
发表于 2018-8-14 16:13:05 | 显示全部楼层 |阅读模式
我需要将F103的代码移植到F334上面,发现不能生成PWM,大佬们帮我看一下我哪里没有配置正确  谢谢


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

    //TIM_InternalClockConfig(TIM1);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
     RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
                                                                             

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  //复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_11);//PA10复用
   
    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值     80K
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseStructure.TIM_RepetitionCounter=0xf0;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

  TIM_CtrlPWMOutputs(TIM1,ENABLE);    //MOE 主输出使能   

    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能     
   
    TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器
   
    TIM_Cmd(TIM1, ENABLE);  //使能TIM1

   
}




int main(void)
{    u16 led0pwmval=50;   
    u8 dir=1;   
    TIM1_PWM_Init(899,100);//不分频。PWM频率=72000/(899+1)=80Khz
     TIM_SetCompare1(TIM1,led0pwmval);
     while(1)
    {
        Delay_ms(10);
         //delay_ms(10);     
        if(dir)led0pwmval++;
        else led0pwmval--;     
         if(led0pwmval>50)dir=0;
        if(led0pwmval==0)dir=1;                           
        TIM_SetCompare1(TIM1,led0pwmval);      
    }
}


回复

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2018-8-14
 楼主| 发表于 2018-8-14 16:31:24 | 显示全部楼层
我能发现的地方都已经改过来了  
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2018-8-14
 楼主| 发表于 2018-8-14 16:31:55 | 显示全部楼层
大佬们可以说一下需要注意哪些地方吗
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2018-8-14
 楼主| 发表于 2018-8-14 16:43:07 | 显示全部楼层

我用的PA8输出,TIM1_CH1通道,不知道这个要不要引脚复用(感觉不需要)复用和不复用都试过了  都不行

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2018-8-14
 楼主| 发表于 2018-8-14 16:44:20 | 显示全部楼层
我也把之前F030能生成PWM波的程序放进来试过了  不行
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

3420

帖子

82

蝴蝶豆

社区小助手

最后登录
2023-11-12
发表于 2018-8-14 22:03:46 | 显示全部楼层
其实,最好的老师是ST官方网站,楼主应该多访问。
HRTIM.rar (449.59 KB, 下载次数: 14)

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

91

主题

4756

帖子

4

蝴蝶豆

论坛元老

最后登录
2021-2-27
发表于 2018-8-14 23:58:55 | 显示全部楼层

回帖奖励 +1 ST金币

可以参考类似的实例,引脚配置好了吗?可以先试下用高级/通用定时器输出PWM,成功了再换HRTIM。或许是主函数里的TIM_SetCompare1没换成TIM_SetCompare2。
HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;//配置输出特性,高低电平等
HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;//配置基本参数,这部分和普通定时器一样
HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure;  //配置不同模式
HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;//配置波形参数,错误等
HRTIM_CompareCfgTypeDef HRTIM_CompareStructure;//配置比较寄存器
用以上几个部分就能产生最简单的PWM波形
声明有人测试了还是有问题,不过每个人情况不同,最好还是在官网查正确步骤

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

169

帖子

105

蝴蝶豆

金牌会员

最后登录
2021-11-8
发表于 2018-8-15 09:27:38 | 显示全部楼层

回帖奖励 +1 ST金币

我觉得应该是这样才对:
TIM1_PWM_Init(100,899);//PWM频率=72000/(899+1)=80Khz

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

101

帖子

25

蝴蝶豆

高级会员

最后登录
2021-3-19
发表于 2018-8-15 10:07:59 | 显示全部楼层
我觉得你最好检查一下引脚的问题,我看你开启了复用功能,这要看看手册上A8是不是要复用,而且还有一个映射的问题,最好看一下手册是不需要映射还是要部分重映射还是要完全重映射。。。记得A8的功能好像是可以输出内部各个时钟总线的频率,建议题主看一下手册(如果非要用A8 的话)

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

28

帖子

0

蝴蝶豆

中级会员

最后登录
2021-3-9
发表于 2018-10-24 11:17:07 | 显示全部楼层
PA8配置
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-28 06:33 , Processed in 1.284965 second(s), 49 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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