你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 7119|回复: 8

STM32F103ZET6 外部中断问题

[复制链接]

1

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-5-16 17:25:20 | 显示全部楼层 |阅读模式
最近一直在搞外部中断,可是就是不进入中断程序中,我用单步调试工具,系统接受到了按键的触发,Break后就看见程序一直在HardFault_Handler里面,求大侠指导!!
<
回复

使用道具 举报

13

主题

655

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-7-13
发表于 2012-5-16 19:41:30 | 显示全部楼层

RE:STM32F103ZET6 外部中断问题

问题不够具体.问题可能出在软硬衔接部分,某个寄存器.
回复 支持 反对

使用道具 举报

1

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-5-16 19:52:53 | 显示全部楼层

回复:STM32F103ZET6 外部中断问题

回复第 2 楼 于2012-05-16 19:41:30发表:
问题不够具体.问题可能出在软硬衔接部分,某个寄存器. 

单步调试到按键触发的时候,出现如图1的情形,
然后Break下,Disassembly中出现了图二的情形,
最后不管怎么运行,都是在这个HardFault_Handler中。
我用的开发环境是IAR,不知道是程序出的问题还是什么???跪求帮助~~
 
 
1.jpg
2.jpg
回复 支持 反对

使用道具 举报

21

主题

30

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2012-5-16 20:15:08 | 显示全部楼层

RE:STM32F103ZET6 外部中断问题

你有没有注册中断函数。可能是这个原因吧 你把工程文件上传来看看
回复 支持 反对

使用道具 举报

1

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-5-16 20:50:36 | 显示全部楼层

回复:STM32F103ZET6 外部中断问题

回复第 4 楼 于2012-05-16 20:15:08发表:
你有没有注册中断函数。可能是这个原因吧 你把工程文件上传来看看 

怎么注册中断函数啊?不懂啊~~
我把整个工程文件传上来,你帮我看看,哪边设置的不行~~谢谢!!

外部中断.rar

下载

671.69 KB, 下载次数: 12

回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-5-17 09:35:49 | 显示全部楼层

RE:STM32F103ZET6 外部中断问题

HardFault_Handler,这个说明你的程序有错误,导致进入这个错误中断。检查一下,是不是有野指针的操作?
回复 支持 反对

使用道具 举报

1

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-5-17 11:59:10 | 显示全部楼层

回复:STM32F103ZET6 外部中断问题

回复第 6 楼 于2012-05-17 09:35:49发表:
HardFault_Handler,这个说明你的程序有错误,导致进入这个错误中断。检查一下,是不是有野指针的操作? 

我用的是IAR编译器
按键是PA8,LED1接PF8,LED2接PF9,正常的程序是LED1和LED2交替闪烁,无限循环;LED3接PF6,LED4接PF7,进入中断服务程序时LED3,LED4交替闪烁10次
可当我下载完程序时,直接运行,按键按下时,没有反应,然后Break了下,发现指针停在了HardFault_handler上面了~~
我的程序如下:
main.c

