임베디드/고추건조기

HAL_Init();

twoweeks-within 2024. 11. 16. 00:24

startup 코드(asm) 를 거쳐 main.c 로옴

#define asd \( \ : 다음줄까지도 이어짐)

디버깅할때 if define 안에 안들어오면 회색배경으로 바뀜 > ide의 편리성

 


(FLASH->ACR |= FLASH_ACR_PRFTBE)
typedef struct
{
  __IO uint32_t ACR;
  __IO uint32_t KEYR;
  __IO uint32_t OPTKEYR;
  __IO uint32_t SR;
  __IO uint32_t CR;
  __IO uint32_t AR;
  __IO uint32_t RESERVED;
  __IO uint32_t OBR;
  __IO uint32_t WRPR;
} FLASH_TypeDef;

1. 하나하나 찾기
#define FLASH ((FLASH_TypeDef *)FLASH_R_BASE) // FLASH_R_BASE 라는 주소담김
#define FLASH_R_BASE  (AHBPERIPH_BASE + 0x00002000UL)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x00020000UL) // Flash registers base address 
#define PERIPH_BASE           0x40000000UL //Alias 영역에서의 주변기기 베이스 주소 (Peripheral :주변기기)
>FLASH = FALSH구조체 타입의 FLASH_R_BASE = 0x40022000


2. 디버깅 expressions > FLASH >  0x40022000 바로나옴

3.  &(FLASH->ACR) = 0x40022000
FLASH->ACR = 0x40022000
FLASH->KEYR= 0x40022004
FLASH->OPTKEYR = 0x40022008 
등등,,


4. FLASH_ACR_PRFTBE = 16


// |= 연산자 : a |= b , a와b를 비트연산 한거를 a에 넣음

5. FLASH->ACR |= 16
= *(0x40022000) |=16
// 16 = 00010000

>>FLASH 구조체의 ACR 에  FLASH_ACR_PRFTBE =16 비트연산 값을 넣는다


// ACR은 32비트(4바이트) 레지스터 ( type : __IO uint32_t )

Bit definition for FLASH_ACR register 라서
구조체처럼 직접적인 멤버로 존재 x > 비트필드로 정의 되어있음
그래서 비트연산자 |= 로 값을 제어함.
/*

__IO

#define __IO  VOLATILE ( 휘발성물질) 
 : 최적화하는것을 방지하기 위해서 사용
컴파일러는 최적화라는것을함.
    > 안쓰는 명령문은 없애버림
// 무조건 메모리 번지에 올려서 사용,, cpu레지스터에 넣는게 아니라

*/
   
FLASH->ACR |= FLASH_ACR_PRFTBE
>

volatile unsigned int * reg = 0x40022000
*reg |= 16

FLASH_ACR_PRFTBE_Pos         (4U)                               
FLASH_ACR_PRFTBE_Msk        (0x1UL << FLASH_ACR_PRFTBE_Pos)     /*!< 0x00000010 */
FLASH_ACR_PRFTBE            FLASH_ACR_PRFTBE_Msk               /*!< Prefetch Buffer Enable */

0x1UL (UL:unsigned long) 를 4Unsigned 칸 시프트
0x00000001 << 4칸
0x00010000 = 16(10) = 0x10(16)

 

unsigned 를 쓰는 이유

  0~ 양수 까지라 무조건 양수만됨, 음수로 처리될 여지x


리눅스 그랩
grep -rn AHBPERIPH_BASE* 
 > 모든 파일중에 해당되는것을 찾음

'임베디드 > 고추건조기' 카테고리의 다른 글

데이터 시트 보는법  (1) 2024.11.23
GPIO 마무리, 회로도 보기  (0) 2024.11.21
GPIO 탐구  (0) 2024.11.21
GPIO제어  (0) 2024.11.19
ACR 레퍼런스 메뉴얼  (1) 2024.11.16