硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2345|回复: 1
收起左侧

[RCC] 为什么配置了AHB或APB总线外设时钟后都要加一个读操作来做延迟,这个是RCC的局限性决定的

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2018-7-25 10:50:14 | 显示全部楼层 |阅读模式
使能了外设时钟后,不能立即操作对应的寄存器,要加延迟、不同外设延迟不同。
a、如果是AHB的外设,使能了时钟后,需要等待2个AHB时钟周期才可以操作这个外设的寄存器。
b、如果是APB的外设,使能了时钟后,需要等待2个APB时钟周期才可以操作这个外设的寄存器。

当前HAL库的解决方案是在使能了外设时钟后,再搞一个读操作,算是当做延迟用。

比如下面使能GPIOA的时钟:
#define __HAL_RCC_GPIOA_CLK_ENABLE()   do { \
                                        __IO uint32_t tmpreg; \
                                        SET_BIT(RCC->AHB4ENR, RCC_AHB4ENR_GPIOAEN);\
                                        /* Delay after an RCC peripheral clock enabling */ \
                                        tmpreg = READ_BIT(RCC->AHB4ENR, RCC_AHB4ENR_GPIOAEN);\
                                        UNUSED(tmpreg); \
                                       } while(0)  



回复

使用道具 举报

4

主题

52

回帖

64

积分

初级会员

积分
64
发表于 2018-7-25 21:28:19 | 显示全部楼层
没注意过,可能是使用库函数得原因,初始化结构体得时候需要时间
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 03:40 , Processed in 0.201152 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表