1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用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个回答
|
|
解决啦啦
需要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 RAMBlinky.axf INCREMENTAL // Download Setup(); // Setup for Running g, main |
|
|
|
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; 这两句语句注释掉,在运行看看 |
|
|
|
滴答定时器一直开着不关试试
|
|
|
|
设置几个if条件,在里面打上断点看看
|
|
|
|
回复第 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 RAMBlinky.axf INCREMENTAL // Download Setup(); // Setup for Running g, main |
|
|
|
|
|
|
|
|
|
|
|
你当前是想把代码放到SRAM里运行。有两点需要修改
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数; 2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。 可以使用专门的sct文件 |
|
|
|
回复第 9 楼 于2014-04-06 23:42:37发表:
你当前是想把代码放到SRAM里运行。有两点需要修改 1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数; 2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。 可以使用专门的sct文件 谢谢 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:07 , Processed in 0.755738 second(s), Total 87, Slave 71 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号