每次都死在同一个地方,代码如下,不倍频没有错误,一倍频就出现错误,麻烦大家帮忙看看啊
void Clock_Init(void)
{
u8 i;
RCC_DeInit ( );
RCC_HSEConfig(RCC_HSE_OFF);
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus ( RCC_FLAG_HSIRDY) == RESET )
{
}
FLASH_PrefetchBufferCmd(ENABLE);
FLASH_SetLatency(FLASH_Latency_1);
RCC_PLLConfig (RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB = SYSCLK 32M
RCC_PCLK2Config(RCC_HCLK_Div1) ;
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //PLL
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK) ;
while(RCC_GetSYSCLKSource()!= 0x0C) //每次都死在这里
{
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
整体程序如下
void Clock_Init(void)
{
u8 i;
RCC_DeInit ( );
RCC_HSEConfig(RCC_HSE_OFF); //关闭HSE时钟
RCC_HSICmd(ENABLE); //时能HSI时钟
while(RCC_GetFlagStatus ( RCC_FLAG_HSIRDY) == RESET ) //等待HSI时钟稳定
{
}
FLASH_PrefetchBufferCmd(ENABLE); //开启FLASH预读缓冲功能,加速FLASH的读取
FLASH_SetLatency(FLASH_Latency_1); //FLASH时序延迟1个周期,等待总线同步操作
RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2); //HSI作为PLL时钟4倍频,2分频
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB = SYSCLK 16M
RCC_PCLK2Config(RCC_HCLK_Div1) ; //APB2=16M
RCC_PCLK1Config(RCC_HCLK_Div1); //APB1=16M
RCC_PLLCmd(ENABLE); //只能PLL时钟
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //PLL稳定
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK) ; //选用PLL时钟为系统时钟32M
i=RCC_GetSYSCLKSource();
while(RCC_GetSYSCLKSource()!= 0x0C)//while(RCC_GetSYSCLKSource()!= 0x0C)// //等待时钟稳定
{
}
}
---------------------------------
运行到 i=RCC_GetSYSCLKSource();时,点击step over运行,函数死在了里面,停止点击step,程序提示错误如下:
出现 Debuger-Cortex-M Error
Could not stopCortex-M device! laese check the JTAG cable.
---------------------------------
按照 这个方法修改
使用keil U4,用Jlink对STM32板子在线仿真后,全速运行后死机,停止运行后弹出“Could not stop Cortex-M device!Please check the JTAG cable ”,硬件的情况网上有其他的,我的问题是编译器设置的问题,对Option中的c/c++中进行1级程序优化选择、勾选“Optimize for time”(这个应该和网上谈到晶振设置过大原因类是吧)、勾选“One ELF Section per Function”;勾选Option中ASM的“Thumb Mode”(不是Cortex-M3包含了Thumb指令集的呢?)。解决是这样解决的,反正出问题的时候都是设置了c/c++和asm.
发现i=i=RCC_GetSYSCLKSource();可以运行过去,但是查看变量时,i没有值,运行
while(RCC_GetSYSCLKSource()!= 0x0C)//while(RCC_GetSYSCLKSource()!= 0x0C)// //等待时钟稳定
{
}
提示Cannot access Memory,程序一直也出不去~
一周热门 更多>