- Date:2023-05-22

  • Time:22:55
  • Subject: none
  • Tags: #stm32
    [[2023-05]]

存储器映射

  1. 存储器指可以存储数据的设备,本身没有地址信息,对存储器分配地址的过程称为存储器映射
  2. 19根地址线:A0-A18 16根数据线:D0-D15
  3. 地址范围:0 - 512K
    1. 映射1:0 - 512K
    2. 映射2:1 – 512K + 1
    3. 映射3:100K – 612K
    4. 映射4:512K – 1024K
  4. F1为例子
    1. ST将4GB(2^32)地址空间分成8个块
      1. Pasted image 20230522230107|600
    2. Block0(FLASH)功能划分
      1. Pasted image 20230522231205|600
    3. Block1(SRAM)功能划分
      1. Pasted image 20230522231229|600
    4. Block2(外设)功能划分
      1. Pasted image 20230522231356|600

寄存器映射

  1. 寄存器是单片机内部一种特殊的内存,可以实现对单片机各个功能的控制
  2. 简单来说:寄存器就是单片机内部的控制机构
    1. Pasted image 20230522231543|600
  3. STM32寄存器分类
    1. Pasted image 20230522231558|600

F1为例

  1. 寄存器是特殊的存储器,给寄存器地址命名的过程,就叫寄存器映射
    1. Pasted image 20230522232415|600
  2. 寄存器描述解读
    1. Pasted image 20230522232618|600
      1. ① 寄存器名字
      2. ② 偏移量及复位值
      3. ③ 寄存器位表
      4. ④ 位功能描述
    2. 直接操作寄存器地址:
1
2
*(unsigned int *)(0x4001 080C) = 0XFFFF;
//强转unsigned int *,再取地址的值,然后进行操作
1
2
3
//定义一个名字后再操作:
#define    GPIOA_ODR    *(unsigned int *)(0x4001 080C)
GPIOA_ODR = 0XFFFF
  1. 寄存器地址计算
    1. 为了方便编写代码及使用,我们将寄存器地址分为三个部分:
      1. 总线基地址(BUS_BASE_ADDR)(对应总线表格中最下面的那个地址)
        1. Pasted image 20230525091736|600
        2. APB1总线的基地址,也叫外设基地址(PERIPH_BASE)
        3. 此表的偏移量:是相对外设基地址(PERIPH_BASE)来说的
      2. 外设基于总线基地址的偏移量(PERIPH_OFFSET)
        1. Pasted image 20230525091902|600
        2. apb2为例子
        3. 此表的偏移量:是相对APB2外设基地址(APB2PERIPH_BASE)来说的
        4. 这是外设的基地址,上面是总线的基地址
      3. 寄存器相对外设基地址的偏移量(REG_OFFSET)(对应8.24图的地址偏移0Ch)
        1. 以GPIOA外设为例子
        2. Pasted image 20230525092031|600
        3. 此表的偏移量:是相对GPIOA外设基地址(GPIOA_BASE(上图))来说的
    2. 例子计算过程(GPIOA_ODR寄存器地址计算过程)
      1. 获取外设挂在哪个总线上面?查:系统结构图(同时得知道是哪个外设USART1_xx,那就是usart1)
      2. 获取总线基地址,APB2总线基地址:0X4001 0000
      3. 获取外设地址偏移量,GPIOA相对APB2总线偏移量是:0X800(一般可以直接找到外设地址)
        1. Pasted image 20230525092659|600
      4. 获取寄存器地址偏移量,ODR相对GPIOA外设基地址的偏移量是:0X0C
        1. Pasted image 20230525092528|600
        2. 在手册中找
      5. 寄存器地址 = BUS_BASE_ADDR +  PERIPH_OFFSET + REG_OFFSET
      6. GPIOA_ODR = 0X4001 0000 + 0X800 + 0X0C = 0X4001 080C
  2. 寄存器映射实现
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

