浅析STM32 中常用的三个函数(sys.c,delay.c,usart.c)之一 您所在的位置:网站首页 c语言用来干嘛用的 浅析STM32 中常用的三个函数(sys.c,delay.c,usart.c)之一

浅析STM32 中常用的三个函数(sys.c,delay.c,usart.c)之一

2023-11-17 02:30| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有