Flash access control register (FLASH_ACR)

Регистр управления доступом к flash-памяти

Смещение (Address offset): 0x00

Reset value: 0x0000'0030

3130292827262524
Reserved
------------------------
00000000
2322212019181716
Reserved
------------------------
00000000


15141312111098
Reserved
------------------------
00000000
76543210
Reserved PRFTBS PRFTBE HLFCYA LATENCY[2:0]
------rrwrwrwrwrw
00110000


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;
}