GPIOA_BASE: 0X4001 0800
1. 使用结构体,可以很方便的完成对寄存器的映射:
2. 一次性把7个寄存器映射完毕,可对比上面的对一个寄存器映射
3. 由于刚好结构体每个地址差4个字节,每个寄存器基地址之间差4个字节
1
2
3
4
5
6
7
8
9
10
11
#define   GPIOA     ((GPIO_TypeDef *)GPIOA_BASE)
//强转GPIOA_BASE为结构体的地址
&GPIOA->CRL: 0X4001 0800
&GPIOA->CRH: 0X4001 0804
&GPIOA->IDR:  0X4001 0808
&GPIOA->ODR: 0X4001 080C
实际应用:
//对地址的所指的位置赋值
//与前面单独对寄存器操作对比,方便了
GPIOA-> ODR = 0XFFFF
详见:stm32f103xe.h,725行开始
  1. stm32f103xe.h主要组成部分
    1. Pasted image 20230525094311|600

- Date:2023-05-25

  • Time:09:48
  • Subject: none
  • Tags: #stm32
    [[2023-05]]

英文缩写部分

A:

ADC--------Analog-to-Digital Converter—模/数转换器,模数转换器
AFIO-------alternate function IO—复用 IO 端口
AHB--------先进高性能总线
AHB-AP----AHB访问端口
Arg---------argument—自变量
APB--------先进外设总线
API---------Application Programming Interface—应用程序编程接口

B:

BKP------后备寄存器
BSP------Board Support Package—板级支持包
BYP------Bypass—旁路
BYP------backup—备份

C:

CAN-----Controller area network—控制器局域网
Calc-----Calculate—计算
CM------CMSIS标准—Cortex Microcontroller Software Interface Standard—Cortex微控制器软件接口标准
Cmd-----command—[kəˈmɑ:nd]—命令、使能
CLK------Clock—时钟
Conf-----Config—配置
CPI-------每条指令的周期数
CRC------Cyclic Redundancy Check—循环冗余校验
CSR------clock control/status register—时钟控制/状态寄存器
Ctrl— —control—控制

D:

DAC-----Digital to analog converter—数/模转换器,数字模拟转换器
DAP-----调试访问端口
DBG-----debug—调试
def ------Define—定义
DMA----Direct Memory Access—存储器直接访问
doc------Document—文件
DSP-----数字信号处理器/数字信号处理
DWT----数据观察点及跟踪

E:

ETM------嵌入式跟踪宏单元
Eval-------Evaluate—评估
EXTI-------External Interrupts—外部中断

F:

FLITF-----The Flash memory interface—闪存存储器接口
FPB-------闪存地址重载及断点
FPGA-----Field-Programmable Gate Array—现场可编程门阵列
FSMC-----Flexible static memory controller—可变静态存储控制器
FSR--------Fault状态寄存器
FwLib-----Firmware Library—固件库

G:

GPIO------general purpose input/output—通用 IO 端口
H:
HSE-----------High Speed External oscillator—高速外部时钟
HSI------------High Speed Internal oscillator—高速内部时钟
HTM----------CoreSight AHB跟踪宏单元

I:

ICE--------in circuit emulator—在线仿真器
IDE--------integrated development environment—集成开发环境
inc--------Include—包括
INT -------it—Interrupt—中断
Init -------Initialize—[ɪˈnɪʃəlaɪz]—初始化
I2C--------IIC—Inter-integrated circuit—微集成电路
I2S--------IIS—integrate interface of sound—集成音频接口
IRQ-------中断请求(通常是指外部中断的请求)
IRQn-----中断级
ISA-------指令系统架构
ISR--------Interrupt Service Routines—中断服务程序
ITM-------指令跟踪宏单元
IWDG----independent watchdog—独立看门狗

J:

JTAG---------连结点测试行动组(一个关于测试和调试接口的标准)
JTAG-DP----JTAG调试端口

L:

Lib------lib—Library—库
LP------Low Power—低功耗
LR------link register—链接寄存器
LSB-----最低有效位
LSE-----Low Speed External oscillator—低速外部时钟
LSI------Low Speed Internal oscillator—低速内部时钟
LSU-----加载/存储单元

M:

