F103C8T6移植delay程序后,延时变短的问题

2019-07-21 06:51发布

在做实验的时候,考虑到F103C8T6根F103ZET6似乎除了资源不同,同属一个系列的,于是将ZET6的延时函数delay直接用在C8T6上,发现延时的时候比正常时间短很多,设置1秒延时,实际出来的大概是0.16秒,一直找不到原因,到处搜索,无果。
http://www.openedv.com/posts/list/0/63500.htm这个帖子里面有一丁点的讨论,不过似乎给出的解决方案不能解决共性问题(至少我按照给出的方法没法解决)
http://www.openedv.com/thread-101469-1-1.html这个帖子里面给了一个模板,测试了一下,它的延时是准确的
对比了好久,尝试找出他们的区别,也无果。

有哪位已经把这个弄明白了的大佬,请不要吝啬自己的智慧,分享出来,让以后遇到这种问题的小伙伴有一个好的参照。。
谢谢啦

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
追破风的小石头
1楼-- · 2019-07-21 09:00
本帖最后由 追破风的小石头 于 2018-11-1 16:34 编辑

重新配置一下时钟即可,原子哥的代码默认是使用72M的主时钟,那么你的delay_init函数里面这个fasc_us这个基数就是9(system_core_clock/8000000),如果你是用的c8t6内部时钟倍频后作为主时钟(48M),那么建议你直接定义Fasc_us为6这值,,那么完美移植原子哥的delay函数。
正点原子
2楼-- · 2019-07-21 12:39
这。。。我以为实在是不能再简单的了啊。直接把我们的system文件夹拖过去就能用了,寄存器版本的,包你好用。只要你外部晶振是8M的。。。根本没难度
罗丹平11
3楼-- · 2019-07-21 17:36
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-21 23:05
罗丹平11 发表于 2017-11-23 08:41
原子哥,我试了一下还是不行。。。是不是哪还需要配置?
用上面链接里面的模板,时间是对的,而 ...

用寄存器版本的
我们的自己写的
Sun311
5楼-- · 2019-07-22 00:48
请问这个问题解决了吗?我也遇到一样的问题,不管用原子哥的库函数还是寄存器版,延时都要比正常快很多,加上SystemInit();也不行
良性循环
6楼-- · 2019-07-22 02:39
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/8000);
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);
把这两句加在systeminit最后两句上,然后DELAY函数里直接给delay_ms和delay_us赋值,
static unsigned int  fac_us=9;                //us延时倍乘数       
static unsigned long  fac_ms=9000;
根据系统时钟赋值,这是72M的赋值。

楼主试试看行不行!!

一周热门 更多>