野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10700|回复: 5

关于时钟配置函数SetSysClockTo72()中的FLASH 预存取缓冲区时延问题

[复制链接]
发表于 2017-12-1 16:49:13 | 显示全部楼层 |阅读模式
今天又从新仔细的看了一下《零死角》的RCC—使用HSE/HSI 配置时钟这一章,发现stm32官方库的SetSysClockTo72()在FLASH 预存取缓冲区时延配置中存在一点问题,感觉不对,所以提出来大家一起讨论。以下是我自己的理解,刚接触32时间不长,要是理解错了还请各位大神加以指正!!!
  1. /* Flash 2 wait state */
  2.     FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
  3.     FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;   
复制代码
其中第一句应该是初始化以下FLASH的ACR寄存器的LATENCY(位2~0),使LATENCY的这3位为0,然后第二句再配置LATENCY为两个等待状态(给相应位写1),可是32官方库对FLASH_ACR_LATENCY的宏定义应该存在问题,官方定义的为【#define  FLASH_ACR_LATENCY     ((uint8_t)0x03)】;可是在手册中描述的FLASH_ACR_LATENCY有3个有效位,所以我觉得应该定义为#define  FLASH_ACR_LATENCY     ((uint8_t)0x07)】。
QQ截图20171201164902.png
QQ截图20171201164924.png
回复

使用道具 举报

发表于 2017-12-1 17:21:51 | 显示全部楼层
是,三个位应该是 111B,这样刚好就是0x07
回复 支持 反对

使用道具 举报

发表于 2017-12-1 17:22:42 | 显示全部楼层
可能因为它的最高位一直为1,所以程序员就随便写了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-5 10:33:26 | 显示全部楼层
fire 发表于 2017-12-1 17:21
是,三个位应该是 111B,这样刚好就是0x07

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-5 10:34:29 | 显示全部楼层
flyleaf 发表于 2017-12-1 17:22
可能因为它的最高位一直为1,所以程序员就随便写了

奥奥,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-5 10:35:05 | 显示全部楼层
flyleaf 发表于 2017-12-1 17:22
可能因为它的最高位一直为1,所以程序员就随便写了

奥奥!  
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 18:32 , Processed in 0.184967 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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