笔记:STM32中寄存器地址与指针的转换

1.STM32中的存储器映射地址(查STM32F429数据手册)

/*片上外设基地址*/
#define PERIPH_BASE             ((unsigned int)0x40000000)

 /*AHB1总线基地址*/
#define AHB1PERIPH_BASE         (PERIPH_BASE + 0x00020000)

 /*GPIOB基地址*/
#define GPIOB_BASE              (AHB1PERIPH_BASE + 0x0400)

2.将寄存器地址转换成指针

#define GPIOB_MODER            *(unsigned int*)(GPIOB_BASE+0x00)

#define GPIOB_OTYPER           *(unsigned int*)(GPIOB_BASE+0x04)
    (unsigned int*)(GPIOB_BASE+0x00)    把地址强制转换成指针类型
    *(unsigned int*)(GPIOB_BASE+0x00)   把地址强制转换成指针类型并指向该地址
    
     “*”作用是解引用,引用指针指向的变量值,引用其实就是引用该变量的地址。

3.封装寄存器时,需要用volatile修饰

 #define __IO    volatile

关键字“ volatile”在 C 语言中该关键字用于表示变量是易变的,要求编译器不要优化,每次使用这些变量的时候,都要求 CPU 去该变量的地址重新访问。若没有这个关键字修饰,在某些情况下,编译器认为没有代码修改该变量,就直接从CPU 的某个缓存获取该变量值,但该缓存中的是陈旧数据,导致数据访问有出入。

解引用:百度百科

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32系列的死区寄存器用于配置PWM波形输出时的死区时间,以防止电机驱动器的MOSFET管同时导通而导致短路。下面是对STM32死区寄存器配置的详细讲解: 1. 首先,选择一个PWM输出通道,并找到对应的死区寄存器。例如,对于TIM1定时器的通道1,死区寄存器为DIER(死区控制寄存器)。 2. 死区寄存器一般包含两个字段:DTG和LOCK。DTG字段用于配置死区时间,而LOCK字段用于锁定死区寄存器的配置。 3. 配置DTG字段:DTG字段是一个16位的值,用于设置死区时间。它的高8位(DTG[7:0])用于设置主定时器时钟分频系数,低8位(DTG[15:8])用于设置死区时间长度。 4. 配置主定时器时钟分频系数:可以根据需求选择不同的分频系数,以调整主定时器的时钟频率。具体的分频系数可以在参考手册查找。 5. 配置死区时间长度:死区时间长度决定了两个MOSFET管导通之间的延迟时间。较长的死区时间可以提高电机驱动的稳定性,但可能会降低电机的动态响应速度。具体的死区时间长度可以根据电机驱动器的要求进行调整。 6. 配置LOCK字段:LOCK字段用于锁定死区寄存器的配置,以防止误操作。通过设置不同的LOCK值,可以实现对死区寄存器的不同级别的锁定。 以上是对STM32死区寄存器配置的详细讲解。具体的配置方法可以参考STM32的参考手册和相关的应用笔记

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值