[STM32F2] ,时钟值不同

[复制链接]
958|14
 楼主| houcs 发表于 2016-10-28 21:37 | 显示全部楼层 |阅读模式
MDK单步执行和全速执行
pengf 发表于 2016-10-28 21:38 | 显示全部楼层
楼主详细说说怎么回事啊,这么说太笼统了
 楼主| houcs 发表于 2016-10-28 21:41 | 显示全部楼层
MDK4.6, 外接8M晶振, 使用STM32_USB-Host-Device_Lib_V2.1.0, 选STM322xG-EVAL_USBH-FS,  在main函数的最开始加入RCC_GetClocksFreq(&rcc_clocks)查看时钟, 并在此设置断点.
supernan 发表于 2016-10-28 21:47 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| houcs 发表于 2016-10-28 21:50 | 显示全部楼层

int main(void)
{
  RCC_ClocksTypeDef  rcc_clocks;

  RCC_GetClocksFreq(&rcc_clocks);
  ......
}

单步执行SystemInit, 然后到断点:
RCC_GetClocksFreq里走的是case 0x08分支.
rcc_clocks的各个值为:
SYSCLK=120000000, HCLK=120000000, PCLK1=30000000, PCLK2=60000000

全速执行到断点:
RCC_GetClocksFreq里走的是case 0x00分支.
rcc_clocks的各个值为:
SYSCLK=16000000, HCLK=16000000, PCLK1=16000000, PCLK2=16000000

我的代码还都未执行, 真的崩溃了.
有人碰到过同样的问题吗?
liuzaiy 发表于 2016-10-28 21:52 | 显示全部楼层
MDK问题?
yinxiangh 发表于 2016-10-28 21:55 | 显示全部楼层
你是在做usb的试验吧,usb的时钟我记得好像来自pll锁相环。在main函数之前是要先执行SystemInit这个函数
ousj 发表于 2016-10-28 21:56 | 显示全部楼层
这个你在debug那个选线改下,不要点那个 run to main前面的括号就行了
morrisk 发表于 2016-10-28 21:58 | 显示全部楼层
不知道你用的什么库,有些库中在SystemInit会设置系统时钟,系统时钟与usb的时钟也是有关系的吧。
小小猫咪 发表于 2016-10-28 22:00 | 显示全部楼层
另外,你截图好说明一些。
 楼主| houcs 发表于 2016-10-28 22:04 | 显示全部楼层
我试了跟勾不勾选Run to main没关系.
跟单步执行SystemInit里面的SetSysClock有关
 楼主| houcs 发表于 2016-10-28 22:07 | 显示全部楼层
如果进入到SetSysClock里面, 单步执行过这个函数里面的语句, 则时钟值是对的
SYSCLK=120000000, HCLK=120000000, PCLK1=30000000, PCLK2=60000000
 楼主| houcs 发表于 2016-10-28 22:09 | 显示全部楼层

如果step over这个函数, 则进入main后, 时钟值四个都是16000000(HSI_VALUE)
SYSCLK=16000000, HCLK=16000000, PCLK1=16000000, PCLK2=16000000
juventus9554 发表于 2016-10-28 22:11 | 显示全部楼层
换个版本
 楼主| houcs 发表于 2016-10-28 22:13 | 显示全部楼层
居然真的是MDK问题,  换个版本就没这现象了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部