#启动文件与容量的对应关系:
#GPIO端口:
#IO口输入保护二极管电路:
当输入的电压超过VDD时,上面的二极管导通,I/O引脚则被钳位成VDD;而当输入的电压低于VSS时,下面的二极管导通,I/O引脚则被钳位成VSS...
总之使得输入电源始终位于VDD到VSS之间。
GPIO操作相关寄存器:
1, GPIOx_CRL 配置寄存器 32bit
2, GPIOx_CRH 配置寄存器 32bit
3, GPIOx_IDR 数据寄存器 32bit
4, GPIOx_ODR 数据寄存器 32Bit(输出寄存器只能对寄存器进行整体操作)
5, GPIOx_BSRR 置位复位寄存器 32bit(可以对各个ODR位进行独立的设置/清除操作)
6, GPIOx_BRR 复位寄存器 16bit
7, GPIOx_LCKP 锁定寄存器 32bit[孟永志1]
|
所有GPIO口都有内部弱上拉和弱下拉,但配置为输入时,它们可以被激活,也可以被断开。
IO的输入配置:
#网友详细说明
http://jingyan.baidu.com/article/3065b3b698a6aabecff8a4cd.html
IO口的输出配置:
重点:
#当IO口被配置为输出模式时:
1, 出现在IO脚上的数据在每个APB2时钟被采样到输入数据寄存器
2, 在开漏模式时,对输入数据寄存器的访问可得到IO口的状态
#复用输出配置:
#网友详细说明
http://jingyan.baidu.com/article/5d6edee2f873f899eadeecff.html
#如何在输出模式下准确得到IO外部的电平信号:
只有在开漏输出/复用开漏输出的时候,当输出1时,NMOS管关闭,此时IO信号完全由外部信号决定,这是读取的就是IO的输入信号。其他时候读取的输入信号都是不准确的,是受到输出影响的。(推挽输出/复用推挽输出)
#当IO口开漏输出时:不能够使用5V的上拉电阻将IO上拉至5V,因为IO口有保护二极管电路,会将点位钳位至Vdd+二极管压降、Vss-二极管压降。
时钟系统:
1, HIS RC:内置高速RC振荡器, 8M, 不精确, 一般不用;
2, LSI RC: 内部低速RC振荡器 40k 不精确
3, HSE Osc: 外部高速晶振 4~16M
4, LSE Osc : 外部低速晶振, 32.768k
5, PLL:锁相环, 将输入频率倍频至72M为PLLCLK,供SYSCLK选择。
#核心时钟模块:
SYSCLK: 系统时钟(来源:HIS,PLL,HSE,HSE)<css:监视器,一旦HSE失效,即改时钟为HSI>
#SYSCLK系统时钟分配:
1, AHB预分频器:可以对SYSCLK时钟进行分频
2, APB1 预分频器:
3,APB2 预分频器:
4,USB 预分频器:
………………………………
#STM32系统架构:
ARM体系结构:Advanced RISCMachines
#驱动单元:
Icode总线:
我们写好的程序写好后通过编译都变成一条条指令存储在外设的FLASH里面,内核要读取这些指令来执行程序就必须通过Icode总线(专门用来取指)。
Dcode总线与DMA总线:
即为DATA,我们知道常量const存放在内部FLASH里面,而变量存在内部SRAM里面。这些数据可以由DCode和DMA来读取,为了避免两者同时去读取数据从而造成冲突,所以在两者读取数据的时候会有一个总线矩阵来裁定谁来读取数据。
System总线:
读取数据,最主要还是用来访问外设的寄存器,即读写寄存器都是通过这条总线来完成的。
DMA总线:
说先说这条总线也是主要传输数据的,这个数据可以是某个外设的数据寄存器,可以是SRAM,可以是内部的FLASH 。
#被动单元
FLASH:
程序存储器
SRAM:
静态存储器
FSMC:
外部RAM总线
AHP:
高速总线
#STM32储存映像
#启动文件的作用:
设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、调用C程序的main()函数执行C代码。
#STM32固件库:
https://wenku.baidu.com/view/0bb4cf24647d27284b735149.html
#内核之外的寄存器的映射:
Stm32f10x.h: 实现了内核之外的外设的寄存器映射
#时钟配置文件:
System_stm32f10x.c:上电后初始化时钟、拓展外部存储器
#外设驱动:
Stm32f10x_xx.c: 外设驱动的库函数文件
Stm32f10x_xx.h: 存放外设初始化结构体和初始化结构体成员的参数列表,外设固件库函数的声明
#内核外设:
Core_cm3.h: 实现了内核里面的寄存器的映射
Core_cm3.c: 实现了一些操作内核外设的函数(用的比较少)
#Misc.h: NCIV(嵌套向量中断控制器)、systic(系统滴答定时器)
Misc.c:这个文件提供了外设对内核中NVIC(中断向量控制器)的访问函数,用于配置中断。
#头文件配置文件:
Stm32f10x_conf.h: 所有外设的头文件都包含在其中
#专门存放中断服务函数的文件:
Stm32f10x_it.c
Stm32f10x_it.h
//中断服务函数可以随便放在其他任何地方。
#stm32位带操作
STM32位带区的一个位在位带别名区膨胀为4个字节,两个位带别名区分别是SRAM的最低1M、片内外设的最低1M,所有的片内外设寄存器地址映射均在片内外设地址的最低1M空间内,所以可以对所有的寄存器进行“位寻址”操作。
#由位带区想要操作寄存器的n位及其寄存器地址addr,可以通过统一的公式找到别名去对应的4个字节的起始地址:
ADDR=((addr&0xf0000000)+0x02000000+((addr&0x00ffffff)<<5)+(n<<2))
#库函数编程学习:
#启动文件选择:
#RCC
RCC是STM32的时钟控制器,可开启或关闭各总线的时钟,在使用各外设功能必须先开启其对应的时钟,没有这个时钟内部的各器件就不能运行。
#RCC寄存器
1, RCC_CR: 时钟控制寄存器:各个时钟的使能、准备就绪等
2,RCC_CFGR:时钟配置寄存器:各个预分频器的输入时钟选择、各个预分频器的分频因子
3,RCC_CIR :时钟中断寄存器:中断使能
4,RCC_APB2RSTR:APB2外设复位寄存器
5,RCC_APB1RSTR:APB1外设复位寄存器
6,RCC_AHBENR:AHB外设时钟使能寄存器
7,RCC_APB2ENR:APB2时钟使能
8,APB1 外设时钟使能寄存器