原创 我的STM32出问题了

2008-7-18 13:57 3476 5 6 分类: MCU/ 嵌入式

#include "stm32f10x_lib.h"
EXTI_InitTypeDef EXTI_InitStructure;
ErrorStatus HSEStartUpStatus;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);

int main(void)
{


  RCC_Configuration();
  NVIC_Configuration();//到处就进入中断服务程序,然后死机!!!
  GPIO_Configuration();
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource15);
  EXTI_InitStructure.EXTI_Line = EXTI_Line15;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  while (1)
  {    
  }
}


void RCC_Configuration(void)
{
  
  RCC_DeInit();
  RCC_HSEConfig(RCC_HSE_ON);
  HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
  {
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div2);
    FLASH_SetLatency(FLASH_Latency_2);
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
    RCC_PLLCmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
   while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
}


void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}


void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
#ifdef  VECT_TAB_RAM  

  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else

  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);//单步运行到此,会进入中断服务程序,然后就不出来了
}


现象总结:


1:软件中不能开 EXTI15_10_IRQChannel中断,否则死机(如上面程序中铁贴出的一样),
2:如果想用 EXTI15_10_IRQChannel中断,必须使先用串口擦除FLASH,不然不管是用MDK还是IAR都会出现死机,
3:死机现象  程序在配置中断时(如程序中所示)就会进入中断。
4:如果我不开 EXTI15_10_IRQChannel中断,整个芯片运行正常,在IAR和MDK下都很正常,
5: 正常的意思是不需要用事先串口擦除FLASH,直接在IAR或者MDK下载可正常工作


 


我选择ram运行,过程及现象如下:
1:断电配置boot  
2:配置程序
3:上电下载 正常
4:第一次运行 正常
5:软件复位
6:第二次运行(或者单步运行) 死机


7: 断电
8:重复3~7

和flash运行不一样的地方,
flash运行:程序执行配置中断后,立刻进入中断服务程序,然后就出来了,
ram运行:程序执行配置中断后,程序跑飞


在21ic上问了好几天,也没人知道

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户193211 2009-7-21 17:06

我碰到了和你一样的问题,不知道你最后是咋解决的,程序几乎是一模一样,也是EXTI15_10

ilove314_323192455 2008-6-22 11:06

呵呵,路过,和博主交个朋友
相关推荐阅读
用户1336989 2008-10-17 21:34
自动售票/售货机
前些日子给一个公司做一个自动售票/售货机机,硬件已做完,软件估计也快了,电路里包括了MDB协议接口,液晶接口,后台键盘PS2接口,前台键盘接口,can总线协议,EEPROM,电源系统等,实在挺麻烦。不...
用户1336989 2008-09-14 19:30
像写51一样写STM32端口
终于可以像写51一样写STM32的端口了,以往写个端口也要打那么多字,现在使用BIT-BAND可以轻松实现了,比如可以直接写PA0=1;或者PA=0X12FF了,https://static.asse...
用户1336989 2008-08-21 20:15
做东西的感受
这些天做项目,一个最大的感受就是,最难的地方不是不会编程,也不是电路原理设计不好,而是接口不好处理...
用户1336989 2008-07-04 16:15
STM32 固件库有BUG
在利用I2C读写24C02时发现I2C_InitStructure.I2C_AcknowledgedAddress的值不管是 I2C_AcknowledgedAddress_7bit还是 I2C_Ac...
用户1336989 2008-06-24 21:38
电源应用设计
从今天起,如果有时间我把这两年的学习经验给大家分享一下,希望和大家多交流交流。今天我先说说我知道的常用电源,电源是一个电路系统中最重要的一个环节,电源的好坏直接影响着整个电路系统的成败。就像一个人,不...
我要评论
1
5
关闭 站长推荐上一条 /3 下一条