打印

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

[复制链接]
4888|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天调试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 | 只看该作者
城主在线,能否帮忙确认下。先谢了!

使用特权

评论回复
5
香水城| | 2011-8-30 13:26 | 只看该作者
请以数据手册为准,手册上说有就有,手册上说没有就没有。

使用特权

评论回复
6
running_li|  楼主 | 2011-8-30 13:36 | 只看该作者
我没理解错的话,数据手册上应该是有的。不知道有没有人用过这颗MCU,同时用到这个timer。希望用的能给我确认。我是在初始化TIM17出问题,因为没有什么代码,仅仅是配置寄存器,就发现不能访问TIM17的寄存器,访问后就进入了hardfault中断,这个现象应该是访问了不非法地址。试过TIM15和TIM16也有同样的问题。有这颗MCU的可以试试。

使用特权

评论回复
7
香水城| | 2011-8-30 13:37 | 只看该作者
检查一下你的访问地址对不对,时钟配置对不对。

使用特权

评论回复
8
running_li|  楼主 | 2011-8-30 13:48 | 只看该作者
我再查看下访问的地址,因为我用相同的代码,用另一颗MCU STM32F100RB试过,没有遇到相同的问题。时钟应该不会有问题。后面这颗flash要大一些。

使用特权

评论回复
9
running_li|  楼主 | 2011-8-30 14:02 | 只看该作者
我将自己配置的时钟都停掉,只保留库中的时钟。现在只操作这个timer的寄存器,操作的地址也没问题。在图片断点处,单步后就进入到hardfault中了。

使用特权

评论回复
10
香水城| | 2011-8-30 15:54 | 只看该作者
对应的TIM时钟开了吗?

使用特权

评论回复
11
running_li|  楼主 | 2011-8-30 16:14 | 只看该作者
TIM时钟开和没开都试过,结果都是一样的。

使用特权

评论回复
12
wzf3151| | 2011-8-30 16:43 | 只看该作者
编译器编译的代码会不会和你看到的不一样?去看编译出来的汇编代码

使用特权

评论回复
13
running_li|  楼主 | 2011-8-30 17:59 | 只看该作者
抓了几张图片,分别如下:
1.进入库中的初始化函数 TIM_TimeBaseInit(TIM17, &TIM_OCInitStructure)前,图片右边反汇编可以看到,首先进行了入栈操作,接着就将参数装入R0,完后就跳转到这个初始化函数。因为我对汇编指令不是很熟悉。不清楚初始化函数中的两个参数装到寄存器中是否正确,如果哪位兄弟熟悉,还请帮忙解释一下。

使用特权

评论回复
14
running_li|  楼主 | 2011-8-30 18:00 | 只看该作者
2. 进到函数TIM_TimeBaseInit中,在断点处,读取R0所指地址中的数据,放到寄存器R3中。

使用特权

评论回复
15
running_li|  楼主 | 2011-8-30 18:00 | 只看该作者
3. 在接下的汇编中,设一个断点,下一步后没有停在断点处

3.JPG (228.16 KB )

3.JPG

使用特权

评论回复
16
running_li|  楼主 | 2011-8-30 18:00 | 只看该作者
4. 暂停后发现,程序跑到了hardfault中断中。

使用特权

评论回复
17
香水城| | 2011-8-30 18:17 | 只看该作者
请问你在stm32f10x.h中是否选择了STM32F10X_LD_VL?

还有,你用的固件库是哪个版本?

使用特权

评论回复
18
running_li|  楼主 | 2011-8-30 18:25 | 只看该作者
有选择,如图。固件版本是STM32F10x_StdPeriph_Lib_V3.5.0。在ST社区下的。另外,我现在将TIM17换为TIM1了,只是将对应Pin脚和时钟作点修改,其他一样。没有出现这个问题。

使用特权

评论回复
19
guet_new_man| | 2011-8-30 21:00 | 只看该作者
这个估计得好好看一下手册吧

使用特权

评论回复
20
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

粉丝