stm32学习笔记

#启动文件与容量的对应关系:

 

#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:锁相环,  将输入频率倍频至72MPLLCLK,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
RCCSTM32的时钟控制器,可开启或关闭各总线的时钟,在使用各外设功能必须先开启其对应的时钟,没有这个时钟内部的各器件就不能运行。
#RCC寄存器
1, RCC_CR: 时钟控制寄存器:各个时钟的使能、准备就绪等
2RCC_CFGR:时钟配置寄存器:各个预分频器的输入时钟选择、各个预分频器的分频因子
3RCC_CIR :时钟中断寄存器:中断使能
4RCC_APB2RSTRAPB2外设复位寄存器
5RCC_APB1RSTRAPB1外设复位寄存器
6RCC_AHBENRAHB外设时钟使能寄存器
7RCC_APB2ENR:APB2时钟使能
8APB1 外设时钟使能寄存器
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值