所有芯片的引脚顺序都是逆时针排序的;
开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32上编程,(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作;
stm32有三种启动方式:
从Flash启动(包括系统存储器),
从内部SRAM启动,
从外部RAM启动,
存储器映射:
连接被控总线的是Flash、Ram和片上外设,这些功能部件共同排列在一个4GB的地址空间内;
寄存器映射:
给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射;
外设地址映射:
片上外设区分为四条总线,根据外设速度的不同,不同的总线挂载着不同的外设,apb挂低速外设,ahb挂载高速外设。
相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。
其中apb1总线的地址最低,片上外设从这里开始,也叫外设基地址。
C语言对寄存器的封装:
1、封装总线和外设基地址;
2、引入结构体语法对寄存器进行封装;
GPIO:
通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能;
GPIO工作模式:输入模式:
上拉模式:高电平
下拉模式:低电平
浮空模式:不确定状态
GPIO工作模式:输出模式:
推挽模式:输出高低电平;
开漏模式:既不输出高电平,也不输出低电平,为高阻态。
上拉/下拉
推挽输出模式一般应用在输出电平为0~3.3V而且需要高速切换开关状态的场合。
在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式;
GPIO工作模式:复用功能:
推挽模式/开漏模式:
上拉/下拉:
GPIO工作模式:模拟输入输出:
输出数据寄存器:
复用功能输出:
输入数据寄存器:
复用功能输入:
模拟输入输出:
启动代码:
初始化堆栈指针SP;
初始化程序计数器指针PC;
设置堆、栈的大小;
设置中断向量表的入口地址;
配置外部SRAM作为数据寄存器(这个由用户配置,一般的开发板可没有外部SRAM);
调用SystemInitial()函数配置STM32的系统时钟;
需要由我们自己实现,即我们要编写一个具有该名称的函数,用来初始化STM32芯片的时钟,一般包括初始化AHB、
APB等各种总线的时钟,需要经过一系列的配置STM32才能达到稳定运行的状态;
STM32的所有外设的时钟由一个专门的外设来管理,叫RCC(reset and clockcontrol),使用外设时要先开启它的时钟;
设置C库的分支入口“——main"(最终用来调用该main函数);
负责初始化栈、堆,配置系统环境,准备好C语言并最后跳转到用户自定义的main函数,从此来到C的世界。
库函数封装:
定义访问外设的结构体指针:
定义初始化结构体GPIO_InitTypeDef:
定义引脚模式的枚举类型:
定义GPIO初始化函数:
ST标准软件库:我们从寄存器映像开始,把内存跟寄存器建立起一一对应的关系,然后操作寄存器点亮LED,再把寄存器封装成一个个函数。
一步一步走来,我们实现了库最简单的雏形,如果我们不断地增加操作外设的函数,并且把所有的外设都写完,一个完整的库就实现了。
STM32固件库:
STM32的库,就是按照CMSIS标准建立的。
包括:
内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供。
设备外设访问层:提供了片上的核外外设的地址和中断的定义主要由芯片生产商提供;
可见CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,
屏蔽了硬件差异。
开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32上编程,(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作;
stm32有三种启动方式:
从Flash启动(包括系统存储器),
从内部SRAM启动,
从外部RAM启动,
存储器映射:
连接被控总线的是Flash、Ram和片上外设,这些功能部件共同排列在一个4GB的地址空间内;
寄存器映射:
给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射;
外设地址映射:
片上外设区分为四条总线,根据外设速度的不同,不同的总线挂载着不同的外设,apb挂低速外设,ahb挂载高速外设。
相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。
其中apb1总线的地址最低,片上外设从这里开始,也叫外设基地址。
C语言对寄存器的封装:
1、封装总线和外设基地址;
2、引入结构体语法对寄存器进行封装;
GPIO:
通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能;
GPIO工作模式:输入模式:
上拉模式:高电平
下拉模式:低电平
浮空模式:不确定状态
GPIO工作模式:输出模式:
推挽模式:输出高低电平;
开漏模式:既不输出高电平,也不输出低电平,为高阻态。
上拉/下拉
推挽输出模式一般应用在输出电平为0~3.3V而且需要高速切换开关状态的场合。
在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式;
GPIO工作模式:复用功能:
推挽模式/开漏模式:
上拉/下拉:
GPIO工作模式:模拟输入输出:
输出数据寄存器:
复用功能输出:
输入数据寄存器:
复用功能输入:
模拟输入输出:
启动代码:
初始化堆栈指针SP;
初始化程序计数器指针PC;
设置堆、栈的大小;
设置中断向量表的入口地址;
配置外部SRAM作为数据寄存器(这个由用户配置,一般的开发板可没有外部SRAM);
调用SystemInitial()函数配置STM32的系统时钟;
需要由我们自己实现,即我们要编写一个具有该名称的函数,用来初始化STM32芯片的时钟,一般包括初始化AHB、
APB等各种总线的时钟,需要经过一系列的配置STM32才能达到稳定运行的状态;
STM32的所有外设的时钟由一个专门的外设来管理,叫RCC(reset and clockcontrol),使用外设时要先开启它的时钟;
设置C库的分支入口“——main"(最终用来调用该main函数);
负责初始化栈、堆,配置系统环境,准备好C语言并最后跳转到用户自定义的main函数,从此来到C的世界。
库函数封装:
定义访问外设的结构体指针:
定义初始化结构体GPIO_InitTypeDef:
定义引脚模式的枚举类型:
定义GPIO初始化函数:
ST标准软件库:我们从寄存器映像开始,把内存跟寄存器建立起一一对应的关系,然后操作寄存器点亮LED,再把寄存器封装成一个个函数。
一步一步走来,我们实现了库最简单的雏形,如果我们不断地增加操作外设的函数,并且把所有的外设都写完,一个完整的库就实现了。
STM32固件库:
STM32的库,就是按照CMSIS标准建立的。
包括:
内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供。
设备外设访问层:提供了片上的核外外设的地址和中断的定义主要由芯片生产商提供;
可见CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,
屏蔽了硬件差异。