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

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条回答
lvehe
1楼-- · 2019-07-20 22:05
 精彩回答 2  元偷偷看……
壁虎
2楼-- · 2019-07-21 01:06
难道是我表达的不清楚?
原子给的源代码里,库函数的跑马灯比寄存器版的跑马灯少了一行设置时钟的函数,但是都可以正常delay。程序分析没有发现明显区别。请问寄存器为啥一定要设置始终,而函数不需要
Fighting_Tao
3楼-- · 2019-07-21 02:05
你应该是见工程模版的时候没有想一下把,建固件库工程模版的时候,时钟是在System_stm32f4xx.c 文件和stm32f4xx.h 文件里面设置的,在库函数开发指南里面写的很清楚。而寄存器版本的顾名思义操作都是通过操作寄存器实现的,那么Stm32_Clock_Init(336,8,2,7);这个函数就是操作相应的寄存器,改欲分屏系数等操作。你看看函数原型把,在对比一下库函数里面的就清楚了,最终都是通过操作寄存器实现的,只不过库函数里面都是采用宏定义的区别,,,
应该是这样,希望能帮到你
壁虎
4楼-- · 2019-07-21 03:23
lvehe 发表于 2016-5-30 21:54
库函数版本的时钟初始化在main函数之前隐式调用了,所以无需显式调用时钟初始化函数。教程里都有,自己看仔 ...

隐式调用??不明白,但是谢谢你的提醒
壁虎
5楼-- · 2019-07-21 08:40
Fighting_Tao 发表于 2016-5-30 22:01
你应该是见工程模版的时候没有想一下把,建固件库工程模版的时候,时钟是在System_stm32f4xx.c 文件和stm32 ...

寄存器的我能理解,但是库函数的时钟是如何设置的,或者具体是哪里设置的我不很明白
龙之谷
6楼-- · 2019-07-21 09:55
 精彩回答 2  元偷偷看……

一周热门 更多>