打印
[STM32F1]

TIM1的PWM输出时有时没有

[复制链接]
1329|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yszong|  楼主 | 2021-8-14 12:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用的是STM32F103C8T6,使用的TIM1的PWM输出,还有TIM3的PWM输出,程序下载完后,TIM1的pwm一直没有输出,tim3的pwm一直有输出

使用特权

评论回复
沙发
zhaoxqi| | 2021-8-14 12:12 | 只看该作者

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
zhanghqi| | 2021-8-14 12:14 | 只看该作者
需要在主函数里面先初始化tim1再初始化tim3

使用特权

评论回复
地板
yszong|  楼主 | 2021-8-14 12:16 | 只看该作者
试了,tim1有了pwm输出,但是重新上电后tim1又没有PWM输出了

使用特权

评论回复
5
yszong|  楼主 | 2021-8-14 12:18 | 只看该作者
又重新烧写tim1又可以输出PWM了,但是重新上电依然没有

使用特权

评论回复
6
wangzsa| | 2021-8-14 12:20 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
7
yszong|  楼主 | 2021-8-14 12:22 | 只看该作者

void TIM3_Configuration(void)    //PWM2 ch2     PWM3 ch3
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                        TIM_OCInitTypeDef  TIM_OCInitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
    TIM_TimeBaseStructure.TIM_Period=99;
    TIM_TimeBaseStructure.TIM_Prescaler= 22;
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);        

  /* PWM1 Mode configuration: Channel2 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;           
        //TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse  = 20;        
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  
  TIM_OC2Init(TIM3, &TIM_OCInitStructure);        
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);        

  /* PWM1 Mode configuration: Channel2 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;         
        //TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse  = 20;        
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);         
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);        
        
  TIM_ARRPreloadConfig(TIM3, ENABLE);      

  TIM_Cmd(TIM3, ENABLE);                                                                  
}

void Timer_init(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);


  /* Time base configuration */                 
  TIM_TimeBaseStructure.TIM_Period = 99;   
  TIM_TimeBaseStructure.TIM_Prescaler = 22;//3089;         
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel2 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;        
        //TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        
  TIM_OCInitStructure.TIM_Pulse  = 20;         
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);        
  TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);        

  /* PWM1 Mode configuration: Channel2 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
        //TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse  = 20;         
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OC3Init(TIM1, &TIM_OCInitStructure);        
  TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);      

  TIM_ARRPreloadConfig(TIM1, ENABLE);      

  TIM_Cmd(TIM1, ENABLE);                  
  TIM_CtrlPWMOutputs(TIM1, ENABLE);  
}

void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        
         
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;         
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
        
        
    NVIC_InitStructure.NVIC_IRQChannel =  TIM1_UP_IRQn;         
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
        
        /*CAN--USB_LP_CAN1_RX0_IRQn*/
        NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;                 //ÏÈÕ¼ÓÅÏȼ¶0,´ÓÓÅÏȼ¶0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        /*USART2*/
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;                 //ÏÈÕ¼ÓÅÏȼ¶0,´ÓÓÅÏȼ¶1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);                                          
                                                                  
}

使用特权

评论回复
8
renyaq| | 2021-8-14 12:24 | 只看该作者
不管是初始化1还是3都可以的;
没有先后的说法;

使用特权

评论回复
9
huangchui| | 2021-8-14 12:26 | 只看该作者
程序仿真下看看呗:监控相应的定时器寄存器有没有使能;

使用特权

评论回复
10
yszong|  楼主 | 2021-8-14 12:28 | 只看该作者
监控了是没问题了,但是没有输出

使用特权

评论回复
11
yszong|  楼主 | 2021-8-14 12:30 | 只看该作者

使用特权

评论回复
12
supernan| | 2021-8-14 12:39 | 只看该作者
ST官方例程关于定时器PWM输出的很多,也很完整。你参考下。

使用特权

评论回复
13
jiahy| | 2021-8-14 12:40 | 只看该作者
调试时,注意不用因为手动操作寄存器而忘写具体的程序代码。

使用特权

评论回复
14
lizye| | 2021-8-14 12:42 | 只看该作者
这样就会出现调试OK,下载重启后不正常。

使用特权

评论回复
15
wyjie| | 2021-8-14 12:45 | 只看该作者
楼主没下载F1CUBE?

使用特权

评论回复
16
yszong|  楼主 | 2021-8-14 12:46 | 只看该作者
没有下载啊,不过这也是一种办法了,谢谢

使用特权

评论回复
17
renyaq| | 2021-8-14 12:50 | 只看该作者
这个文件里面有很多例子。但是要注册ST网站的账号才可以下载。

使用特权

评论回复
18
dengdc| | 2021-8-14 12:52 | 只看该作者
基本可以确认 仅就他的问题,上面代码是看不出问题的。

使用特权

评论回复
19
yinxiangh| | 2021-8-14 12:54 | 只看该作者
问题可能出在别的地方。

使用特权

评论回复
20
wyjie| | 2021-8-14 12:56 | 只看该作者
比方相关中断里是否对定时器1的输出做了什么;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

830

主题

11379

帖子

4

粉丝