OpenEdv-开源电子网

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

STM32F10的中断问题,看程序

[复制链接]

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-10
在线时间
7 小时
发表于 2016-8-24 22:39:29 | 显示全部楼层 |阅读模式
2金钱
#include "timer.h"
#include "control.h"       
#include "math.h"

extern int Moto1;
extern int Target;
extern int Encoder;

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±Öóê1Äü

        TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ         ¼Æêyμ½5000Îa500ms
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ  10KhzμļÆêyÆμÂê  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ

        TIM_ITConfig(  //ê1Äü»òÕßê§ÄüÖ¸¶¨μÄTIMÖD¶Ï
                TIM3, //TIM3
                TIM_IT_Update ,
                ENABLE  //ê1Äü
                );
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏèÕ¼óÅÏè¼¶0¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óóÅÏè¼¶3¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
        NVIC_Init(&NVIC_InitStructure);  //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷

        TIM_Cmd(TIM3, ENABLE);  //ê1ÄüTIMxíaéè
                                                         
}
void TIM3_IRQHandler(void)   //TIM3ÖD¶Ï
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
                {
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
                        Encoder_Left=Read_Encoder(2);
//                  TIM2->CNT=0;
      Moto1=Position_PID(Encoder,Target);
      PWM_Xianfu();
                        Set_Pwm(Moto1);                          
                }
}
其中arr99,psc7199,我想的是这个定时器每隔10Ms产生一次中断,输出PWM。为什么就产生一次波形吗。需要看main程序的说一下,谢谢

最佳答案

查看完整内容[请看2#楼]

我用了LED来检测,测出是周期太短了,但是输出PWM还是一直不停的输出,没找到原因
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-10
在线时间
7 小时
 楼主| 发表于 2016-8-24 22:39:30 | 显示全部楼层
我用了LED来检测,测出是周期太短了,但是输出PWM还是一直不停的输出,没找到原因
回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-10
在线时间
7 小时
 楼主| 发表于 2016-8-25 09:51:19 | 显示全部楼层
已经知道原因了,,
回复

使用道具 举报

3

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-6-22
在线时间
56 小时
发表于 2016-8-25 16:54:44 | 显示全部楼层
xiaoxv 发表于 2016-8-25 09:51
已经知道原因了,,

大虾这是什么原因呢
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-27 07:44:06 | 显示全部楼层
xiaoxv 发表于 2016-8-26 09:19
我用了LED来检测,测出是周期太短了,但是输出PWM还是一直不停的输出,没找到原因

所以说串口调试才是王道。
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 14:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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