你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

大佬们 STM32F334的TIM1不能生成PWM

[复制链接]
17960730q 提问时间:2018-8-14 16:13 /
我需要将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);      
    }
}


收藏 评论10 发布时间:2018-8-14 16:13

举报

10个回答
17960730q 回答时间:2018-8-14 16:31:24
我能发现的地方都已经改过来了  
17960730q 回答时间:2018-8-14 16:31:55
大佬们可以说一下需要注意哪些地方吗
17960730q 回答时间:2018-8-14 16:43:07

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

17960730q 回答时间:2018-8-14 16:44:20
我也把之前F030能生成PWM波的程序放进来试过了  不行
wenyangzeng 回答时间:2018-8-14 22:03:46
其实,最好的老师是ST官方网站,楼主应该多访问。
HRTIM.rar (449.59 KB, 下载次数: 14)

评分

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

查看全部评分

feixiang20 回答时间:2018-8-14 23:58:55
可以参考类似的实例,引脚配置好了吗?可以先试下用高级/通用定时器输出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

查看全部评分

huangyanga 回答时间:2018-8-15 09:27:38
我觉得应该是这样才对:
TIM1_PWM_Init(100,899);//PWM频率=72000/(899+1)=80Khz

评分

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

查看全部评分

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

评分

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

查看全部评分

sasikawyh 回答时间:2018-10-24 11:17:07
PA8配置
mxper 回答时间:2019-1-16 16:18:40
如何配置
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版