新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2014-12-24
- 在线时间
- 1 小时
|
5金钱
我看的是刘凯老师的视频,刚刚学到JTAG调试,用的是MiniSTM32开发板。
一个很简单的点灯程序,用JTAG在SRAM里面调试代码,没有问题,单步、全速都正常,可是在FLASH里面就会卡死。
单步跟进去,运行到RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 里面,出来时全部代码都变成0xffffffff。仔细看里面的RCC->CFGR 设置成0x001D0402
这是这个系统时钟代码:
void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource)
{
u32 tmpreg = 0;
/* Check the parameters */
assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
tmpreg = RCC->CFGR;
/* Clear SW[1:0] bits */
tmpreg &= CFGR_SW_Mask;
/* Set SW[1:0] bits according to RCC_SYSCLKSource value */
tmpreg |= RCC_SYSCLKSource;
/* Store the new value */
RCC->CFGR = tmpreg;
}
这是主程序:
int main(void)
{
// u16 a;
RCC_Configuration();
GPIOA->CRL = 0x33333333;
GPIOA->CRH = 0x33333333;
while (1)
{
GPIOA->ODR = 0x0100;
Delay_MS(1000);
GPIOA->ODR = 0x0000;
Delay_MS(1000);
}
}
时钟程序:
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
//FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state
RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock
while(RCC_GetSYSCLKSource()!=0x08);
你们有遇到过这样的问题吗? 我应该往哪方面去查问题?
谢谢!
|
最佳答案
查看完整内容[请看2#楼]
回复【5楼】正点原子:
---------------------------------
用的是ALIENTEK Mini STM32 开发板
问题已经找到了,看上面我贴的程序,FLASH预取和FLASH半周期两条语句被注释掉,所以FLASH读取速度跟不上处理器
|