OpenEdv-开源电子网

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

求大神一个关于PWM定时器中断的问题

[复制链接]

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
发表于 2012-10-3 22:58:54 | 显示全部楼层 |阅读模式
void TIM1_CC_IRQHandler(void)  关键是中断服务函数感觉不对,怎么改都不对呀
{                 
 if(TIM8->SR&0X0001)//溢出中断
 {
  LED1=!LED1;
  LED0=!LED0;                             
 }      
 TIM8->SR&=~(1<<0);//清除中断标志位     
}
//arr:自动重装值。
//psc:时钟预分频数
void Timerx_Init(u16 arr,u16 psc)
{
 RCC->APB2ENR|=1<<13;       //TIM8时钟使能 
    
  TIM8->ARR=arr;  //设定计数器自动重装值//刚好1ms   
 TIM8->SC=psc;  //预分频器7200,得到10Khz的计数时钟
 //这两个东东要同时设置才可以使用中断
 TIM8->DIER|=1<<0;   //允许更新中断    
 TIM8->DIER|=1<<6;   //允许触发中断
              
 TIM8->CR1|=0x01;    //使能定时器8   
MY_NVIC_Init(1,3,TIM1_CC_IRQChannel,2);//抢占1,子优先级3,组2         

//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void PWM_Init(u16 arr,u16 psc)
{        
 //此部分需手动修改IO口设置     
 RCC->APB2ENR|=1<<13;   //TIM8时钟使能    
 RCC->APB2ENR|=1<<4;   //使能PORTC口时钟  
  GPIOC->CRL&=0XF0FFFFFF;//PC6输出
 GPIOC->CRL|=0X0B000000;//复用功能输出    
 GPIOC->ODR|=1<<6;//PC6上拉  
 GPIOC->CRL&=0X0FFFFFFF;//PC7输出
 GPIOC->CRL|=0XB0000000;//复用功能输出    
 GPIOC->ODR|=1<<7;//PC7上拉  
 GPIOC->CRH&=0XFFFFFFF0;//PC8输出
 GPIOC->CRH|=0X0000000B;//复用功能输出    
 GPIOC->ODR|=1<<8;//PC8上拉  
 GPIOC->CRH&=0XFFFFFF0F;//PC9输出
 GPIOC->CRH|=0X000000B0;//复用功能输出    
 GPIOC->ODR|=1<<9;//PC9上拉    
 TIM8->ARR=arr;//设定计数器自动重装值 
 TIM8->SC=psc;//预分频器不分频 
 TIM8->CCMR1|=7<<12;  //CH2 PWM2模式  
 TIM8->CCMR1|=1<<11;  //CH2预装载使能      
 TIM8->CCER|=1<<4;   //OC2 输出使能   
 TIM8->BDTR=0X8000;  //设置PMW主输出
 TIM8->CR1|=0x01;    //使能定时器8           
}
其实就是一个简单的PWM,用的是TIM8而已,然后设置定时器中断服务函数,使LED灯能产生PWM效果,很奇怪,怎么弄都有问题,LED灯接口是PD8,PD9,现在PC7已经可以产生PWM,就是中断那里有问题,望大神帮忙看看,谢谢啦
相信自己,我能行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-4 00:01:15 | 显示全部楼层
中断8,用中断1的中断函数,怎么可能行啊?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2012-10-4 02:41:36 | 显示全部楼层
回复【2楼】正点原子:
中断8,用中断1的中断函数,怎么可能行啊?
---------------------------------
原子哥,不是这样的啊!没那么简单的,我以前是用的中断8,发现不行,才改的,
#define TIM8_BRK_IRQChannel          ((u8)0x2B)  /* TIM8 Break Interrupt */
#define TIM8_UP_IRQChannel           ((u8)0x2C)  /* TIM8 Update Interrupt */
#define TIM8_TRG_COM_IRQChannel      ((u8)0x2D)  /* TIM8 Trigger and Commutation Interrupt */
#define TIM8_CC_IRQChannel           ((u8)0x2E)  /* TIM8 Capture Compare Interrupt */


这个是NVIC.h文件中找的,但是很奇怪,我在.s文件中应该也能找到中断8呀,但是却没有,改成这个发现还是不行,然后就不敢随便改了,有点郁闷,额,都快3点了,哎。。。。
相信自己,我能行
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-9-23
在线时间
0 小时
发表于 2012-10-4 09:04:08 | 显示全部楼层
回复【楼主位】方成无解:
---------------------------------
好像F10xxx只有connectivity和xl系列才有TIM8中断。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-4 10:02:38 | 显示全部楼层
确实,你用的什么芯片?有没有TIM8先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2012-10-4 19:48:06 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
恩恩,有的,原子哥的MINI板被学校收走做展览了,比较郁闷,借了一个板子玩的,是STM32F103VET6,火牛的一个板子,已经在PC7有PWM了,就差那个中断问题还是没有解决,不知道怎么改了呀
相信自己,我能行
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-5 00:30:09 | 显示全部楼层
中断好改啊,看看我们的例子就好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2012-10-5 19:59:38 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
回复【7楼】正点原子:
中断好改啊,看看我们的例子就好了.
---------------------------------
原子哥,我还是改不好,感觉我都没错啊!全部翻看了原子哥的例子,仔仔细细的看,和我的一样啊!为什么就是不进中断呢?
void TIM8_CC_IRQHandler(void)
{              
if(TIM8->SR&0X0001)//溢出中断
{
LED1=!LED1;
LED0=!LED0;                    
}    
TIM8->SR&=~(1<<0);//清除中断标志位      
}
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器8!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<13;       //TIM8时钟使能  
    
  TIM8->ARR=arr;  
TIM8->SC=psc; 
//这两个东东要同时设置才可以使用中断
TIM8->DIER|=1<<0;   //允许更新中断
TIM8->DIER|=1<<6;   //允许触发中断
       
TIM8->CR1|=0x01;    //使能定时器8
   MY_NVIC_Init(1,3,TIM8_CC_IRQChannel,2);//抢占1,子优先级3,组2             
}
相信自己,我能行
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2012-10-5 21:08:52 | 显示全部楼层
额,对不起原子哥,发现自己很2,低端幼稚错误,耽误你的时间了!
相信自己,我能行
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-5 21:47:12 | 显示全部楼层
回复【8楼】方成无解:
---------------------------------
TIM8_CC_IRQChannel和TIM8_CC_IRQHandler,不是这两个中断函数。。。
用TIM8_UP_IRQHandler,和TIM1_UP_IRQChannel试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2012-10-5 22:23:35 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥,我用了你说的方法,还是不行。。。。
我翻看了论坛里关于TIM8中断的帖子,好像发现我的问题是.S文件的问题,因为我的.s文件里就没有TIM8
我还改了.s文件,加上了TIM8_UP_IRQHandler和TIM8_UP_IRQChannel,悲剧,发现还是不行啊!其他的都行,例如TIM3,TIM1都没问题,就是这个TIM8,郁闷的要死,现在我下载一个MDK423版本的再试试!那个帖子说MDK423完美运行TIM8,我再试试,一定给它搞出来!
相信自己,我能行
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-6 00:06:34 | 显示全部楼层
回复【11楼】方成无解:
---------------------------------
那你用其他的.s文件啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2012-10-7 19:23:31 | 显示全部楼层
恩恩,谢谢原子哥了,搞定了,2011年原子哥就发现了这个问题了,自己要抓紧学习了啊!
相信自己,我能行
回复 支持 反对

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-9-4
在线时间
0 小时
发表于 2012-11-2 19:58:12 | 显示全部楼层
回复【11楼】方成无解:
---------------------------------
我的TIME1不行额,
MY_NVIC_Init(1,3,TIM1_UP_IRQChannel,2);
}

void TIM1_UP_IRQHander(void)
{
if(TIM1->SR&0X0001)
{
LED1=!LED1;
}
TIM1->SR&=~(1<<0);
}
回复 支持 反对

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-9-4
在线时间
0 小时
发表于 2012-11-2 19:59:26 | 显示全部楼层
回复【11楼】方成无解:
---------------------------------
能帮我看看看吗?
回复 支持 反对

使用道具 举报

51

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2012-10-24
在线时间
19 小时
发表于 2012-11-2 23:00:49 | 显示全部楼层
中断这步确实有点麻烦,不过一句一句对着能行的代码看,总能发现错误!
回复 支持 反对

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-9-4
在线时间
0 小时
发表于 2012-11-3 10:29:38 | 显示全部楼层
回复【16楼】莆田:
---------------------------------
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-3-27
在线时间
1 小时
发表于 2015-5-4 11:03:57 | 显示全部楼层
大神,TIM8定时器7个通道的管脚映射对应的是哪些引脚
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 23:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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