select函数第一个参数函数SystemInit里面有些啥

ALIENTEK 战舰STM32开发板
⑥AHB到APB的桥:连接所有的APB设备
⑦内部FlASH闪存器
⑧内部SRAM
下面我们具体讲解一下图中几个总线的知识:
① ICode总线:该总线将M3内核指令总线和闪存指令接口相连,指令的预取在该总线上面完成。
② DCode总线:该总线将M3内核的DCode总线与闪存存储器的数据接口相连接,常量加载和调试访问在该总线上面完成。
③ 系统总线:该总线连接M3内核的系统总线到总线矩阵,总线矩阵协调内核和DMA间访问。
④ DMA总线:该总线将DMA的AHB主控接口与总线矩阵相连,总线矩阵协调CPU的DCode和DMA到SRAM,闪存和外设的访问。
⑤ 总线矩阵:总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。
⑥ AHB/APB桥:这两个桥在AHB和2个APB总线间提供同步连接,APB1操作速度限于36MHz,APB2操作速度全速。
对于系统架构的知识,在刚开始学习STM32的时候只需要一个大概的了解,大致知道是个什么情况即可。对于寻址之类的知识,这里就不做深入的讲解,中文参考手册都有很详细的讲解。
4.3 STM32时钟系统
STM32时钟系统的知识在《STM32中文参考手册V10》中的P55~P73有非常详细的讲解,网上关于时钟系统的讲解也基本都是参考的这里,讲不出啥特色,不过作为一个完整的参考手册,我们必然要提到时钟系统的知识。这些知识也不是什么原创,纯粹的是看网友发的帖子和手册来总结的,有一些直接是copy过来的,望大家谅解。
众所周知,时钟系统是CPU的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32的时钟系统比较复杂,不像简单的51单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为什么STM32要有多个时钟源呢? 因为首先STM32本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十k的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的MCU一般都是采取多时钟源的方法来解决这些问题。 首先让我们来看看STM32的时钟系统图吧:
ALIENTEK 战舰STM32开发板
图4.3.1STM32时钟系统图
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。从时钟频率来分可以分为高速时钟源和低速时钟源,在这5个中HIS,HSE以及PLL是高速时钟,LSI和LSE是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中HSE和LSE是外部时钟源,其他的是内部时钟源。下面我们看看STM32的5个时钟源,我们讲解顺序是按图中红圈标示的顺序:
①、HSI是高速内部时钟,RC振荡器,频率为8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。我们的开发板接的是8M的晶振。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。独立看门狗的时钟源只能是LSI,同 时LSI还可以作为RTC的时钟源。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。 ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为
ALIENTEK 战舰STM32开发板
2~16倍,但是其输出频率最大不得超过72MHz。
上面我们简要概括了STM32的时钟源,那么这5个时钟源是怎么给各个外设以及系统提供时钟的呢?这里我们将一一讲解。我们还是从图的下方讲解起吧,因为下方比较简单。 图中我们用A ~E标示我们要讲解的地方。
A. MCO是STM32的一个时钟输出IO(PA8),它可以选择一个时钟信号输出,可以
选择为PLL输出的2分频、HSI、HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。
B. 这里是RTC时钟源,从图上可以看出,RTC的时钟源可以选择LSI,LSE,以及
HSE的128分频。
C. 从图中可以看出C处USB的时钟是来自PLL时钟源。STM32中有一个全速功能
的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。
D. D处就是STM32的系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时
钟源。系统时钟可选择为PLL输出、HSI或者HSE。系统时钟最大频率为72MHz,当然你也可以超频,不过一般情况为了系统稳定性是没有必要冒风险去超频的。 E. 这里的E处是指其他所有外设了。从时钟图上可以看出,其他所有外设的时钟最
终来源都是SYSCLK。SYSCLK通过AHB分频器分频后送给各模块使用。这些模块包括:
①、AHB总线、内核、内存和DMA使用的HCLK时钟。
②、通过8分频后送给Cortex的系统定时器时钟,也就是systick了。
③、直接送给Cortex的空闲运行时钟FCLK。
④、送给APB1分频器。APB1分频器输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。
⑤、送给APB2分频器。APB2分频器分频输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。
其中需要理解的是APB1和APB2的区别,APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3等等,APB2上面连接的是高速外设包括UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA~PE)、第二功能IO口等。居宁老师的《稀里糊涂玩STM32》资料里面教大家的记忆方法是2&1, APB2下面所挂的外设的时钟要比APB1的高。
在以上的时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。后面我们讲解实例的时候回讲解到时钟使能的方法。
STM32时钟系统的配置除了初始化的时候在system_stm32f10x.c中的SystemInit()函数中外,其他的配置主要在stm32f10x_rcc.c文件中,里面有很多时钟设置函数,大家可以打开这个文件浏览一下,基本上看看函数的名称就知道这个函数的作用。在大家设置时钟的时候,一定要仔细参考STM32的时钟图,做到心中有数。这里需要指明一下,对于系统时钟,默认情况下是在SystemInit函数的SetSysClock()函数中间判断的,而设置是通过宏定义设置的。我们可以看看SetSysClock()函数体: static void SetSysClock(void)
#ifdef SYSCLK_FREQ_HSE
看过本文章的还看过。。。
stm32开发指南v0 库函数版本_计算机软件及应用_it计算机_专业资料......
stm32开发指南v0 库函数版本_计算机软件及应用_it计算机_专业资料。alientek 战舰stm32开发板 stm32 开发指南 ?alientek 战舰 stm32 开发板库函数教程 官方.........
stm32用库函数建工程非常详细_电子电路_工程科技_专业资料。logo stm32在iar..乘机安全小贴士 安全乘机指南 如何选择安全的航班 正确使用机上氧气面罩文档.........
stm32f4 开发指南(库函数版) alientek 探索者 stm32f407 开发板教程 第四章 stm32f4 开发基础知识入门这一章,我们将着重 stm32 开发的一些基础知识,让大家对.........
stm32f4 开发指南(库函数版) alientek 探索者 stm32f407 开发板教程 第七章 蜂鸣器实验上一章,我们介绍了 stm32f4 的 io 口作为输出的使用,这一章,我们将.........
第八章 gpio按键输入实验-正点原子探索者stm32f4开发板-stm32f4开发指南-库函数版本_电子电路_工程科技_专业资料。文档平台:正点原子探索者stm32f407开发板手册名.........
献给新手:解析stm32的库函数_电子电路_工程科技_专业资料。非常意...通过 查阅 stm32 微控制器开发手册可以得知,stm32 的外设起始基地址为 0x.........
stm32f4 开发指南(库函数版) alientek 探索者 stm32f407 开发板教程 第二章 实验平台硬件资源详解本章,我们将节将向大家详细介绍 alientek 探索者 stm32f4 .........
解析stm32库函数_信息与通信_工程科技_专业资料。转载一网友文章,应该有帮助今日...新版stm32下载库函数流程... 4页 免费 stm32开发指南v0 库函... 841页.........
stm32固件库使用手册的中文翻译_信息与通信_工程科技_专业资料。ew ...每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都.........
stm32固件库使用手册 v5版本_电子电路_工程科技_专业资料。stm32固件库使用...由于整个固态 函数库按照“strict ansi-c”标准编写,它不受不同开发环境的影响.........
5、 stm32 固件库 a) 相关定义,文档约定和固件库规则; b) 库的架构,安装指南及使用实例; c) 每个外围模块的函数及解释。 6、 开发板原理图 必不可少的.........
stm32f103函数库手册_计算机硬件及网络_it计算机_专业资料。资料整理自互联网,...由于整个固态 函数库按照“strict ansi-c”标准编写,它不受不同开发环境的影响.........
《stm32开发指南》v0目录结构_电子电路_工程科技_专业资料。stm32开发指南...alientek 战舰stm32开发板 stm32 开发指南 ?alientek 战舰 stm32 开发板库函数.........
以英文版为准 文档和库规范 文档和库规范本用户手册和固态函数库按照以下...368页 1下载券 stm32开发指南v0 库函... 411页 免费.........
理解__stm32__gpio初始化__库函数_数学_自然科学_专业资料。使用库函数进行 ...通过 查阅 stm32 微控制器开发手册可以得知,stm32 的外设起始基地址为 0x.........
stm32f4 开发指南(库函数版) alientek 探索者 stm32f.....
stm32固件库使用手册的中文翻译版_信息与通信_工程科技_专业资料。xuexiziliaoum...由于整个固态 函数库按照“strict ansi-c”标准编写,它不受不同开发环境的影响.........
stm32l051编程指南上_电子电路_工程科技_专业资料。pm0223 programming manual stm32l0 series cortex?-m0+ programming manual introduction this programmin .........
项目所用开发环境及其版本 ? 帮助文档:stm32f0xx_...单步运行跳过一个函数 单步运行 从当前函数跳出 全速...stm32固件库使用手册的中... 368页 1下载券
um0427 用户手册 32 位基于 arm 微控制器 stm32f101xx 与 stm32f103xx 固件...由于整个固态 函数库按照“strict ansi-c”标准编写,它不受不同开发环境的影响.........
■ 热门推荐STM32新手常见的一个错误解决
我的图书馆
STM32新手常见的一个错误解决
简介:本文介绍了新入手STM32时常遇到的一个错误...\OutProj\test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).的解决方法。程序错误解决:1...\OutProj\test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).这个错误很明显提示我们错误就是:没有定义SystemInit这个符号,然后参考startup_stm32f10x_md.o但是这个是由startup_stm32f10x_md.s生成的,一般.o文件是由.c或者.s生成当找到错误的原因,我们就可以进去startup_stm32f10x_md.s文件中找到定义SystemInit这个文件。在此文件里面可以找到SystemInit的所在:Reset handlerReset_Handler PROCEXPORT Reset_Handler[WEAK]IMPORT __mainIMPORT SystemInitLDR R0, =SystemInitBLX R0LDR R0, =__mainBXR0ENDP原来在复位中断服务函数里面,调用了SystemInit这个函数,而这个函数在.s文件里面没有定义。所以解决的办法有下面三个1.在外部(其他任何.c文件里面)定义SystemInit这个函数,哪怕是个空函数也可以。2.把IMPORT SystemInitLDR R0, =SystemInitBLX R0这两句话注释掉或者去掉。3.可以添加system_stm32f10x.c这个库文件,到工程里面,也可以解决。但是第三种方法比较麻烦,因为如果你自己定义了一些函数,也许和system_stm32f10x.c有冲突那么就要改成一样的函数名字或者变量名。不推荐使用这种方法。4.当然你也可以重新编写startup_stm32f10x_md.s这个文件。推荐使用第二种方法,快捷,方便。至此,此问题解决。
TA的最新馆藏[转]&[转]&[转]&
喜欢该文的人也喜欢STM32(2)
SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()这个函数从来没有关心过,只知道这是进行STM32系统初始化的一个函数。今天决定仔细看看,重新开始STM32的学习。这个函数在system_stm32f10x.c中,此C文件主要就是干具体硬件配置相关的工作。
从函数说明来看,此函数功能就是初始化内部FALSH,PLL并且更新系统时钟。此函数需在复位启动后调用。
第一行代码操作时钟控制寄存器,将内部8M高速时钟使能,从这里可以看出系统启动后是首先依靠内部时钟源而工作的。
这两行代码则是操作时钟配置寄存器。其主要设置了MCO(微控制器时钟输出)PLL相关(PLL倍频系数,PLL输入时钟源),ADCPRE(ADC时钟),PPRE2(高速APB分频系数),PPRE1(低速APB分频系数),HPRE(AHB预分频系数),SW(系统时钟切换),开始时,系统时钟切换到HSI,由它作为系统初始时钟。宏STM32F10X_CL是跟具体STM32芯片相关的一个宏。
这几句话则是先在关闭HSE,CSS,,PLL等的情况下配置好与之相关参数然后开启,达到生效的目的。
这一段主要是跟中断设置有关。开始时,我们需要禁止所有中断并且清除所有中断标志位。不同硬件有不同之处。
这段跟设置外部RAM有关吧,我用到的STM32F103RBT与此无关。
此又是一个函数,主要是配置系统时钟频率。HCLK,PCLK2,PCLK1的分频值,分别代表AHB,APB2,和APB1。当然还干了其它的事情,配置FLASH延时周期和使能预取缓冲期。后面的这个配置具体还不了解。
这段代码主要是实现向量表的重定位。依据你想要将向量表定位在内部SRAM中还是内部FLASH中。这个SCB开始没在STM32参考手册中发现,原来它是跟内核相关的东西。所以ST公司就没有把它包含进来吧。内核的东西后面再了解,这里给自己提个醒。
然后再看看SystemInit()中的那个函数SetClock()又做了什么吧。
从中可以看出就是根据不同的宏来设置不同的系统时钟,这些宏就在跟此函数在同一个源文件里。官方很是考虑周到,我们只需要选择相应宏就能达到快速配置系统时钟的目的。
比如这里我需要配置系统时钟为72MHZ,则只需要将#define SYSCLK_FREQ_72MHz &两边的注释符去掉。
这个函数里面又有SetSysClockTo72()函数,这个函数就是具体操作寄存器进行配置了。
上面的代码需要细细看。SystemInit()差不多就是这样了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:36202次
排名:千里之外
转载:45篇
(1)(1)(2)(5)(1)(1)(36)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'第10页/共11页
启动文件加载问题
N 多人问我这个简单的问题。说实话,我是很烦了。一个都不肯来论坛提问。没办法我来个自问自答吧,摆脱烦躁的重复工作。
由于标题不能输入过长的英文字符(但是中文字符可以),错误提示的全部信息如下: STM32_TEST.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
此问题错误提示已经十分清楚的告诉你错在哪里了,Undefined symbol SystemInit ,翻译过来就是:SystemInit 这个符号没有定义,随后的小括号告诉你了,是在
startup_stm32f10x_md.o这个文件里面被提及的,这个.o 文件在工程里面并没有,它是一个在编译的时候根据.c/.s文件生成的。所以我们只需要找到工程里面的.s 或者.c 即可,这里对应这个名字的就是startup_stm32f10x_md.s了。
在此文件里面可以找到SystemInit 的所在:
Reset_Handler
Reset_Handler
SystemInit
R0, =SystemInit
R0, =__main
原来在复位中断服务函数里面,调用了SystemInit 这个函数,而这个函数在.s 文件里面没有定义。
所以解决的办法有两个。
1,在外部(其他任何.c 文件里面)定义SystemInit 这个函数,哪怕是个空函数也可以。
SystemInit
R0, =SystemInit
这三句话去掉。
至此,此问题解决。
回头看看,此问题够简单吧? 提示已经说得明明白白了,为什么这么多人不会解决呢? 我想不是因为不认识这几个单词(不认识可以百度,google 啊),是懒惰和浮躁让他们失去了发现错误的能力和耐心。这也是任何想要成功的人,所要克服的最基本的两点。
所以,还有此类问题的朋友,请看完此文后自己反省反省。
另外,请有问题的朋友尽量论坛提问。求求你们了....
一个问题回答N 次,真的很痛苦。
第10页/共11页
寻找更多 ""后使用快捷导航没有帐号?
查看: 6747|回复: 3
注册时间最后登录阅读权限40积分634精华0帖子
举人, 积分 634, 距离下一级还需 366 积分
该用户从未签到
RT,调试stm32程序时一直卡在下面所示地方,屏蔽systeminit函数不行,屏蔽里面的SetSysClockTo72也不行,或者在主函数里设置断点也不行
求解答。。。
static void SetSysClockTo72(void)
&&__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
&&/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/& &
&&/* Enable HSE */& &
&&RCC-&CR |= ((uint32_t)RCC_CR_HSEON);
&&/* Wait till HSE is ready and if Time out is reached exit */
& & HSEStatus = RCC-&CR & RCC_CR_HSERDY;
& & StartUpCounter++;&&
&&} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
&&if ((RCC-&CR & RCC_CR_HSERDY) != RESET)
& & HSEStatus = (uint32_t)0x01;
注册时间最后登录阅读权限50积分1512精华0帖子
进士, 积分 1512, 距离下一级还需 1488 积分
TA的每日心情开心 14:24签到天数: 166 天连续签到: 1 天[LV.7]常住居民III
晶振不对??
注册时间最后登录阅读权限60积分6214精华4帖子
状元, 积分 6214, 距离下一级还需 3786 积分
TA的每日心情奋斗 00:41签到天数: 727 天连续签到: 1 天[LV.9]以坛为家II
如果你用的是IAR+Jlink,你看一下是不是调试器设置还是那个仿真器选项,改成Jlink就好了。
注册时间最后登录阅读权限20积分181精华0帖子
童生, 积分 181, 距离下一级还需 19 积分
TA的每日心情开心 18:59签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I
我也遇到过这种问题,MDK simulator,没有接硬件,选择了调试直接调转到main,跟你这一样卡在这里,后来发现在Debug选项卡里Dialog DLL&&等几个空不太对,后来改成
DARMSTM.DLL& &-pSTM32F103VE
爱板会员勋章
注册成为爱板网会员
活跃会员勋章
经常参与各类话题的讨论,发帖内容较有主见
发帖机器勋章
在论坛积极发帖,数量巨大,质量较高
站长推荐 /6
Powered by Discuz!}

我要回帖

更多关于 第一个登上月球的人 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信