OpenEdv-开源电子网

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

加入定时器中断之后,外部中断不起作用了找不到原因

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-8-6
在线时间
0 小时
发表于 2015-8-18 18:50:56 | 显示全部楼层 |阅读模式
5金钱

程序通过外部中断函数从端口检测电机的输出脉冲个数,到一定的个数执行停止转换方向的操作。本来是可以运行的。但是加入了定时器中断之后,外部中断就不能运行了。检测不到脉冲个数。请问是什么原因附件有源程序。

定时器中断文件timer.c

#include "timer.h"
#include "led.h"
#include "exti.h"
#include "usart.h"
void TIM3_init_Init(u16 arr,u16 psc)
{
 
 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
 NVIC_InitTypeDef NVIC_InitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
 TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
 TIM_TimeBaseInitStruct.TIM_Period=arr;
 TIM_TimeBaseInitStruct.TIM_Prescaler=psc;

 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
 TIM_Cmd(TIM3,ENABLE);
 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; 
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStructure);
 
}

void TIM3_IRQHandler(void)
{
 
 if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
  {
  
  mc=mcshu*1000;
  printf("%d\r\n",mc); //?ò??OK?á?????ò????
  TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
 }
 
}
外部中断文件exti.c

#include "exti.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
void EXTIX_Init(void)

 EXTI_InitTypeDef EXTI_Struct;
 NVIC_InitTypeDef NVIC_Struct;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
 
 KEY_Init();
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
  EXTI_Struct.EXTI_Line=EXTI_Line4;
   EXTI_Struct.EXTI_LineCmd=ENABLE;
   EXTI_Struct.EXTI_Mode=EXTI_Mode_Interrupt;
   EXTI_Struct.EXTI_Trigger=EXTI_Trigger_Falling; 
  EXTI_Init(&EXTI_Struct);
 
 NVIC_Struct.NVIC_IRQChannel=EXTI4_IRQn;
 NVIC_Struct.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Struct.NVIC_IRQChannelPreemptionPriority=1;
 NVIC_Struct.NVIC_IRQChannelSubPriority=1;
 NVIC_Init(&NVIC_Struct);
  
}


void EXTI4_IRQHandler(void)

   mcshu++;
   if (mcshu<192*0.2){TIM_SetCompare1(TIM14,flag*(1-mcshu/192));}
  else if(mcshu>192*0.8){TIM_SetCompare1(TIM14,flag*mcshu/192);}
   else TIM_SetCompare1(TIM14,0); 
 
  if (mcshu>=192)
 {
  printf("%d",mcshu);
  mcshu=0;
   
   biaozhi=(biaozhi+1)%2;
  if(biaozhi==0)
  {
  GPIO_ResetBits(GPIOF,GPIO_Pin_7);  
   GPIO_ResetBits(GPIOF,GPIO_Pin_10);  
  delay_ms(1000);
  GPIO_SetBits(GPIOF,GPIO_Pin_7);      
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
   printf("a\r\n"); 
  }
  else
  {
  GPIO_ResetBits(GPIOF,GPIO_Pin_7);  
   GPIO_ResetBits(GPIOF,GPIO_Pin_10);  

  delay_ms(1000);
  GPIO_SetBits(GPIOF,GPIO_Pin_10);    
   GPIO_ResetBits(GPIOF,GPIO_Pin_7); 
   printf("b\r\n");
  }
  
 }

 EXTI_ClearITPendingBit(EXTI_Line4);
}


主函数main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
#include "exti.h"
#include "stm32f4xx_exti.h"
#include "timer.h"

int main(void)
{
 u16 led0pwmval=0;

 u8 dir=1; 
 mcshu=0;
 biaozhi=0;
 LED_Init();    
 EXTIX_Init();
  
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 delay_init(168);
 
 TIM3_init_Init(10000-1,8400-1); 
 uart_init(115200);

 flag=1000; 
 TIM14_PWM_Init(flag-1,84-1);
 TIM_SetCompare1(TIM14,0);
 
 
   GPIO_ResetBits(GPIOF,GPIO_Pin_10); 
   GPIO_SetBits(GPIOF,GPIO_Pin_7);  
  
   while(1)
 {
     
  

  printf("OK\r\n"); 
  delay_ms(1000);  
  
  
  
 

 }
}

 

 

 


 

 

pwm三引脚实验 再升级.rar

3.72 MB, 下载次数: 55

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-8-18 22:48:36 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 03:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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