stm32小白学习记录(一)

《stm32库开发实战指南》摘录及笔记

MCU(微控制器)

 

CMSIS标准( Cortex Microcontroller Software Interface Standard):解决软件在同内核、不同外设上移植困难的问题

 

  • 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供
  • 设备外设访问层:提供了片上的核外外设地址中断意义主要由芯片生产商提供

STM32库是由ST公司针对STM32提供的函数接口,即API(Application Program Interface):应用程序接口,通过这些函数接口来配置STM32的寄存器。

 

学习时注意以下几点:

1)适应试用库的开发方式,加强运用C语言的能力,建立工程意识

2)熟悉Cortex-M系列芯片构架,了解CMSIS标准,熟悉STM32的总线架构

3)掌握I2C,SPI,SDIO,CAN,TCP/IP,等各种通信协议

 

库目录、文件简介:

  • Libraries文件夹:驱动库的源代码及启动文件(在使用库开发时,我们需要把Libraries目录下的库函数文件添加到工程中)
  • Project文件夹:用驱动库写的例子和一个工程模板
  • 库帮助文档:这是一个已经编译好的HTML文件,主要讲述如何使用驱动库来编写自己的应用程序。


CMSIS文件下

 

库目录、文件简介

1.   core_cm3.c文件

CoreSupport文件夹

core_cm3.c文件中包含了"stdint.h"这个头文件,这是一个ANSI C 文件,是独立于处理器之外的

 

stdint.c文件中的类型定义

1.    /* exact-width signed integer types */  

2.    typedef   signed          char int8_t;   

3.    typedef   signed short     int int16_t;   

4.    typedef   signed           int int32_t;   

5.    typedef   signed       __int64 int64_t;   

6.    

7.    /* exact-width unsigned integer types */  

8.    typedef unsigned          char uint8_t;   

9.    typedef unsigned short     int uint16_t;   

10.    typedef unsigned           int uint32_t;   

11.    typedef unsigned       __int64 uint64_t;  

 

 

2.    system_stm32f10x.c文件

(在DeviceSupport文件夹下的是启动文件、外设寄存器定义和中断向量定义层的一些文件,这是由ST公司提供的)

system_stm32f10x.c(由ST公司提供的,遵守CMSIS标准):功能是设置系统时钟和总线时钟。所有外设都与时钟的频率有关,所以这个文件的时钟配置很关键。

system_stm32f10x.c在实现系统时钟时要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含stm32f10x.h这个头文件。

 

 

 

3.stm32f10x.h文件 

这个文件非常重要,它包含了STM32中寄存器地址和结构体类型定义,在使用到STM32固件库的地方都要包含这个头文件。

 

4.启动文件

 

  • 启动文件的类型

 

Libraries\CMSIS\Core\CM3\startup\arm文件夹下是由汇编语言写的系统启动文件,不同的文件对应不同的芯片型号

文件名的英文缩写的意义如下:

cl:互联新产品,stm32f105/107系列

vl:超值型产品,stm32f100系列

xl:超高密度(容量)产品,stm32f101/103系列

ld:低密度产品,Flash小于64KB

md:中等密度产品,Flash等于64KB或者128KB

hd:高密度产品,Flash大于128KB

如STM32F103VET6,64KB RAM和512KB ROM,是属于高密度产品,所以启动文件要选择startup_stm32f10x_hd.s

 

  • 启动文件的作用

 

启动文件是任何处理器在上电复位之后最先运行的一段汇编程序。在我们编写的C语言运行之前,需要由汇编语言为C语言的运行建立一个合适的环境,接下来才能运行我们的环境。

总的来说,其作用如下:

1.初始化堆栈指针SP

2.初始化程序计数器指针PC

3.设置堆、栈的大小

4.设置异常向量表的入口地址

5.配置外部SRAM作为数据存储器(这个有用户配置,一般开发板没有外部SRAM)

6.设置C库的分支入口_main(最终用来调用main函数)

7.3.5版本的启动文件还调用了在system_stm32f10x.c文件中的SystemIni()函数配置系统时钟,在旧版本的工程中要用户进入main函数自己调用SystemIni()函数

 

 

5.STM32F10x_StdPeriph_Driver文件夹

 

 

Libraries\STM32F10x_StdPerph_Driver文件夹下有inc(include缩写)和src(source缩写)这两个文件夹,这都属于CMSIS的设备外设函数部分。src里面是每个设备外设的驱动程序。

inc文件夹包含各个外设的头文件(stm32f10x_ppp.h),src文件夹包含各个外设的源文件(stm32f10x_ppp.c)。ppp为外设名称。

另外还有HTML文件为版本库更新说明。

6.stm32f10x_it.c文件和stm32f10x_conf.h文件

 

在库目录的Project\STM32F10x_StdPeriph_Template目录下,存放了一个官方的工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下的stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h这三个文件。

stm32f10x_it.c是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常接口,其他普通中断服务函数由我们自己添加。具体清查阅库启动文件的源码。

stm32f10x_conf.h被包含进stm32f10x_it.h文件是用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除上面Driver目录的外设驱动函数库。

实际开发中使用断言时,先通过定义USE_FULL_ASSERT宏来使能断言,然后定义"assert_failed"函数,通常我们会让它调用printf函数输出错误说明。使能断言后,程序运行时会检查函数的输入参数,当软件经过测试,可发布时,会取消USE_FULL_ASSERT宏来去掉断言功能,使程序全速运行。

 

stm32f10x_stdperiph_ib_um.chm(库文件帮助文档 ):查阅此文件来了解库函数原型或库函数调用方法,也可以直接阅读源码里的函数说明。

【初学stm32,不愿放弃,还有众多不懂之处,但万丈高楼平地起,加油】

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值