OpenEdv-开源电子网

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

STM32F051外部中断设置问题请教

[复制链接]

18

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2013-3-26
在线时间
0 小时
发表于 2015-3-8 16:37:39 | 显示全部楼层 |阅读模式
5金钱
本人第一次使用STM32F051,欲使用其外部中断,参考有关例程设置之后,发现其外部中断在无触发的情况下也一样会进入中断程序,而且是周期性的,无端端外部中断变成了定时器中断,希望有高人指教,源码如下:
#include "main.h"
void UserRCCInit(void);
void UserGPIOInit(void);
void UserEXTIInit(void);
void UserNVICInit(void);

int main(void)
{
  UserRCCInit();
  UserGPIOInit();
  UserNVICInit();
  UserEXTIInit();
  delay_init(48);
 while(1)GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_RESET);// PC1口接着一个LED
}

void EXTI4_15_IRQHandler(void)// 中断服务程序
{
   if(EXTI_GetITStatus(EXTI_Line13) != RESET)// 判断是否外部中断13
   {
    GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_SET) ;// 进入中断就点灯100ms
    delay_ms(100);
    EXTI_ClearITPendingBit(EXTI_Line13);// 清除中断标志
   }
}

void UserGPIOInit(void)
{
// 指示灯
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 设置PB13为外部中断引脚
GPIO_InitStructure.GPIO_Pin   =GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource13);
}

void UserNVICInit(void)
{
  NVIC_InitTypeDef NVIC_InitStruct;
  NVIC_InitStruct.NVIC_IRQChannel=EXTI4_15_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelPriority=0;
  NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStruct);
}

void UserEXTIInit(void)
{
  EXTI_DeInit();EXTI_InitTypeDef EXTI_InitStruct;
  EXTI_InitStruct.EXTI_Line=EXTI_Line13;
  EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
  EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
  EXTI_InitStruct.EXTI_LineCmd=ENABLE;
  EXTI_Init(&EXTI_InitStruct);
}

void UserRCCInit(void)
{

 RCC_DeInit();
 RCC->CR |= RCC_CR_HSION;
 while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) ==RESET){};
 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);
 RCC_PLLCmd(ENABLE); 
 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

 FLASH_SetLatency(FLASH_Latency_1);
 FLASH_PrefetchBufferCmd(ENABLE); 

 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
 RCC_HCLKConfig(RCC_SYSCLK_Div1);
 RCC_PCLKConfig(RCC_HCLK_Div2);
 RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div2);

 while(RCC_GetSYSCLKSource() != 0x08);
 
 RCC_GetClocksFreq(&RCC_Clocks);

 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOB, ENABLE);
}

上述程序在板上的现象就是,LED不停而且周期性地闪烁,相应的外部中断PB13没有接任何外设!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2015-3-8 22:39:19 | 显示全部楼层
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-5-24
在线时间
0 小时
发表于 2015-9-16 10:51:00 | 显示全部楼层
楼主,我用F030也出现了你说的现象,你的问题解决了吗?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-5-19
在线时间
1 小时
发表于 2016-5-19 10:18:30 | 显示全部楼层
请问大师们,问题解决了吗,有办法吗??
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2014-9-10
在线时间
5 小时
发表于 2017-8-4 15:50:09 | 显示全部楼层
请问 找到原因了吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-8-7 02:19:49 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 09:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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