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

systick问题

[复制链接]
mantishell 提问时间:2014-4-1 07:00 /
 用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
求大神指教!!!
 
收藏 评论9 发布时间:2014-4-1 07:00

举报

9个回答
mantishell 回答时间:2014-4-6 12:23:14

回复:systick问题

解决啦啦
需要1、在c/c++标签里的define里添加
VECT_TAB_SRAM
2、在debug标签里去掉run to main()
3、在程序里添加如下代码
#ifdef  VECT_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里调试的
是不是配置有问题啊
QQ截图20140404214808.png
 
还有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
 
 
QQ截图20140404214741.png
QQ截图20140404214756.png
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文件
 
 
谢谢
 

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版