浅析STM32 中常用的三个函数(sys.c,delay.c,usart.c)之一 | 您所在的位置:网站首页 › c语言用来干嘛用的 › 浅析STM32 中常用的三个函数(sys.c,delay.c,usart.c)之一 |
1.sys.c(这个主要是定义位带区地址的宏定义,因此主要的代码都在sys.h中) 其实,本质上sys就是实现位带区映射(每1Bit)到位带别名区(每32位,即1字),从而我们可以操作位带别名区里的“别名”,进而操控位带区对应的位置。 支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3中,有两个区中实现了位带。其中一个是SRAM 区的最低1MB 范围,第二个则是片内外设区的最低1MB 范围。 支持位带操作的两个内存区的范围是: 0x2000_0000‐0x200F_FFFF(SRAM 区中的最低1MB) 0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB) 原理:这两个区中的地址除了可以像普通的RAM 一样使用外,它们还都有自己的“位带别名区”, 位带别名区把每个比特膨胀成一个32 位的字。当你通过位带别名区访问这些字时,就可以达到 访问原始比特的目的。 我们可以通过下图来了解地址映射的过程: 接下来把SRAM位带区和外设位带区各自映射到的位带别名区的计算公式列出来: 记位带区所在字节地址为A,位序号 在别名区的地址为: 内存SRAM公式:SRAMAddr=0x22000000+((A‐0x20000000)*8+n)*4 =0x22000000+ (A‐0x20000000)*32 + n*4 片上外设公式:PERIPHAddr=0x42000000+((A‐0x40000000)*8+n)*4 =0x42000000+ (A‐0x40000000)*32 + n*4 这些可以通过宏定义来实现: #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF) |
CopyRight 2018-2019 实验室设备网 版权所有 |