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

DMA代码部分

第一个程序的接线图

8-1 DMA数据转运

OLED ShowHexNum(2,1,(uint32_t)&ADC1->DR,8); 这样可以看AD的DR寄存器的的地址(固定的)了

可以跑一下然后和手册对比

先查ADC1的地址

Snipaste_2024-12-10_11-03-20

再在外设的总表里面, 查一下DR相对于上面地址的偏移量

Snipaste_2024-12-10_11-04-47

所以其地址为4001 244C

研究一下外设寄存器的地址是怎么被封装起来的

Snipaste_2024-12-10_23-40-13

Snipaste_2024-12-10_23-40-31

Snipaste_2024-12-10_23-42-29

Snipaste_2024-12-10_23-42-49

Snipaste_2024-12-10_23-43-14

Snipaste_2024-12-10_23-43-47

根据上图我们知道了基地址的由来

但是基地址+偏移,才是寄存器的实际地址,我们怎么得到这个偏移量呢?

在这里, 它使用了一个非常巧妙的方法来实现这个偏移吗,就是使用结构体来实现,我们跳转到结构体的定义

Snipaste_2024-12-10_23-48-31

可以看到这里是依次定义了各种寄存器

Snipaste_2024-12-10_23-49-16

我们看一下手册,和这个寄存器实际存放的顺序,是一一对应的

Snipaste_2024-12-10_23-50-53

如果我们定义一个ADC结构体的指针,并且指针的地址就是这个外设的起始地址,那这个结构体的每个成员, 就会正好映射实际的每个寄存器(之前写x86内核,对于CPU中断时候寄存器信息的输出也是采用这个办法)

如果我指定, 这个结构体的起始地址就是ADC1外设寄存器的起始地址, 那么这个结构体的内存和外设寄存器的内存就会完美重合, 我再访问结构体的某个成员,就相当于是访问这个外设的某个寄存器了

11.12


http://www.mrgr.cn/news/79693.html

相关文章:

  • [Collection与数据结构] 位图与布隆过滤器
  • 记录:ubuntu24.04源码安装nginx
  • HTML技术贴:深入理解与实践
  • 机器学习:全面学习路径指南
  • 代理IP地址和端口是什么?怎么进行设置?
  • CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测
  • 计算机网络基础知识
  • 基于python+django+vue的购物商城系统
  • 雪花算法详解
  • 正则表达式的高级方法
  • STL之空间配置器allocator
  • 正则化:机器学习中的泛化利器
  • webrtc-java:引领Java进入实时通信新时代
  • 线上常见问题案例及排查工具
  • DevOps持续集成
  • STM32-C语言基础知识
  • 力扣HOT 100(图)
  • 多人聊天室 NIO模型实现
  • 1.1.Flink的项目初始化和Hello-world
  • 在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)
  • PDF处理的创新工具:福昕低代码平台尝鲜
  • leecode中的面试100题
  • 【推荐算法】单目标精排模型——DIN
  • 阿里云ack部署rabbitmq集群
  • 【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时
  • 第4章:颜色和背景 --[CSS零基础入门]