MCU—微控制器单元(俗称单片机)
MIPS—million instructions per second—每秒能执行的百万条指令的条数
MPU—Memory Protection Unit—存储器保护单元
MSB----最高有效位
MSP----main stack pointer—主堆栈指针

N:

NVIC— Nested Vectored Interrupt Controller—嵌套向量中断控制器
NMI----不可屏蔽中断

O:

OS------------操作系统
OTG----------On The Go—数据交换

P:

PC--------------program counter—程序计数器
Periph---------Peripherals—[pəˈrɪfərəlz]—外设
PLL--------------Phase Locked Loop—锁相环\倍频器
PSP------------process stack pointer—进程堆栈指针
POR/PDR—上电/掉电复位
PPB-----------私有外设总线
PWR----------电源控制

R:

RCC--------------------Reset and clock control—复位和时钟控制
Retval----------------Return value—返回值
RTC-------------------Real-Time Clock—实时时钟

S:

SCB-------System control block
SDIO-----SD I/O—Secure Digital Input and Output—安全数字输入输出卡
SRAM----Static Random-Access Memory—静态随机存取存储器
SP---------stack pointer—堆栈指针
SPI--------Serial Peripheral Interface—串行外围设备接口
src--------Source—源码
std--------Standard—[ˈstændəd]—标准
STK-------SysTick timer
SW----- --Software—软件

T:

Tab-----table—表
TIM-----timer—定时器

U:

UART------Universal Asynch. Receiver Transmitter—通用异步接收/发送装置
USART-----Universal Synchronou/Asynchronous Receiver/Transmitter—通用同步/异步串行接收/发送器
USB--------Universal Serial Bus—通用串行总线
USBPRE—USB prescaler----USB预分频

W:

WWDG—Window watchdog—窗口看门狗

词汇部分

A:

Acceleration—[əkˌseləˈreɪʃn]—加速度
Access—[ˈækses]—访问、进入
Accordingly—相应地
Activate—[ˈæktɪveɪt]—激活
add-on—附加物
address offset—地址偏移量
Alias—[ˈeɪliəs]—别名
Align—[əˈlaɪn]—校准,使一致
Alternate—[ˈɔ:ltərnət]—替代、备用
Arbitration—[ˌɑ:bɪˈtreɪʃn]—仲裁
Argument—[ˈɑ:ɡjumənt]—自变量
Array—[əˈreɪ]—数组
Assembler—[əˈsemblə®]—汇编器
Assert—[əˈsɜ:t]—断言

B:

Backslash—[ˈbækslæʃ]—(计算机符号)反斜线
Backup—备份
Brief—[bri:f]—任务简介
Buffer—[ˈbʌfə®]—缓存器,缓冲存储区

C:

Calibration—[ˌkælɪˈbreɪʃn]—校准
Call—调用
Capture—[ˈkæptʃə®]—捕获
Code—代码
Comments—注释
Compute—计算
Configure—[kənˈfɪɡə®]—配置
Constant—[ˈkɒnstənt]—常数
Counter—[ˈkaʊntə®]—计数器
Channel—[ˈtʃænl]—通道、源
Crystal—[ˈkrɪstl]—晶体

D:

Decode—[ˌdi:ˈkəʊd]—译码、解码
Decrement—[ˈdɛkrɪmənt]—减量,消耗
Default value—默认值
Depend on—根据
dependent variable–[dɪˌpendənt ˈveəriəbl]-因变量
Determine—[dɪˈtɜ:mɪn]—测定,查明
Differential—[ˌdɪfəˈrenʃl]—微分
Disassembly—反汇编

E:

Emulator—[ˈemjuleɪtə®]—仿真器
Enable—使能、启用
Entry—[ˈentri]—进入
Enumeration—[ɪˌnju:məˈreɪʃn]—枚举
Even—偶
Exceed—超过
Exception—[ɪkˈsepʃn]—异常
Execute—[ˈeksɪkju:t]—执行
Expanse—[ɪkˈspæns]—扩展
Export—[ɪkˈspɔ:t , ˈekspɔ:t]—输出、导出

F:

Falling edge—下降沿
Force—[fɔ:s]—强制
Frequency—[ˈfri:kwənsi]—频率

