当前位置: 首页 > news >正文

stm32 寄存器、地址、位带操作

存储器区域功能划分

 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个块也都规定了用途,具体分类见表格 6-1。每个块的大小都有 512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。

有 3个块非常重要,也是我们最关心的三个块。Block0用来设计成内部 FLASH,Block1 用来设计成内部 RAM,Block2 用来设计成片上的外设。

寄存器映射

当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但若每次都是通过这种方式访问地址,不好记忆且易出错。这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射。

0x4001 0C0C在我们看来是 GPIOB端口 ODR的地址,但是在编译器看来,这只是一个普通的变量,是一个立即数,要想让编译器也认为是指针,我们得进行强制类型转换,把它转换成指针,即(unsigned int *)0x4001 0C0C,然后再对这个指针进行 * 操作。刚刚我们说了,通过绝对地址访问内存单元不好记忆且容易出错,我们可以通过寄存器的方式来操作。

Bit-banding简称 位带,有人也叫 位段。支持位带操作后,可以使用普通的加载/存储指令来 对单一的比特进行读写。

很多朋友是从学习51单片机过来的,都知道P1.1这个引脚可以单独控制,我们操作的这个引脚就是一个Bit位。

我们都知道在STM32中 不能直接操作寄存器的某一个Bit位,比如单独控制PA端口输出数据寄存器中的ODR1。

STM32F1内核 Cortex-M3早就考虑到了这个问题, 为了能达到直接操作ODR1 这类Bit位,就在内核中开辟了一块地址区域( 位带别名) :可以将ODR1这类Bit位( 位带区)映射到 位带别名区域对应的地址,只需要操作映射后的 地址,就可以实现操作这个ODR1位了。

在Cortex-M3中有 两个区实现了位带操作,其中一个是 SRAM区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。

位带操作

相比直接操作寄存器代码更简洁,运行效率更高。避免在多任务或中断时出现紊乱等。

偏移地址:例如GPIOA

#define GPIOA_IDR   *(unsigned int *)(0x40010800+0x08= 0x40010808)

取出PA3的值

unsigned char PA3 = GPIOA_IDR &0x08

复位值代表寄存器默认值或者初始值。


 

http://www.lryc.cn/news/264349.html

相关文章:

  • 记录 | gdb使用backward-cpp来美化调试log
  • EasyExcel模板导出(行和列自动合并)
  • EOCR-i3MZ/iFMZ施耐德漏电保护继电器产品简介
  • golang开发--beego入门
  • python调取一欧易API并写一个比特币均线交易策略
  • 使用arthas排查请求超时问题
  • SAP ABAP EXCEL 下载模板并导入
  • Map集合体系
  • 速度与稳定性的完美结合:深入横测ToDesk、TeamViewer和AnyDesk
  • 数据库系统的结构
  • ngrok编译
  • YOLOv5改进 | 卷积篇 | 通过RFAConv重塑空间注意力(深度学习的前沿突破)
  • 056:vue工具 --- CSS在线格式化
  • 自定义IDEA代码补全插件
  • uniapp uview1.0 页面多个upload上传、回显之后处理数据
  • 生活中的物理2——人类迷惑行为(用笔扎手)
  • vue3表格导入导出.xlsx
  • vscode dart语言出现蓝色波浪线
  • 一种磁盘上循环覆盖文件策略
  • elementui消息弹出框MessageBox英文内容不换行问题
  • WPF——样式和控件模板、数据绑定与校验转换
  • 服务器数据恢复-raid5故障导致上层分区无法访问的数据恢复案例
  • 石器时代H5小游戏架设教程
  • 计算机网络-网络协议
  • 多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测
  • 业务出海如何快速将站点搬迁到AWS云中?
  • ansible剧本playbook
  • .NET 中string类型的字符串内部化机制
  • 公共字段自动填充——后端
  • nginx upstream 6种负载均衡策略介绍