《STM32开发:深入解析 TIM2->CCR2 与 TIM2.CCR2 的区别与应用》

前言

在最初学习STM32的过程中,由于知识不进脑子,经常边学边忘,并且C语言学习的也比较浅,涉及到指针地址等方面的知识,内心就有点排斥。

第一次遇到 -> 和 . 这两种操作符时,我只是知道按照示例“照着用”,但并不清楚它们之间的具体区别,也没有深入理解它们的内在逻辑。这样的学习方式让我很容易陷入“知道怎么用,却不知道为什么”的状态。

今天在实际开发中再次遇到这两个操作符时,我发现仍旧无法清晰地解释它们的区别和适用场景。于是,我决定花时间好好研究一番。通过梳理这些基础概念,希望不仅能彻底搞清楚 -> 和 . 的用法,还能深化对指针和地址的理解,夯实自己在嵌入式开发中的基础知识。

接下来的文章将通过 TIM2->CCR2 与 TIM2.CCR2 的区别这一实际问题为切入点,详细解析 -> 和 . 两种操作符的用法和应用场景,帮助初学者更直观地理解它们在 STM32 开发中的具体用途和背后的逻辑。


TIM2->CCR2 与 TIM2.CCR2 的区别与对比说明

在 STM32 的开发中,寄存器操作通过定时器的基地址映射和结构体定义实现。两种操作符 ->. 的使用情况需要具体区分,分别应用于不同的环境。以下将详细说明它们的区别、基地址映射的原理,以及应用场景。

概念

. 操作符:用于访问结构体实例的成员。在使用它时,结构体变量必须是直接定义的实例,而不是一个指针。
-> 操作符:用于访问指针指向的结构体的成员。在使用它时,必须有一个结构体指针,该指针指向一个有效的结构体对象或内存区域。


1. 基地址映射原理

在 STM32 中,每个外设(如定时器 TIM2)都有一个固定的基地址,用于唯一标识硬件寄存器的起始地址。为了便于开发,CMSIS(Cortex Microcontroller Software Interface Standard)框架通过结构体定义寄存器布局,并将这些基地址与结构体进行映射。

基地址映射的具体过程
  1. 寄存器基地址的定义

    • 每个外设在芯片手册中都有对应的基地址。例如,TIM2 的基地址为:
      #define TIM2_BASE (APB1PERIPH_BASE + 0x0000)
      
      APB1PERIPH_BASE 是 APB1 总线的基地址,而 0x0000 是 TIM2 的偏移量。
  2. 基地址与结构体的结合

    • 通过将 TIM2 的基地址强制转换为指向 TIM_TypeDef 结构体的指针,实现基地址到寄存器的映射:
      #define TIM2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值