OpenEdv-开源电子网

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

关于定时器1同时输出PWM波和产生更新中断的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-7-19
在线时间
2 小时
发表于 2016-12-8 15:58:19 | 显示全部楼层 |阅读模式
1金钱
用定时器1产生PWM波,使能了更新中断PWM波就不能正常产生了,失能中断后PWM波恢复正常。求助原子哥,这是为什么呢。

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-12-8 15:58:20 | 显示全部楼层
老衲也爱单片机 发表于 2016-12-8 18:25
我把代码贴出来
定时器设置
void PWM_Init(u16 arr,u16 psc)

仿真跟踪找问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2016-8-13
在线时间
14 小时
发表于 2016-12-8 16:19:48 | 显示全部楼层
多半是卡在了中断里了吧,是不是没有清除中断标志位呢?正常来说PWM是不需要使能中断也能成功输出的~~
回复

使用道具 举报

14

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
480
金钱
480
注册时间
2016-4-5
在线时间
148 小时
发表于 2016-12-8 16:24:04 | 显示全部楼层
没有清除中断标志位
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-7-19
在线时间
2 小时
 楼主| 发表于 2016-12-8 18:25:43 | 显示全部楼层
我把代码贴出来
定时器设置
void PWM_Init(u16 arr,u16 psc)
{  // TIM_TimeBaseInitTypeDef  TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;                                                  
        EnableMotor_Init();  //初始化电机控制所需IO
        RCC->APB2ENR|=1<<11;       //使能TIM1时钟   
        RCC->APB2ENR|=1<<2;        //PORTA时钟使能     PA8通道4    PA11通道1
        GPIOA->CRH&=0XFFFF0FF0;    //PORTA8 11复用输出
        GPIOA->CRH|=0X0000B00B;    //PORTA8 11复用输出
       
    NVIC_InitStructure.NVIC_IRQChannel =  TIM1_UP_IRQn ;  //定时器1溢出中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级0级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;  //从优先级2级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
               
  NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
       

        TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //===清除定时器1中断标志位       
     TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_Trigger ,ENABLE);//开启中断

       
        TIM1->ARR=arr;             //设定计数器自动重装值
        TIM1->PSC=psc;             //预分频器分频
        TIM1->CCMR2|=6<<12;        //CH4 PWM1模式       
        TIM1->CCMR1|=6<<4;         //CH1 PWM1模式       
        TIM1->CCMR2|=1<<11;        //CH4预装载使能         
        TIM1->CCMR1|=1<<3;         //CH1预装载使能          
        TIM1->CCER|=1<<12;         //CH4输出使能          
        TIM1->CCER|=1<<0;          //CH1输出使能       
         TIM1->BDTR |= 1<<15;       //TIM1必须要这句话才能输出PWM
        TIM1->CR1=0x8000;          //ARPE使能
        TIM1->CR1|=0x01;          //使能定时器1        

       
}
中断服务函数
int TIM1_UP_IRQHandler(void)  
{   
        if( TIM_GetFlagStatus(TIM1,TIM_FLAG_Update)!=RESET)
         TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //===清除定时器1中断标志位               
        count++;
    if(count==100)            //10ms定时中断
        {   count =0;
                                                              
   Encoder=Read_Encoder(2);                                 //===读取编码器的值,M法测速,输出为每10ms的脉冲数
        Moto1_Left=Incremental_PI(Encoder,Target_Left);
                         Encoder=Read_Encoder(4);                                 //===读取编码器的值,M法测速,输出为每10ms的脉冲数
          Moto1_Right=Incremental_PI(Encoder,Target_Right);                   //===速度PI控制器
                  Limit();                                            //===PWM限幅
      Set_Pwm(Moto1_Left,Moto1_Right);                  //===赋值给PWM寄存器  
        }              
         return 0;          
}
不明白问题出在哪了,求指教
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2016-12-8 21:59:43 | 显示全部楼层
中断里统一使用带 IT的标志

QQ截图20161208215858.jpg
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-7-19
在线时间
2 小时
 楼主| 发表于 2016-12-9 12:35:02 | 显示全部楼层
lycreturn 发表于 2016-12-8 21:59
中断里统一使用带 IT的标志

改回来也不行啊
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2018-11-22
在线时间
24 小时
发表于 2019-3-5 22:19:39 | 显示全部楼层
顶啊

回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2018-11-22
在线时间
24 小时
发表于 2019-3-5 22:20:05 | 显示全部楼层
遇到同样的问题了
楼主解决了吗
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-3-8 12:56:57 | 显示全部楼层
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-3-8 13:00:06 | 显示全部楼层
随性 发表于 2019-3-5 22:20
遇到同样的问题了
楼主解决了吗

用的什么板子(芯片)?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 06:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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