用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、在程序里添加如下代码
#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
RE:systick问题
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
这两句语句注释掉,在运行看看
RE:systick问题
RE:systick问题
回复:systick问题
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问题
滴答定时器一直开着不关试试
用的5.0的库,在ram里调试,不行啊
回复:systick问题
设置几个if条件,在里面打上断点看看
能否说明白点,大哥
RE:systick问题
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
回复:systick问题
你当前是想把代码放到SRAM里运行。有两点需要修改
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
谢谢