完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
掌握STM32的估计库的构成和每个库文件的作用,对我们使用库非常有帮助,我们这里以3.5版本的库来分析。
按照内核和外设的关系,我把库分成两个部分:内核相关,处理器相关。 _________________ |跟CM3(内核)相关的| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- cor_cm3.h 这个头文件实现了:1、内核结构体寄存器定义 2、内核寄存器内存映射 3、内存寄存器位定义。跟处理器相关的头文件stm32f10x.h实现的功能一样,一个是 针对内核的寄存器,一个是针对内核之外,即处理器的寄存器。 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- misc.h :内核应用函数库头文件 misc.c:内核应用函数库 在CM3这个内核里面还有一些功能组件,如NVIC、SCB、ITM、MPU、CoreDebug,CM3带有非常丰富的功能组件,但是芯片厂商在设计MCU的时候 有一些并不是非要不可的,是可裁剪的,比如MPU、ITM等在STM32里面就没有。其中NVIC在每一个CM3内核的单片机中都会有,但都汇被裁剪,只能 是CM3内核的一个子集。在NVIC里面还有一个SysTick,是一个系统定时器,可以提供时基,一般为操作系统定时器所用。这两个文件提供了操作这些 组件的函数,并可以在CM3内核单片机直接移植。处理器中与这两个文件相对应的就是:stm32f10x_xxx.h和stm32f10x_xxx.c。 _____________ |跟处理器相关的:|即内核之外,由SOC芯片厂商添加的 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 启动文件 在F1大容易产品中用的是这个:startup_stm32f10x_hd.s,该文件由汇编编写,主要作用是: 1、设置初始SP 2、设置初始PC=Reset_Handler 3、Set the vector table entries with the exceptions ISR address 意译过来就是:设置向量表的入口地址,并用异常地址初始化向量表。向量表里面保存的是异常响应的时候服务例程的入口地址。 STM32把向量表放在0地址开始的code区。 4、调用库函数SystemInit,把系统时钟配置成72M,SystemInit在库文件system_stm32f10.c定义 5、跳转到标号_mian,最终来到C的世界。 我们着重需要理解的就是第四和第五点 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- stm32f10x.h 这个头文件非常重要,可以说上帝之手。这个头文件实现了:1、处理器外设寄存器的结构体定义 2、处理器外设的内存映射 3、处理器外设寄存器的位定义 关于1和2我们暂时知道一概念即可,在其他的章节会有详细的说明。3:处理器外设寄存器的位定义,这个非常重要,具体是什么意思呢。我们知道一个寄存器 有很多个位,每个位写1或者写0的功能都是不一样的,处理器外设寄存器的位定义就是把外设的每个寄存器的每一个位写1的16进制数定义成一个宏,宏名即 用该位的功能名称表示,如果我们操作寄存器要开启某一个功能的话,就不用自己亲自去算这个值是多少,可以直接到这个头文件里面找。我们以片上外设 ADC为例,假设我们要启动ADC开始转换,根据手册我们知道是要控制ADC_CR2寄存器的位0:ADON,即往位0写1即可,即:ADC-》CR2=0x00000001; 这是一般的操作方法。现在这个头文件里面有关于ADON位的位定义:#define ADC_CR2_ADON ((uint32_t)0x00000001),有了这个位定义,我们刚刚的 代码就变成了:ADC-》CR2=ADC_CR2_ADON。这对于我们编程是何其方便,简直就是天降救星,感激之情无以言表啊。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- system_stm32f10x.c 这个文件的作用是里面实现了各种常用的系统时钟设置函数,有72M,56M,48,36,24,8M,我们使用的是是把系统时钟设置成72M。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- stm32f10x_xxx.h:外设xxx应用函数库头文件 这里面主要是实现外设某一功能的结构体,比如通用定时器有很多功能,有定时功能,有输出比较功能,有输入捕捉功能,而通用定时器有非常多的寄存器 要实现某一个功能,比如定时功能,我们根本不知道具体要操作哪些寄存器,这个头文件就为我们打包好了要实现某一个功能的寄存器,是以机构体的形式 定义的,比如通用定时器要实现一个定时的功能,我们只需要初始化TIM_TimeBaseInitTypeDef这个结构体里面的成员即可,里面的成员就是定时所需要 操作的寄存器。 具体的初始化函数在对应的stm32f10x_xxx.c文件中。 stm32f10x_xxx.c:外设xxx应用函数库 这里面写好了操作xxx外设的所有常用的函数,我们使用库编程的时候,使用的最多的就是这里的函数。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
521浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 09:17 , Processed in 0.809632 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号