求助--STM32F100C6无法访问TIM16和TIM17

[复制链接]
5856|24
 楼主| running_li 发表于 2011-8-30 13:10 | 显示全部楼层 |阅读模式
今天调试STM32F100C6的TIM17,发现TIM17的寄存器根本无法访问,不论是读还是写,结果都是跑到了hardfault中断去了。同样的代码在STM32F100RB中没有问题。我现在怀疑STM32F100C6到底有没有TIM17的timer。有用过这颗MCU的兄弟们吗?能否帮忙确认一下我的疑问。谢谢!
xuewant 发表于 2011-8-30 13:14 | 显示全部楼层
额。。。。。。。。。。。。。。。。。
 楼主| running_li 发表于 2011-8-30 13:18 | 显示全部楼层
有试过的么?我试过TIM15 TIM16 TIM17都不行,但是应该没有的TIM4确可以。奇怪了。
 楼主| running_li 发表于 2011-8-30 13:20 | 显示全部楼层
城主在线,能否帮忙确认下。先谢了!
香水城 发表于 2011-8-30 13:26 | 显示全部楼层
请以数据手册为准,手册上说有就有,手册上说没有就没有。
 楼主| running_li 发表于 2011-8-30 13:36 | 显示全部楼层
我没理解错的话,数据手册上应该是有的。不知道有没有人用过这颗MCU,同时用到这个timer。希望用的能给我确认。我是在初始化TIM17出问题,因为没有什么代码,仅仅是配置寄存器,就发现不能访问TIM17的寄存器,访问后就进入了hardfault中断,这个现象应该是访问了不非法地址。试过TIM15和TIM16也有同样的问题。有这颗MCU的可以试试。
香水城 发表于 2011-8-30 13:37 | 显示全部楼层
检查一下你的访问地址对不对,时钟配置对不对。
 楼主| running_li 发表于 2011-8-30 13:48 | 显示全部楼层
我再查看下访问的地址,因为我用相同的代码,用另一颗MCU STM32F100RB试过,没有遇到相同的问题。时钟应该不会有问题。后面这颗flash要大一些。
 楼主| running_li 发表于 2011-8-30 14:02 | 显示全部楼层
初始化错误地方.JPG 我将自己配置的时钟都停掉,只保留库中的时钟。现在只操作这个timer的寄存器,操作的地址也没问题。在图片断点处,单步后就进入到hardfault中了。
香水城 发表于 2011-8-30 15:54 | 显示全部楼层
对应的TIM时钟开了吗?
 楼主| running_li 发表于 2011-8-30 16:14 | 显示全部楼层
TIM时钟开和没开都试过,结果都是一样的。
wzf3151 发表于 2011-8-30 16:43 | 显示全部楼层
编译器编译的代码会不会和你看到的不一样?去看编译出来的汇编代码
 楼主| running_li 发表于 2011-8-30 17:59 | 显示全部楼层
抓了几张图片,分别如下:
1.进入库中的初始化函数 TIM_TimeBaseInit(TIM17, &TIM_OCInitStructure)前,图片右边反汇编可以看到,首先进行了入栈操作,接着就将参数装入R0,完后就跳转到这个初始化函数。因为我对汇编指令不是很熟悉。不清楚初始化函数中的两个参数装到寄存器中是否正确,如果哪位兄弟熟悉,还请帮忙解释一下。
1.JPG
 楼主| running_li 发表于 2011-8-30 18:00 | 显示全部楼层
2. 进到函数TIM_TimeBaseInit中,在断点处,读取R0所指地址中的数据,放到寄存器R3中。
2.JPG
 楼主| running_li 发表于 2011-8-30 18:00 | 显示全部楼层
3. 在接下的汇编中,设一个断点,下一步后没有停在断点处
3.JPG
 楼主| running_li 发表于 2011-8-30 18:00 | 显示全部楼层
4. 暂停后发现,程序跑到了hardfault中断中。
4.JPG
香水城 发表于 2011-8-30 18:17 | 显示全部楼层
请问你在stm32f10x.h中是否选择了STM32F10X_LD_VL?

还有,你用的固件库是哪个版本?
 楼主| running_li 发表于 2011-8-30 18:25 | 显示全部楼层
有选择,如图。固件版本是STM32F10x_StdPeriph_Lib_V3.5.0。在ST社区下的。另外,我现在将TIM17换为TIM1了,只是将对应Pin脚和时钟作点修改,其他一样。没有出现这个问题。
未命名.JPG
guet_new_man 发表于 2011-8-30 21:00 | 显示全部楼层
这个估计得好好看一下手册吧
 楼主| running_li 发表于 2011-9-5 10:53 | 显示全部楼层
自己来结个贴。在网上找到一位遇到相同问题的工程师,和他交流后,最后确认是芯片型号的问题,这个型号的MCU内部确实没有这些timer,跟固件库和设置无关。我现在使用的MCU型号全称是STM32F100C6T6A991BL,datasheet有给MCU的名称进行解释,使用的例子是STM32F100C6T6B xxx。在STM32F100C6T6后面有一个字母,我的MCU上是A,例子使用的是B,解释说这个字母是internal code,而有无这些timer外设就是体现在这个internal code上面。这点这位工程师给我确认了,先谢谢这位了。
最后提点建议,ST有给型号名称做说明,为什么就不进行的彻底些呢?这样也就不至于造成一些不必要的麻烦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

34

帖子

0

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