G:

Global variable—全局变量
Gyroscope—[ˈdʒaɪrəskəʊp]—陀螺仪

H:

Halt—[hɔ:lt]—(使)停止
Handler—[ˈhændlə®]—处理程序
Hard Fault—硬件故障,硬故障
Hardware—硬件
Heap—[hi:p]—堆
Hint—[hɪnt]—提示

I:

Implement—[ˈɪmplɪments]—执行、工具
Indicate—[ˈɪndɪkeɪt]—表明
Infinite—[ˈɪnfɪnət]—无限的
Initial—[ɪˈnɪʃl]—最初的
Instructions—[ɪnˈstrʌkʃənz]—指令
Integral—[ˈɪntɪɡrəl]—积分
Interface—[ˈɪntəfeɪs]—接口

L:

Legacy—[ˈleɡəsi]—遗留
Local variable—局部变量
Loop—[lu:p]—循环

M:

Macro—宏,宏指令
Mapping—映射
Mask—屏蔽
Memory—[ˈmeməri]—存储器
Memory Manage—内存管理
Modify—[ˈmɒdɪfaɪɪŋ]—修改
Module—[ˈmɒdju:l]—模块
Mount on—安装

N:

Numeric—[nju(:)ˈmɛrɪk]—数(字,值)
Newline—换行符、新的一行

O:

Odd—奇
Offset—[ˈɒfset]—补偿
Operation—[ˌɒpəˈreɪʃn]—操作、运行
Oscillator—[ˈɒsɪleɪtə®]—振荡器

P:

Parallel—[ˈpærəlel]—并行
Parameter—[pəˈræmɪtə®]—参数
Parity—奇偶性
Perform—[pəˈfɔ:m]—执行
Permissions—[pəˈmɪʃənz]—权限
Preemption—[ˌpri:ˈempʃn]—抢占
Presentation—[ˌpreznˈteɪʃn]—显示、出示、演示
Priority Levels—[praɪˈɒrəti ˈlevlz]—优先级
Processor—[ˈprəʊsesə®]—处理器
Proportion—[prəˈpɔ:ʃn]—比例
Prototype—[ˈprəʊtətaɪp]—原型

R:

Recursive—[rɪˈkɜ:sɪv]—递归的、循环的
refer to—参阅
Remap—重新映射
Reset—重置
Rising edge—上升沿

S:

Schmitt Trigger—[ʃmɪt ˈtrɪɡər]—施密特触发器
Section—[ˈsekʃn]—部分,节
Select—[sɪˈlekt]—选择
Serial—[ˈsɪəriəl]—串行
service routine—服务程序
Setup—(软件或硬件的)安装,设置
Simplify—[ˈsɪmplɪfaɪ]—简化
Specified—[ˈspesɪfaɪd]—明确规定
Specifies—[ˈspesɪfaɪz]—指定
Suppression—[səˈpreʃn]—抑制
Stack—[stæk]—堆栈
Startup—启动
Stray—[streɪ]—孤立的、杂散的
Symbolic—[sɪmˈbɒlɪk]—象征性的

T:

Table—表
Tailor—[ˈteɪlə®]—专门制作,定做
Temperature—[ˈtemprətʃə®]—温度
Template—[ˈtempleɪt]—模板
Toggle—[ˈtɒɡl]—切换
Trigger—[ˈtrɪɡə®]—触发

U:

Uncomment—取消批注
Unique—[juˈni:k]—唯一的
Usage—[ˈju:sɪdʒ]—使用
Usart—通用同步异步收发器
Use—用途、使用

V:

Vector—[ˈvektə®]—矢量
Velocity—速度
Voltage—[ˈvəʊltɪdʒ]—电压

- Date:2023-05-22

  • Time:22:39
  • Subject:
  • Tags: #stm32
    [[2023-05]]

Cortex M内核 & 芯片

  1. Pasted image 20230522224008|600

F1系统架构

  1. 4个主动单元 + 4个被动单元
  2. Pasted image 20230522224227|600
    1. AHB:高级高性能总线
    2. APB:高级外围总线
  3. Pasted image 20230522224605|600