STM32单片机库函数问题

STM32单片机新版的库文件中,有个system_stm32f10x.c的系统文件中有个SystemInit();的函数,网上说可以用来直接设置时钟,那么与用stm32f... STM32单片机新版的库文件中,有个system_stm32f10x.c的系统文件中有个 SystemInit();的函数,网上说可以用来直接设置时钟,那么与用stm32f10x_rcc.c有什么不同?
我见有个例程上RCC_Configuration(void);函数中只调用了一个SystemInit();就完了,没有用stm32f10x_rcc.c这个库啊,这样与用stm32f10x_rcc.c中函数完成分频、设置倍频等有什么区别??
这么说3.0以上的版本固件库就可以直接用system_stm32f10x.c里的函数而不用stm32f10x_rcc.c了??

这两个库文件是不是功能一样??

怎么一楼和二楼说的有出入啊?哪个更正确?
展开
 我来答
天地境界5d4c266
2010-10-16 · TA获得超过572个赞
知道答主
回答量:117
采纳率:0%
帮助的人:49万
展开全部
一般不行
必须要调用stm32f10x_rcc.c,SystemInit()只是将系统的时钟帮你配置好,其实你也可以不调用它,你可以自己调用stm32f10x_rcc.c中的函数自己来配置,不过这样的话就要记得配置好flash的等待周期,两种方式之间没什么太大区别。另外一般你会需要开启外设的时钟或者其他一些功能就需要调用stm32f10x_rcc.c中的函数。
还有如果你使用的是3.2.0以上的库的话,SystemInit()其实不需要你自己调用,startup_stm32f10x_XX.s中有这样的代码
Reset_Handler
LDR R0, =SystemInit
意思就是上电(Reset)后执行的第一段代码就是SystemInit(),这是在main函数之前调用的,所以不需你自己再去调用了
SystemInit()在调用的时候要注意你自己板子上的外部晶振是多少,默认是25MHZ,如果你板子上的晶振的不是这么大的话,你需要修改stm32f10x.h里面的HSE_Value

补充:system_stm32f10x.c里的函数的功能仅仅是完成系统时钟的配置,如果你不使用任何外设或者用系统时钟做其他用的话是可以不用stm32f10x_rcc.c
stm32f10x_rcc.c中的函数不仅仅是完成分频倍频的功能,还有开启外设时钟,检测RCC中断,配置RTC时钟等功能,不是单单配置一个系统时钟那么简单
ATF144X
推荐于2016-03-15 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4655万
展开全部
你说的是3.0以上的固件库吗?

SystemInit()函数在主程序中被RCC_Configuration()函数调用,完成系统时钟的配置功能。我看过这个函数的具体内容,是直接操作寄存器来完成配置。如果使用stm32f10x_rcc.c文件中的函数来完成时钟配置,和SystemInit()的顺序和效果一样。

当然,为了保证兼容性,使低版本固件库写的程序运行,就还有stm32f10x_rcc.c存在,像早期版本的RCC_Configuration()函数就是使用这个文件中提供的函数来完成时钟配置的。

补充:是的,Systeminit()函数完成了时钟初始化的功能。另外systick的使用也变简单了,以前要几个函数完成初始化,现在只要一个就行。

你看看3.0版本固件system_stm32f10x.c中的代码是怎样的吧。其中是对RCC寄存器直接赋值操作,和stm32f10x_rcc.c中相关的函数作用一样。

如果在程序中要使用端口、外设等,由于这些东西需要时钟才能工作,所以还是需要stm32f10x_rcc.c中的函数来完成时钟的控制。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式