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
求大神指教!!!
回复: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
RE:systick问题
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;
这两句语句注释掉,在运行看看
RE:systick问题
滴答定时器一直开着不关试试RE:systick问题
设置几个if条件,在里面打上断点看看回复: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
回复:systick问题
回复第 3 楼 于2014-04-03 08:05:38发表:滴答定时器一直开着不关试试
用的5.0的库,在ram里调试,不行啊:'(
回复:systick问题
回复第 4 楼 于2014-04-04 08:59:21发表:设置几个if条件,在里面打上断点看看
能否说明白点,大哥
RE:systick问题
你当前是想把代码放到SRAM里运行。有两点需要修改1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
回复:systick问题
回复第 9 楼 于2014-04-06 23:42:37发表:你当前是想把代码放到SRAM里运行。有两点需要修改
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
谢谢
页:
[1]