12월 162011
 

8비트 마이크로 콘트롤러를 사용할 때는 몰랐는데, 32bit ARM 콘트롤러를 사용하려니, 세상이 아주 다릅니다.

STM32F103R 레퍼런스 메뉴얼에서 GPIO 관련 부분만 따옵니다.

 

포트 설정 레지스터 – 하위
(Port configuration register low (GPIOx_CRL) (x=A..G))

주소 오프셋 값: 0x00
초기값: 0x4444 4444

CNFy[1:0]: 포트 x 설정 bit (포트= 0 .. 7)

해당 I/O 포트를 설정하기 위해 소프트웨어적으로 기록할 수 있는 비트.
입력 모드 (MODE[1:0]=00):

00: 아날로그 모드
01: 플로팅 상태 (리셋되었을 때의 상태)
10: 풀업 또는 풀다운 저장을 포함한 입력
11: 예약된 값

출력 모드 (MODE[1:0] > 00):

00: 범용 출력 (푸쉬-풀)
01: 범용 출력 (Open-drain)
10: Alternate 기능 Push-pull 출력
11: Alternate 기능 Open-drain 출력

MODEy[1:0]: 포트 x 모드 bit (y= 0 .. 7)

해당 I/O 포트를 설정하기 위해 소프트웨어적으로 기록할 수 있는 비트.
00: 입력 모드 (리셋되었을 때의 상태)
01: 출력 모드, 최대 속도 10 MHz.
10: 출력 모드, 최대 속도 2 MHz.
11: 출력 모드, 최대 속도 50 MHz.

포트 설정 레지스터 – 상위
(Port configuration register high (GPIOx_CRH) (x=A..G))

 

포트의 내용은 GPIOx_CHL 과 같음. 다만 이 레지스터는 포트 8-15번까지 설정.

 

포트 출력 데이타 레지스터
(Port output data register (GPIOx_ODR) (x=A..G))

초기값: 0x0000 0000

Bits 31:16 예약된 값. 수정해서는 안됨.
Bits 15:0 ODRy[15:0]: 포트 출력 데이타 (y= 0 .. 15)

소프트웨어로 읽고 쓰기가 가능. 각각의 비트에 기록하려면 GPIOx_BSRR레지스터를 사용할 것.

포트 비트 조작 레지스터 (Port bit set/reset register (GPIOx_BSRR) (x=A..G))

초기값: 0x0000 0000

Bits 31:16 BRy: 포트 x의 비트 y를 0으로 함 (y= 0 .. 15)

쓰기 전용
0: 해당 ODRx bit 유지
1: 해당 ODRx bit를 0으로 만듬
주의: 만약에 BSx 와 BRx 값이 모두 설정되어 있으면, BSx 값이 우선순위를 가짐.

Bits 15:0 BSy: 포트 x의 y 비트값을 1로함 (y= 0 .. 15)

쓰기 전용
0: 해당 ODRx bit 유지
1: 해당 ODRx bit를 1으로 만듬

포트 비트 리셋 레지스터
(Port bit reset register (GPIOx_BRR) (x=A..G))

초기값: 0x0000 0000

Bits 31:16 예약된 값. 수정하면 안됨.
Bits 15:0 BRy: 포트 x의 y비트를 0으로 (y= 0 .. 15)

쓰기 전용
0: 해당 ODRx bit 유지
1: 해당 ODRx bit를 0으로 만듬

포트 설정 잠금 레지스터
(Port configuration lock register (GPIOx_LCKR)(x=A..G))

비트 16 (LCKK)기록하는 적당한 절차를 거치면 이 레지스터는 포트 값의 설정을 변경을 금지하는데 사용한다. 나머지 [15:0] 비트는 각 GPIO의 설정을 잠그는데 사용한다. 이 레지스터에 기록을 수행하는동안 LCKR[15:0]의 값은 절대로 바꾸어선 않된다. 일단 잠금이 수행되면 칩이 리셋이 되기 전까지는 각 포트의 값을 바꿀 수 없다. 각 잠금 값들은 해당 콘트롤 레지스터(CRL, CRH)의 4 비트값을 동결시킨다.

초기값: 0x0000 0000 Bits 31:17 예약된 값

Bit 16 LCKK[16]: 잠금 키 언제도 읽을 수 있음. 이 값은 잠금 키 수정 절차에 따를 때만 수정이 가능.

0: 포트 설정 잠금 키가 활성화 되지 않았음.

1: 포트 설정 잠금 키가 활성화 되었음. GPIOx_LCKR 레지스터는 다음 MCU의 리켓까지 변경할 수 없음.

잠금 키 수정 절차:
쓰기: 1
쓰기: 0
쓰기: 1
읽기: 0
읽기: 1 (이 읽기는 생략이 가능. 그러나 이 값을 읽음으로써, 잠금이 활성화 되었는지 확인해줌)

주의: 잠금 키 수정 절차시, LCK[15:0]값을 절대 바꾸어선 안됨. 이 절차 중 에러가 발생하면, 잠금은 무효화 됨.

Bits 15:0 LCKy: 포트 x y비트 잠금 (y= 0 .. 15)

읽기 쓰기가 가능하나 LCKK 비트가 0일 때만 쓰기가 가능함.
0: 포트 설정이 잠기지 않았음.
1: 포트 설정이 잠긴 상태임.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)