OpenEdv-开源电子网

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

请教关于STM32F105的CFGR2自动变化的问题

[复制链接]

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-6-7
在线时间
23 小时
发表于 2013-6-7 10:07:59 | 显示全部楼层 |阅读模式
版主及各位朋友好:

我在调试105的时候发现不时的出现程序死在了HardFault_Handler中断里,经单步调试后发现可能是由于RCC->CFGR2的值不是我设置的值了,导致频率高于72MHz,我很疑惑,为什么CFGR2的值会自己变化呢?

SetSysClockTo72函数中我修改了相关参数以配合外部8MHz晶振,

我单步走到清空CFGR寄存器相关位时(
RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE....)发现CFGR2的低4位由3变成了2,由此4分频变成了3分频导致主频超过72MHz,可是为什么会变呢? 请各位指教。 相关部分代码如下:(外部晶振采用8MHz)
#ifdef STM32F10X_CL
    /* Configure PLLs ------------------------------------------------------*/     /* PLL2 configuration: PLL2CLK = (HSE / 2) * 8 = 32 MHz */     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 4 = 8 MHz */         
    RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV2 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV4);
  
    /* Enable PLL2 */     RCC->CR |= RCC_CR_PLL2ON;
    /* Wait till PLL2 is ready */     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {     }     
   
    /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ 
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 
                            RCC_CFGR_PLLMULL9);

 #else[/mw_shl_code]




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-7 10:42:04 | 显示全部楼层
超频也不至于HARD FAULT了...
我103超到128M照样妥妥的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-7 10:42:12 | 显示全部楼层
你这个检查其他问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-6-7
在线时间
23 小时
 楼主| 发表于 2013-6-7 10:51:20 | 显示全部楼层
查到原因了,是因为在清空CFGR寄存器的PLLXTPRE位时也清空了CFGR2的最低位,这两位是自动关联的,没看清数据手册

但是系统还是会跑到HardFault_Handler,调试的时候有时甚至连main函数都到不了就直接飞到HardFault_Handler去了,我的开发环境是IAR+JTAG,debug设置了停止在main函数,请问各位,是什么原因导致会跳到HardFault_Handler呢?
回复 支持 反对

使用道具 举报

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-6-7
在线时间
23 小时
 楼主| 发表于 2013-6-7 11:40:37 | 显示全部楼层
其他问题可能的有哪些呢?flash的配置也没有错,而且这问题时有时无,有时候单步走到一条很简单的语句就飞了
回复 支持 反对

使用道具 举报

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-6-7
在线时间
23 小时
 楼主| 发表于 2013-6-7 11:44:08 | 显示全部楼层
附上我的原理图,请指教

Mainboard_sch_1.4.pdf

47.37 KB, 下载次数: 170

回复 支持 反对

使用道具 举报

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-6-7
在线时间
23 小时
 楼主| 发表于 2013-6-7 11:54:33 | 显示全部楼层
请问版主有没有iar的linker配置文件
就是那个icf文件,我怀疑是不是那里有问题
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-7 17:13:35 | 显示全部楼层
IAR不怎么熟悉哦.
hardfault据我的经验看来,一般是内存非法访问,导致的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-6-7
在线时间
23 小时
 楼主| 发表于 2013-6-7 19:37:14 | 显示全部楼层
先主要是有时候连main函数都走不到就出错了,另外如果我在代码里注释掉某条或取消注释(同一条),再debug就又能跑了,搞得我无从下手
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 22:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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