用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
求大神指教!!!
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
你当前是想把代码放到SRAM里运行。有两点需要修改
1、这样你需要修改中断向量表,这样出现中断时才能快速跳转到向量表,执行中断函数;
2、修改分散加载文件,编译器能才能把代码段分配在ram所在的地址。
可以使用专门的sct文件
谢谢
一周热门 更多>