你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F0的systick初始化的怪异问题

[复制链接]
sfesdmmm 提问时间:2015-11-2 20:50 /
本帖最后由 sfesdmmm 于 2015-11-6 22:10 编辑

用的芯片型号是STM32F030F4P6,TSSOP20封装,程序很简单,就把系统时钟设置为16M,然后产生一个100ms的systick中断,用一个LED来观察效果。
下面是初始化程序和主程序的截图:

main.png
系统初始化,时钟为16M,systick设置为100ms


sys.png
SysTick_Handler里把flag置1,主函数里判断


问题描述:在把程序烧进去以后,发现灯闪得很慢,如果把函数改成SysTick_Config(1600000);//即100ms就可以正常闪了。这说明RCC_GetClocksFreq(&RCC_Clocks); 获取的值不对。
于是就在线调试,看到systick相关的寄存器值不对了
init.png
不知道大家有没有遇到这样的问题?请不吝赐教,谢谢!

另外,在线调试的时候,跟踪代码,发现RCC_GetClocksFreq函数里,有程序跑飞的情况。



问题依然存在,现在把工程放上来了,劳烦各位可以下来看看,谢谢了!
在线调试的时候,进入UartInit函数里,点击“step over”,发现还是有程序跑飞的情况。

project.rar

下载

397.18 KB, 下载次数: 19, 下载积分: ST金币 -1

<
收藏 2 评论22 发布时间:2015-11-2 20:50

举报

22个回答
me浩 回答时间:2015-11-3 09:04:06
帮顶了。
chifen 回答时间:2015-11-3 21:50:06
SysTick_Config(1600000);   如果正好是100MS一次,而RCC_GetClocksFreq(&RCC_Clocks); 不是100MS一次,那RCC_Clocks得到值 就不对,说明你前面设置的时钟源不是16M
sfesdmmm 回答时间:2015-11-3 21:59:13
chifen 发表于 2015-11-3 21:50
SysTick_Config(1600000);   如果正好是100MS一次,而RCC_GetClocksFreq(&RCC_Clocks); 不是100MS一次,那R ...

是的,直接SysTick_Config(1600000)就没问题了。
但是,SysTick_Config(RCC_Clocks.HCLK_Frequency/10);        这样的方式,如果是在线烧录调试的话,又是正常的。我弄了几天,查了不少资料,感觉应该是systick设置的时候,出现了问题,这个跟优先级有关,但是又不知道怎么排除问题。

chifen 回答时间:2015-11-3 22:50:41
你 16M用外接晶振吧,我用内部的很正常的,
chifen 回答时间:2015-11-3 22:56:36
12333.png
0x2DC6C00=48000000    48M
chifen 回答时间:2015-11-3 22:57:07
你这样仿真一下看看你的是多少M就知道 对不对了
huaiqiao 回答时间:2015-11-4 10:02:50
其实真正设置时钟的函数是在这个SetSysClock()函数中。这个您这个应该是标准库的函数吧。STM32F030F4P6这个片子的HSI是几M,我给忘记了。这个要看时钟树的。
aabird 回答时间:2015-11-4 10:15:16
从来没遇到过这个问题,可能是我学识浅薄
sfesdmmm 回答时间:2015-11-4 19:47:27
chifen 发表于 2015-11-3 22:56
0x2DC6C00=48000000    48M

save.gif
给你看一下吧,这是在线运行的结果
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版