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

[复制链接]
 楼主| 喷水壶 发表于 2018-8-10 17:22 | 显示全部楼层 |阅读模式
使能了外设时钟后,不能立即操作对应的寄存器,要加延迟、不同外设延迟不同。
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)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

433

主题

437

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部