STM32 LED 비트 연산자
비트 연산자
연산자 | 설명 |
---|---|
& | AND |
| | OR |
^ | XOR (Exclusive OR) |
~ | NOT |
<< | LEFT SHIFT |
>> | RIGHT SHIFT |
&= | AND 연산 후 할당 |
|= | OR 연산 후 할당 |
^= | XOR 연산 후 할당 |
<<= | LEFT SHIFT 연산 후 할당 |
>>= | RIGHT SHIFT 연산 후 할당 |
비트 연산자 사용 이유
일반 함수와 비트 연산자의 차이는 속도에 있다.
추가적으로 내부 구조를 알아볼 수 있다는 것에 있다.
사용 예
MODER에 대한 내용
사진을 보면
STM32 는 32비트 보드라서 0~31 까지 비트가 있고
2개씩 짝지어 한 포트에 16개의 핀을 구성하고 있다.
2개로 짝이어진 2개의 비트는
00 -> Input
01 -> Output
10 -> 특수 목적 (예:통신)
11 -> Analog
로 각 핀을 설정할 수 있다.
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
- 위 코드는 Output으로 설정된 PA0 의 값을 0으로 하는 것이다. (HAL 드라이버 함수)
GPIOA -> MODER = GPIOA -> MODER & (~0x11);
GPIOA -> MODER = GPIOA -> MODER | (0x01);
GPIOA -> ODR = 0x00;
- 비트 연산자로 먼저 PA0 을 Output으로 바꾼다음
값을 0으로 해준 것이다. - AND 연산자와 NOT 연산자로 원하는 비트를 0 으로 바꾸고나서 OR 연산자로 원하는 자리를 Output[0x01]으로 설정한다.
만약 0번 핀이 아니라 3번 핀을 Output으로 하고 값을 1 (true) 로 하고 싶다면?
위 문서에서 3번핀은 [4, 6] -> 4번 5번 비트에 해당하기 때문에 [0, 2] -> [4, 6] 이 되려면
4칸이 움직여야 하니까 "<< 4" 를 쓴다.
ODR (Output Data Register) 를 [1000] 3, 2, 1, 0 핀 중
3번 핀을 1로 바꿔야 하니까 0x08로 나타내어야한다.
GPIOA -> MODER = GPIOA -> MODER & (~(0x11 << 4 )
GPIOA -> MODER = GPIOA -> MODER | (0x01 << 4);
GPIOA -> ODR = 0x08;
아직은 익숙하지 않은 감이 있지만 최적화를 위해 연습을 해봐야겠다.
Author And Source
이 문제에 관하여(STM32 LED 비트 연산자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lcooldong/STM32-LED-비트-연산자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)