Flash access control register (FLASH_ACR)
Регистр управления доступом к flash-памяти
Смещение (Address offset): 0x00
Reset value: 0x0000'0030
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Reserved | PRFTBS | PRFTBE | HLFCYA | LATENCY[2:0] | |||
--- | --- | r | rw | rw | rw | rw | rw |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
Bits 31:6
Reserved
Must be kept at cleared
Зарезервировано. Должно быть всегда установлено в 0
Bit 5
PRFTBS
Prefetch buffer status
Состояние буфера предварительной выборки
0 : буфер предварительной выборки выключен
1 : буфер предварительной выборки включен
Bit 4
PRFTBE
Prefetch buffer enable
Включение буфера предварительной выборки
0 : выключение буфера предварительной выборки
1 : включение буфера предварительной выборки
Bit 3
HLFCYA
Flash half cycle access enable
0 :
1 :
Bits 2:0
LATENCY[2:0]
Latency
Количество тактов ожидания доступа к flash-памяти по отношению к системной тактовой частоте SYSCLK.
000 : без тактов ожидания, 0 < SYSCLK ≤ 24 MHz
001 : один такт ожидания, 24 MHz < SYSCLK ≤ 48 MHz
010 : два такта ожидания, 48 MHz < SYSCLK ≤ 72 MHz
//- stm32f10x.h
/******************* Bit definition for FLASH_ACR register ******************/
#define FLASH_ACR_LATENCY ((uint8_t)0x07) /* LATENCY[2:0] bits (Latency) */
#define FLASH_ACR_LATENCY_0 ((uint8_t)0x00) /* Bit 0 */
#define FLASH_ACR_LATENCY_1 ((uint8_t)0x01) /* Bit 0 */
#define FLASH_ACR_LATENCY_2 ((uint8_t)0x02) /* Bit 1 */
#define FLASH_ACR_HLFCYA ((uint8_t)0x08) /* Flash Half Cycle Access Enable */
#define FLASH_ACR_PRFTBE ((uint8_t)0x10) /* Prefetch Buffer Enable */
#define FLASH_ACR_PRFTBS ((uint8_t)0x20) /* Prefetch Buffer Status */
//- stm32f10x_flash.c
#define FLASH_Latency_0 ((uint32_t)0x00000000) /* FLASH Zero Latency cycle */
#define FLASH_Latency_1 ((uint32_t)0x00000001) /* FLASH One Latency cycle */
#define FLASH_Latency_2 ((uint32_t)0x00000002) /* FLASH Two Latency cycles */
void FLASH_SetLatency(uint32_t FLASH_Latency)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_FLASH_LATENCY(FLASH_Latency));
/* Read the ACR register */
tmpreg = FLASH->ACR;
/* Sets the Latency value */
tmpreg &= ACR_LATENCY_Mask;
tmpreg |= FLASH_Latency;
/* Write the ACR register */
FLASH->ACR = tmpreg;
}