mantishell 发表于 2014-4-1 07:00:28

systick问题

 用STM的固件库V3.5.0,总是在while(TimingDelay != 0);里死机,是什么个情况啊?
代码如下:
#include "SysTick.h"
#include "usart1.h"
#include
 
static __IO u32 TimingDelay;
 
/*
 * 函数名:SysTick_Init
 * 描述  :启动系统滴答定时器 SysTick
 * 输入  :无
 * 输出  :无
 * 调用  :外部调用 
 */
void SysTick_Init(void)
{
        /* SystemFrequency / 1000    1ms中断一次
       * SystemFrequency / 100000       10us中断一次
       * SystemFrequency / 1000000 1us中断一次
       */
        if (SysTick_Config(SystemFrequency / 100000))        // ST3.0.0库版本
        if (SysTick_Config(SystemCoreClock / 100000))        // ST3.5.0库版本
        { 
                /* Capture error */ 
                while (1);
        }
                // 关闭滴答定时器  
        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;       
}
 
 
/*
 * 函数名:Delay_us
 * 描述  :us延时程序,10us为一个单位
 * 输入  :- nTime
 * 输出  :无
 * 调用  :Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us
 *       :外部调用 
 */
 
void Delay_us(__IO u32 nTime)

        TimingDelay = nTime;       
 
        // 使能滴答定时器  
        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;
 
        while(TimingDelay != 0);
}
 
 
/*
 * 函数名:TimingDelay_Decrement
 * 描述  :获取节拍程序
 * 输入  :无
 * 输出  :无
 * 调用  :在 SysTick 中断函数 SysTick_Handler()调用
 */  
void TimingDelay_Decrement(void)
{
        if (TimingDelay != 0x00)
        { 
        TimingDelay--;
        }
}
文件"stm32f10x_it.h"
 
/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval : None
  */
void SysTick_Handler(void)
{
        TimingDelay_Decrement();       
}
文件“main.c”里
调用        SysTick_Init();
 
Delay_us(50000);            // 50000 * 10us = 500ms
求大神指教!!!
 

mantishell 发表于 2014-4-6 12:23:14

回复:systick问题

:)解决啦啦
需要1、在c/c++标签里的define里添加
VECT_TAB_SRAM
2、在debug标签里去掉run to main()
3、在程序里添加如下代码
#ifdefVECT_TAB_SRAM
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
4、添加ram.ini代码

FUNC void Setup (void) {
SP = _RDWORD(0x20000000);          // Setup Stack Pointer
PC = _RDWORD(0x20000004);          // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
}
//LOAD RAM\Blinky.axf INCREMENTAL      // Download
Setup();                           // Setup for Running
g, main

fengye5340 发表于 2014-4-1 08:58:58

RE:systick问题

SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;       
SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;
这两句语句注释掉,在运行看看

有缘于你 发表于 2014-4-3 08:05:38

RE:systick问题

滴答定时器一直开着不关试试

dzc2001 发表于 2014-4-4 08:59:21

RE:systick问题

设置几个if条件,在里面打上断点看看

mantishell 发表于 2014-4-4 21:50:48

回复:systick问题

回复第 2 楼 于2014-04-01 08:58:58发表:
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;       
SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;
这两句语句注释掉,在运行看看
不行啊
我是在sram里调试的
是不是配置有问题啊

 
还有RAM.INI的配置文件为/
******************************************************************************/
/* : RAM Initialization File                                           */
/******************************************************************************/
// >                           // 
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2007 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/* development tools. Nothing else gives you the right to use this software.  */
/******************************************************************************/
 
FUNC void Setup (void) {
  SP = _RDWORD(0x20004500);          // Setup Stack Pointer
  PC = _RDWORD(0x20000004);          // Setup Program Counter
//  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
}
 
//LOAD RAM\Blinky.axf INCREMENTAL      // Download
 
Setup();                             // Setup for Running
g, main
 
 

mantishell 发表于 2014-4-4 21:52:07

回复:systick问题

回复第 3 楼 于2014-04-03 08:05:38发表:
滴答定时器一直开着不关试试
用的5.0的库,在ram里调试,不行啊:'(
 

mantishell 发表于 2014-4-4 21:52:44

回复:systick问题

回复第 4 楼 于2014-04-04 08:59:21发表:
设置几个if条件,在里面打上断点看看
能否说明白点,大哥
 

wkuang 发表于 2014-4-6 23:42:37

RE:systick问题

你当前是想把代码放到SRAM里运行。有两点需要修改
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件

mantishell 发表于 2014-4-7 10:15:48

回复:systick问题

回复第 9 楼 于2014-04-06 23:42:37发表:
你当前是想把代码放到SRAM里运行。有两点需要修改
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
 
 
谢谢
 
页: [1]
查看完整版本: systick问题