/* Includes ------------------------------------------------------------------*/
#include &quot;stm32f10x.h&quot;
#include &quot;stm32f10x_rcc.h&quot;
#include &quot;stm32f10x_exti.h&quot;
#include &quot;stm32_eval.h&quot;
#include
/* Private function prototypes -----------------------------------------------*/
//void RCC_Configuration(void); //时钟配置
void NVIC_Configuration(void);//中断向量表和优先级设定
void GPIO_Configuartion(void);//端口模式配置
void Exti_Configuartion(void);//外部中断模式配置
/* Private functions ---------------------------------------------------------*/
static void Delay_ARMJISHU(__IO uint32_t nCount)
{
  for (; nCount != 0; nCount--);
}
/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{
 // RCC_Configuration();   //配置时钟
  NVIC_Configuration();
  GPIO_Configuartion();
  Exti_Configuartion();
  while (1)
  {
          Delay_ARMJISHU(0xffff);
        GPIO_ResetBits(GPIOF, GPIO_Pin_8 );//点亮led
    GPIO_SetBits(GPIOF, GPIO_Pin_9);//熄灭led
        Delay_ARMJISHU(0xffff);//Dealy_Systick(1000);
        GPIO_ResetBits(GPIOF, GPIO_Pin_9 );//点亮led
    GPIO_SetBits(GPIOF, GPIO_Pin_8);//熄灭led
  }
}
/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures Vector Table base location.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
            NVIC_InitTypeDef         NVIC_InitStructure;
     NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
         //中断向量存储在FlASh区
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//选择中断优先级分组1
         NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;//外部中断
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
         NVIC_Init(&amp;NVIC_InitStructure);
}
void GPIO_Configuartion(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  //LED控制端口
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//打开用到的gpiod时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7|GPIO_Pin_8 | GPIO_Pin_9;//选择要配置的端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//配置为推免输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//转换速度
  GPIO_Init(GPIOF, &amp;GPIO_InitStructure);//初始化gpio
  GPIO_ResetBits(GPIOF, GPIO_Pin_8 | GPIO_Pin_9);        //先复位
  //中断控制端口
  //RCC-&gt;APB2ENR |=0x09;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//打开用到的gpioa时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//选择要配置的端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//配置为上拉输入
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//转换速度
  GPIO_Init(GPIOA, &amp;GPIO_InitStructure);//初始化gpio
}
/*******************************************************************************
* Function Name  : Exti_Configuration
* Description    : 配置外部事件,
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Exti_Configuartion(void)
{
        EXTI_InitTypeDef        EXTI_InitStructure;
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);
//将PB6配置为EXTI Line6
        EXTI_InitStructure.EXTI_Line=EXTI_Line8;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&amp;EXTI_InitStructure);
        //EXTI_GenerateSWInterrupt(EXTI_Line8);
}
 
中断程序啊:stm32f10x_it.c
/* Includes ------------------------------------------------------------------*/
#include &quot;stm32f10x.h&quot;
#include &quot;stm32f10x_rcc.h&quot;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
static void Delay_ARMJISHU(__IO uint32_t nCount)
{
  for (; nCount != 0; nCount--);
}
/* Includes ------------------------------------------------------------------*/
#include &quot;stm32f10x_it.h&quot;

void EXTI9_5_IRQHandler(void)
{
        int i;
        if(EXTI_GetITStatus(EXTI_Line8)!=RESET)
        {
                for(i=0;i
回复 支持 反对

使用道具 举报

1

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-5-17 15:40:22 | 显示全部楼层

RE:STM32F103ZET6 外部中断问题

终于搞定了!!
原来是启动文件李米娜少添加了一个启动文件startup_stm32f10x_hd.s(我的是STM32F103ZET6的芯片),不同的芯片要根据Flash的大小来选择不同的启动文件!
这个是很重要的文件,里面包含了中断向量表驱动以及各个中断处理的函数(怪不着直接在stm32f10x_it.c中直接添加对应的中断处理子程序)。

谢谢以上几位大侠的指导!!
回复 支持 反对

使用道具 举报

21

主题

30

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2012-5-17 17:05:32 | 显示全部楼层

回复:STM32F103ZET6 外部中断问题

回复第 8 楼 于2012-05-17 15:40:22发表:
终于搞定了!!
原来是启动文件李米娜少添加了一个启动文件startup_stm32f10x_hd.s(我的是STM32F103ZET6的芯片),不同的芯片要根据Flash的大小来选择不同的启动文件!
这个是很重要的文件,里面包含了中断向量表驱动以及各个中断处理的函数(怪不着直接在stm32f10x_it.c中直接添加对应的中断处理子程序)。

谢谢以上几位大侠的指导!! 

哈哈 解决就好。恭喜楼主
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版