关于跑马灯库函数和寄存器版的一点思考

2019-07-20 21:53发布

本帖最后由 壁虎 于 2016-5-29 13:35 编辑

跑马灯实验是我在32平台上的第一个程序。按照老师的视频,库函数版本很轻松的就完成了。在进行 寄存器版本 的实验时,我使用的是 寄存器新建工程模板 而没有按照视频的要求使用库函数新建工程模板。
按照视频将程序编写完后,LED闪烁时间明显加长。随后我与资料提供的标准 寄存器版本 跑马灯程序进行了对比,发现头文件有区别,同时少写了一句“Stm32_Clock_Init(336,8,2,7);”函数。加上后,程序运行正常。

结合以前的单片机开发经验,我对源码文件夹里的库函数和寄存器版的两个跑马灯程序进行了对比。发现,库函数没有设置时钟就可以正常delay,而寄存器需要进行时钟设置才可以正常delay。这里很不理解。


希望老师、同学们能一起讨论下。


附上两张库函数和寄存器版本的源代码程序。寄存器版的时钟被注释掉后,delay的时间明显加长。
ade27805.jpg     96c0e5cc.jpg

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
Fighting_Tao
1楼-- · 2019-07-21 11:07
壁虎 发表于 2016-5-30 22:21
寄存器的我能理解,但是库函数的时钟是如何设置的,或者具体是哪里设置的我不很明白

最终也是操作寄存器的,只是库函数用了很多宏定义。原理是一样的,你到函数体里面看看就知道啦
Lone
2楼-- · 2019-07-21 12:52
路过帮顶
ct3paul
3楼-- · 2019-07-21 17:18
看看库函数版本的函数 void SetSysClock(void)
壁虎
4楼-- · 2019-07-21 19:08
看完第20讲 SystemInit时钟系统初始化函数剖析的内容后,我觉得因为头文件的关系,库函数版的程序会在芯片初始化后,自动完成时钟的配置,不知道我认为的对不对。

一周热门 更多>