4139|6

174

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

stm32中断问题 [复制链接]

#include "stm32f10x.h"
#include "stm32f10x_exti.h"
#include "misc.h"

void Delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

void RCC_Configuration(void)
{
    ErrorStatus HSEStartUpStatus;

    //使能外部晶振
    RCC_HSEConfig(RCC_HSE_ON);
    //等待外部晶振稳定
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
    //如果外部晶振启动成功,则进行下一步操作
    if(HSEStartUpStatus==SUCCESS)
    {
        //设置HCLK(AHB时钟)=SYSCLK
        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        //PCLK1(APB1) = HCLK/2
        RCC_PCLK1Config(RCC_HCLK_Div2);

        //PCLK2(APB2) = HCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);     
 
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);
        //启动PLL
        RCC_PLLCmd(ENABLE);
        //等待PLL稳定
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
        //系统时钟SYSCLK来自PLL输出
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        //切换时钟后等待系统时钟稳定
        while(RCC_GetSYSCLKSource()!=0x08); 
     }

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
                         RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |RCC_APB2Periph_AFIO , ENABLE); //给GPIOA和重映射提供时钟,注意:一定要设置RCC_APB2Periph_AFIO

}

void GPIO_Config(void)
{
 
GPIO_InitTypeDef GPIO_InitStructure;

/************GPIO输入设置*****************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/************GPIO输出设置*****************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP  ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/***中断引脚设置***/
void EXTI_Configuration(void)
{
  EXTI_InitTypeDef  EXTI_InitStructure;
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);  //将PE2连接到外部中断通道3
  EXTI_ClearITPendingBit(EXTI_Line2);

  EXTI_InitStructure.EXTI_Line = EXTI_Line2;                   //外部中断通道3
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    //下降沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;        //使能
  EXTI_Init(&EXTI_InitStructure);
}

/****嵌套中断优先级设置******/
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//先占优先级 1 位从优先级 3位
 
  /* Enable the EXTI2 Interrupt */      
  NVIC_InitStructure.NVIC_IRQChannel =   EXTI2_IRQn;  //EXTI2_IRQn换成EXTI2_IRQChannel就编译失败什么原因啊?
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

}

int main(void)
{
RCC_Configuration();
 GPIO_Config();
 NVIC_Configuration();
 EXTI_Configuration();
while (1)
   { 
     /*====LED89-ON=======*/
  GPIO_ResetBits(GPIOB , GPIO_Pin_8);
  GPIO_ResetBits(GPIOB , GPIO_Pin_9);
  Delay(0xfffff);
  Delay(0xfffff);
  Delay(0x5ffff);
  /*====LED89-ON=======*/
  GPIO_SetBits(GPIOB , GPIO_Pin_8);
  GPIO_SetBits(GPIOB , GPIO_Pin_9);
  Delay(0xfffff);
  Delay(0xfffff);
  Delay(0x5ffff);

   }
}

void EXTI2_IRQHandler(void)  //中断程序为什么这么写啊?
{
if ( EXTI_GetITStatus(EXTI_Line2) != SET )
   {
   GPIO_ResetBits(GPIOB , GPIO_Pin_9);
   GPIO_SetBits(GPIOB , GPIO_Pin_8);
   EXTI_ClearITPendingBit(EXTI_Line2);
   EXTI_ClearFlag(EXTI_Line2);          //清除中断标志
   }
}

程序有问题不啊?我编译没有问题,可是中断按键就是不行!大虾们看下呢?HELP !!

板上资源:LED1接GPIOB8,LED2接GPIOB9,KEY接GPIOE2谢谢啦!

[ 本帖最后由 anghost 于 2010-9-29 15:57 编辑 ]

工程.rar

877.19 KB, 下载次数: 12

此帖出自stm32/stm8论坛

最新回复

CORTEX的中断比ARM 7,9的好多了,直接看每个工程下的.S文件,里面写得很清楚哦:D   详情 回复 发表于 2010-10-3 10:13
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 
也没看出问题来
//EXTI2_IRQn换成EXTI2_IRQChannel就编译失败什么原因啊
这个是你用的库版本高的原因,
void EXTI2_IRQHandler(void)  //中断程序为什么这么写啊?
{
if ( EXTI_GetITStatus(EXTI_Line2) != SET )
   {
   GPIO_ResetBits(GPIOB , GPIO_Pin_9);
   GPIO_SetBits(GPIOB , GPIO_Pin_8);
   EXTI_ClearITPendingBit(EXTI_Line2);
   EXTI_ClearFlag(EXTI_Line2);          //清除中断标志
   }
}
这里你哪个部分不明白?
你对照例子修改一下
此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 

回复

174

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复 沙发 daicheng 的帖子

我知道原因了!中断程序里的时间!点触发时间比人眼观察的时间短!所以之前我没有发现现象!这个加个延时就可以了!
想问的不是中断程序!而是开头这个void EXTI2_IRQHandler(void) 为什么这么写!规定是吗?
此帖出自stm32/stm8论坛
 
 

回复

2131

帖子

0

TA的资源

至上芯片

4
 
你说的是函数的声明吗?
这个名子可以修改的,看下面的图片:
你修改一下就可以了


有问题随时讨论
此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 
 

回复

190

帖子

0

TA的资源

五彩晶圆(初级)

5
 
中断入口的问题,在启动文件里面
所以内核和架构还是要懂滴啊……
此帖出自stm32/stm8论坛
 
 
 

回复

762

帖子

0

TA的资源

一粒金砂(中级)

6
 
好的东西,呵呵,谢谢楼主分享啊
此帖出自stm32/stm8论坛
 
 
 

回复

1412

帖子

15

TA的资源

版主

7
 
CORTEX的中断比ARM 7,9的好多了,直接看每个工程下的.S文件,里面写得很清楚哦:D
此帖出自stm32/stm8论坛
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表