OpenEdv-开源电子网

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

STM32死机

[复制链接]

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
发表于 2012-12-14 16:10:15 | 显示全部楼层 |阅读模式
我用的是一个成熟的产品练习程序,这个产品使用的是STM32F103VBT6芯片,这个产品的源代码我也有了, 想从最基础开始学习移植程序来点亮运行灯,想使用系统嘀嗒中断服务函数来实现,每隔500MS运行灯亮灭一次。
我移植的是系统时钟初始化的函数、GPIO初始化、 系统嘀嗒中断初始化函数、系统嘀嗒中断服务函数,但是写入程序上电后运行灯亮了一下就灭了,再后来就没反应了。
后来移植了串口打印函数,最终发现当在主函数里面打印数据的时候,只是在上电的时候打印出来6个“1”,然后就没反应了,我猜可能是死机了,所以就移植了看门狗程序,发现上电后一直复位。
纠结啊,哪位大侠帮帮忙,指点指点我可能有哪些死机的原因。谢谢了。
申明一下,硬件没有任何问题。下面是代码
时钟初始化:
void SetupClock (void)
{
  RCC_DeInit ();                        
  RCC_HSEConfig (RCC_HSE_ON);           

  while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);  

  RCC_HCLKConfig   (RCC_SYSCLK_Div1);
  RCC_PCLK2Config  (RCC_HCLK_Div1);     
  RCC_PCLK1Config  (RCC_HCLK_Div2);     
  RCC_ADCCLKConfig (RCC_PCLK2_Div4);    

  *(vu32 *)0x40022000 = 0x01;           
  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);  
  
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) ;
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA |   
  RCC_AHBPeriph_SRAM,    
ENABLE); 
  RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA |   
  RCC_APB2Periph_GPIOB |   
    RCC_APB2Periph_GPIOC |   
RCC_APB2Periph_GPIOD |   
RCC_APB2Periph_GPIOE |   
RCC_APB2Periph_ADC1  |   
RCC_APB2Periph_ADC2  |   
RCC_APB2Periph_TIM1  |   
RCC_APB2Periph_USART1|   
RCC_APB2Periph_AFIO,
ENABLE);
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2|
  RCC_APB1Periph_TIM3|
RCC_APB1Periph_TIM4|
RCC_APB1Periph_USART2|
RCC_APB1Periph_USART3|
RCC_APB1Periph_BKP,  
ENABLE);
  
  SysTick_SetReload(9000);
  SysTick_ITConfig(ENABLE);          
}

GPIO初始化:
void SetupGPIO(void)
  {
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_Init(GPIOE, &GPIO_InitStructure);
}

嘀嗒中段服务函数:
void SysTickHandler(void)
{
    static unsigned long ticks1;

if(ticks1++ >= 250)
{
   ticks1 = 0;
Led_On_Off = ~ Led_On_Off;
printf("%d ",2);
}    
}

主函数:
int main()
{
SetupClock();
SetupGPIO();
COM_Init();
    #ifdef  COM1_Debug
Com1Test_Setup();                   //串口1测试用115200
// printf(" %s","System_Setup was set!");
    #endif
SysTick_CounterCmd(SysTick_Counter_Enable);
while(1)
{  
   Led_Run();
printf("%d ",1);
}
}











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

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 17:08:16 | 显示全部楼层
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2012-12-14 17:37:26 | 显示全部楼层
回复【2楼】lxj19901115:
---------------------------------
你再帮忙看看
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 17:41:27 | 显示全部楼层
嘀嗒中段服务函数:
void SysTickHandler(void)
{
    static unsigned long ticks1;

if(ticks1++ >= 250)
{
    ticks1 = 0;
Led_On_Off = ~ Led_On_Off;
printf("%d ",2);
}     
}



你这个SYSTICK函数,是放在哪个文件里面,,
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 17:42:30 | 显示全部楼层
你看看是不是最后死在
                           B
死在这里的话,那说明,MCU 没有找到中断函数入口,,
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2012-12-14 17:42:31 | 显示全部楼层
回复【4楼】lxj19901115:
---------------------------------
和main函数在一个文件夹里,user文件夹
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 17:43:14 | 显示全部楼层
还有一点,切记不要在中断里面使用 打印函数
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2012-12-14 17:44:04 | 显示全部楼层
回复【7楼】lxj19901115:
---------------------------------
死在哪里?我有点不明白
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 17:44:13 | 显示全部楼层
你这个是用库函数开发的,把中断函数,放到STM32F10X_IT.C 这个文件里面
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2012-12-14 17:44:45 | 显示全部楼层
回复【7楼】lxj19901115:
---------------------------------
恩,我是想试试程序有没有进中断,所以在中断里面写了打印函数
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2012-12-14 17:46:36 | 显示全部楼层
回复【9楼】lxj19901115:
---------------------------------
恩,中断函数是在STM32F10X_IT.C 文件里放的了。
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 18:03:45 | 显示全部楼层
现在调试下,看还会不会死,
回复 支持 反对

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2012-12-14 18:09:29 | 显示全部楼层
回复【12楼】lxj19901115:
---------------------------------
还是会死。
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2012-12-14 18:13:21 | 显示全部楼层
什么型号的MCU,把程序贴出来,晚上我回去用板子,调下,很简单的,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-14 19:22:43 | 显示全部楼层
跟着我们的 教程学习下先吧。
《例说STM32》《stm32开发指南》《STM32不完全手册》都可以。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 08:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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