OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5198|回复: 6

JTAG调试问题,困扰我几天了,求助

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-24
在线时间
1 小时
发表于 2014-12-24 20:48:18 | 显示全部楼层 |阅读模式
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读取速度跟不上处理器
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-24
在线时间
1 小时
 楼主| 发表于 2014-12-24 20:48:19 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
用的是ALIENTEK Mini STM32 开发板

问题已经找到了,看上面我贴的程序,FLASH预取和FLASH半周期两条语句被注释掉,所以FLASH读取速度跟不上处理器
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-24
在线时间
1 小时
 楼主| 发表于 2014-12-24 21:46:07 | 显示全部楼层
原程序吧PLL作为系统时钟,我刚刚改为HSE作为系统时钟,竟然调试成功了。

为什么SRAM里面调试程序可以用PLL作为系统时钟,而FLASH里面不能用PLL作为系统时钟呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-24 21:53:03 | 显示全部楼层
你直接下载我们例程,测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-24
在线时间
1 小时
 楼主| 发表于 2014-12-24 22:06:03 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
你们的跑马灯没问题,我问一下跑马灯设置的系统时钟是不是PLL ?  LL是几倍频?

刚刚我反复调试,确定原因了,当PLL设置到9倍频,写入CFGR寄存器马上死机。  LL设置到8倍频,写入以后过一两秒种死机。  LL设置7倍频可以正常运行。

这情况是不是代表芯片有问题?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-25 23:06:07 | 显示全部楼层
回复【4楼】liujing0146:
---------------------------------
这些我们教程都有写。
9倍频。你外部晶振多大?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-12-26 09:03:20 | 显示全部楼层
回复【4楼】liujing0146:
---------------------------------
不会你外部晶振太大,超频太多了吧。。。
学无止境
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 01:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表