打印

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

[复制链接]
311|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
喷水壶|  楼主 | 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

粉丝