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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版