在做实验的时候,考虑到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这个帖子里面给了一个模板,测试了一下,它的延时是准确的
对比了好久,尝试找出他们的区别,也无果。
有哪位已经把这个弄明白了的大佬,请不要吝啬自己的智慧,分享出来,让以后遇到这种问题的小伙伴有一个好的参照。。
谢谢啦
付上我更改后的代码
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8
// fac_us=SystemCoreClock/8000000; //为系统时钟的1/8
fac_us = 6 ;
fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数
}
我使用的是C8T6内部8M晶振经过倍频后达到48M作为主时钟的,那么SysTick_CLKSource_HCLK_Div8就是6M所以那个fasc_us 直接定义为6即可。
一周热门 更多>