从代码上理解stm32寄存器与库函数的关系

从代码理解寄存器与库函数


学习DMA传输的时候注意到一点:

	DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)(&USART1->DR);//外设地址为串口1的数据寄存器

DMA_InitStructure.DMA_PeripheralBaseAddr我们应该给它DMA传输的外设地址。
OK!现在开始解析


①为什么要u32 ? 这是因为外设地址寄存器CPAR为32位填入有效(如下图)

在这里插入图片描述
②为什么要有&(取址)符号? 因为后面是一个结构体指针,指向结构体内的成员,他的数据类型为成员变量的数据类型!所以我们这里用取址符号来取其地址,不然数据类型就是成员变量的数据类型了。看不懂先看下面的内容,慢慢你就明白了

、、那么DR这个结构体成员的数据类型是什么呢? 它是一个16位的数据类型(如下图)----因此我们需要进行第一步的数据转换

在这里插入图片描述

但是实际上DR是一个八位的读写寄存器(如下图)—在这里库函数为了方便将其定义为16位的数据类型。

在这里插入图片描述


总结:
、、、硬件的寄存器每个位都有值,因此将其在软件上的寄存器设置为u16(16位的数据类型)或者设置为u32(32位的数据类型),我们可以在编程上设置软件寄存器上的每一个值来控制硬件寄存器上的功能。
(突然感觉硬件和软件的连接好牛,还有设计芯片的工程师们好厉害)

哈哈,大家加油!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值