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

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, 下载次数: 20, 下载积分: ST金币 -1

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

举报

22个回答
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-4 23:50:03
SysTick_Config(RCC_Clocks.HCLK_Frequency / 100000); 在这个地方打断开 ,之后光标指向 RCC_Clocks 会有一串 代码出来 上面就有RCC_Clocks.HCLK_Frequency  的值 ,你看一下是多少,或 选中RCC_Clocks
点右键  ADD到 Watch 1
QQ图片20151104234635.png

你可以把那段代码复制过来看一看,怀疑是你 倍频错了
sfesdmmm 回答时间:2015-11-14 20:44:22
安 发表于 2015-11-11 09:55
单步进入,看看执行哪一步发生的溢出。这样最可能的是入口数据的溢出。

经过这一两周的不断排除,现在确定跟RCC_GetClocksFreq函数有很大关系,但是具体问题出在哪里,不想继续纠结了,现在人为把RCC_ClocksStatus.USART1CLK_Frequency设定为系统时钟值就行了。心好累
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
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
给你看一下吧,这是在线运行的结果
废鱼 回答时间:2015-11-5 08:38:32
看一下配置,可能是把系统初始化配置错了。最好把工程发上来。
无线传感器啊 回答时间:2015-11-5 10:10:10
帮顶`````````
sfesdmmm 回答时间:2015-11-6 22:11:45
安 发表于 2015-11-5 08:38
看一下配置,可能是把系统初始化配置错了。最好把工程发上来。

版主你好,我已经把工程放上来了,劳烦您帮忙看一下,谢谢了!
废鱼 回答时间:2015-11-9 09:17:46
看代码及配置,用的是HSE,默认的HSE_VALUE的值是8000000。
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版