'분류 전체보기'에 해당되는 글 229건
- 2013.06.08 시작...
- 2013.06.08 UART_ Hello_Wolrd 찍기_2
- 2013.06.08 UART_ Hello World 찍기_1
- 2013.05.30 [아이디어] Virtual Keyboard 1
- 2013.05.28 [통신이론]5장 각변조 1
- 2013.05.25 [비선형 자료구조]트리.그래프 (AVL 트리) 1
- 2013.05.25 전위표기. 후위표기
- 2013.05.25 n비트 비교기 설계
- 2013.05.25 GPIO_Init
- 2013.05.24 Key가 눌린것 알아채기
자세한 이론 내용은 책 참조... 정리하는데 시간이 너무 지나감
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_USART_Tx_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIO_USART,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_USART_Rx_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIO_USART,&GPIO_InitStructure);
}
void USART1_Init(void)
{
USART_InitTypeDef USART_InitStructure;
/*USARTx configured as follow:
-BaudRate : 115200 baud
-Word Length = 8bits
-One Stop Bit
-No parity
-Hardware flow control disabled (RTS and CTS signals)
-Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
//Configure the USARTx
USART_Init(USART1, &USART_InitStructure);
//Enable the USART1
USART1->CR1 |= CR1_UE_Set;
}
typedef struct
{
__IO uint16_t SR;
uint16_t RESERVED0;
__IO uint16_t DR;
uint16_t RESERVED1;
__IO uint16_t BRR;
uint16_t RESERVED2;
__IO uint16_t CR1;
uint16_t RESERVED3;
__IO uint16_t CR2;
uint16_t RESERVED4;
__IO uint16_t CR3;
uint16_t RESERVED5;
__IO uint16_t GTPR;
uint16_t RESERVED6;
} USART_TypeDef;
UART : CPU에서 나오는 신호레벨(TTL)
RS-232 : SP
P240. Reference Table180 참조
BaudRate
:Tx/Rx baud=fck/(16*USARTDIV)
ex)Baudrate 115200으로 잡을 경우
DIV_Mantissa=39=0b100111=0x27
DIV_Fraction=16*0.625=10=0xA
USARTDIV=0x27A
WordLength
#define USART_WordLength_8b ((uint16_t)0x0000)
#define USART_WordLength_9b ((uint16_t)0x1000)
StopBits
#define USART_StopBits_1 ((uint16_t)0x0000)
#define USART_StopBits_0_5 ((uint16_t)0x1000)
#define USART_StopBits_2 ((uint16_t)0x2000)
#define USART_StopBits_1_5 ((uint16_t)0x3000)
Parity
#define USART_Parity_No ((uint16_t)0x0000)
#define USART_Parity_Even ((uint16_t)0x0400)
#define USART_Parity_Odd ((uint16_t)0x0600)
HadwafeFlowControl
#define USART_HardwareFlowControl_None ((uint16_t)0x0000)
#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100)
#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200)
#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300)
USART_Mode
#define USART_Mode_Rx ((uint16_t)0x0004)
#define USART_Mode_Tx ((uint16_t)0x0008)
#define CR1_UE
void SerialPutChar(uint8_t c){
USART_SendData(USART1,c);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
USART_FLAG_TXE : 송신을 할 수 있는 상태인지 검사
새로운 명령
apbclock = HSI_Value
CR2_STOP_CLEAR_Mask
USART_StopBits
CR1_CLEAR_Mask
USART_WordLength
USART_Parity
USART_Mode
'중도연재종료 > CORTEX M3' 카테고리의 다른 글
Get Character (0) | 2013.06.14 |
---|---|
당분간 정지 (0) | 2013.06.14 |
UART_ Hello World 찍기_1 (0) | 2013.06.08 |
GPIO_Init (0) | 2013.05.25 |
Key가 눌린것 알아채기 (0) | 2013.05.24 |
P224~
UART : CPU에서 나오는 신호레벨(TTL 레벨)
RS-232 : UART칩을 거쳐 나온 신호
#define USART1_BASE (APB2PERIPH_BASE + 0x3800) 관련 RSMap은 맨 위의 표와 같음
#define USART1 ((USART_TypeDef*)USART1_BASE)
<Source_Code>
#include <stm32f10x.h>
#define GPIO_USART GPIOA
#define GPIO_USART_Rx_Pin GPIO_Pin_10
#define GPIO_USART_Tx_Pin GPIO_Pin_9
//GPIOA의 10번과 9번 핀을 각각 수.송신부로 사용하고 있다.
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_USART_Tx_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIO_USART,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_USART_Rx_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIO_USART,&GPIO_InitStructure);
}
void USART1_Init(void)
{
USART_InitTypeDef USART_InitStructure;
/*USARTx configured as follow:
-BaudRate : 115200 baud
-Word Length = 8bits
-One Stop Bit
-No parity
-Hardware flow control disabled (RTS and CTS signals)
-Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
//Configure the USARTx
USART_Init(USART1, &USART_InitStructure);
//Enable the USART1
USART1->CR1 |= CR1_UE_Set;
}
void Serial_PutString(uint8_t *s){
while(*s != '\0'){
SerialPutChar(*s);
s++;
}
}
void RCC_Set(void){
RCC->APB2ENR |= RCC_APB2Periph_USART1;
}
int main(void)
{
RCC_Set();
GPIO_Configuration();
USART1_Init();
while(1){
Serial_PutString("\r\nHello World! Hello Cortex-M3!\r\n") ;
}
}
'중도연재종료 > CORTEX M3' 카테고리의 다른 글
당분간 정지 (0) | 2013.06.14 |
---|---|
UART_ Hello_Wolrd 찍기_2 (0) | 2013.06.08 |
GPIO_Init (0) | 2013.05.25 |
Key가 눌린것 알아채기 (0) | 2013.05.24 |
고급스러운 코딩1. (0) | 2013.05.24 |
Virtual Keyboard Based on True-3D Optical Ranging.
컴퓨팅 환경에 대한 수요가 늘어가면서, 새로운 인간-컴퓨터 인터페이스가 여러가지 형태의 상호작용을 제공하기 위해 구현되었으나 아직까지도 기초적인 인터페이스인 키보드, 마우스는 계속해서 남아있다. 그렇기에 더욱 일반 키보드는 휴대하기 합리적인 사이즈를 갖출 필요가 있다. 휴대와 배선에서 성가신 수고가 드는 키보드의 문제를 해결하기 위해 더 작고, 물리적인 수고가 덜하며, 휴대하기에 편리한 타입의 장치로써 휴대용 키보드나 위 주제의 키보드가 출시되었다. 여기서 3D 카메라의 영상처리를 이용한 가상 키보드를 구현함과 동시에 기존에 존재하던 몇가지 문제점을 해결하고자 한다.
가상 키보드 프로젝터.<프로젝션 키보드 라 하겠다>
내용은 논문 및 기사 등에서 발췌.
예시 상품으로 위와같은 magic cube가 있으며, 그 외에도 몇종 있다.
위의 그림은 동작화면. 노트북, 스마트폰, 테블릿 등에 호환된다.
위 시스템은 키보드 패턴 프로젝터와 타이핑 이벤트를 감지하기 위한 3D 카메라 및 적외선 빔 프로젝터로 이루어져 있다.
키보드 패턴 프로젝터는 키보드 위치 인식을 위한 사용자의 편의를 위한 것으로 실제 키보드 터치 인식등에는 관여하지 않는다.
3D카메라를 통한 일련의 영상처리 기법으로 손가락끝의 좌표를 추적하고 아래부분의 적외선 프로젝터를 통해 손가락의 Stroke를 통하여 정확한 키 입력을 받아들인다.
http://en.wikipedia.org/wiki/Projection_keyboard :참조 페이지<영문 위키피디아>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
본인이 제안하는 가상 키보드는 위의 방식과는 조금 다른것으로, 사용자가 원하는 키 타입을 선택, 또는 만들어서 사용할 수 있다.
전처리 과정을 통해 프린트 출력한 키보드의 각각의 버튼에 키 설정을 적용시킨다. 여기서 굳이 프린트 출력할 필요는 없이 나무판, 하드보드지등에 사용자가 그려서 적용할 수도 있다. 또는 프로그램 상에서 만들어 출력하게 하여도 된다. 이를 통하여 조이패드같이 생긴 키보드도 만들 수 있을 것이다.
사용자가 준비한 키보드판을 사용하기 때문에 기존 제품과 같은 프로젝터는 필요없다.
키보드 판으로 출력물이나 하드보드지 등을 예를 들었지만 얇은 플라스틱제의 접이식 패널같은것이 편이성이나 휴대성면에서 좋을것 같다.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
개략적인 원리는 다음과 같으며, 논문을 참고하였으므로 구현방식이 변경될 수 있다.
3D 카메라를 이용하여 깊이정보를 활용하고, 첫 기준 프레임을 이용하여 손가락의 위치를 검출한다.
손가락 끝은 매 프레임의 손의 육곽과 깊이굴곡을 통하여 분석된다.
키 입력을 감지하기 위하여 깊이굴곡의 형상을 분석하고 이를 전역좌표에 맵핑시킨다.
이 전 과정은 자동으로 이루어지며 사용자의 조정을 요구하지 않는다.
논문에서 발췌한 그림이다. 실제 제작품과 다를 수 있다.
3D 카메라 및 프로젝터가 있으며 장비와의 통신은 블루투스가 될것이다.
카메라에서 손가락의 위치를 맵핑할것이며 프로젝터대신 사용자가 준비한 키보드판(출력물 등)이 사용된다.
3D range Camera는 그레이 스케일과 깊이맵을 측정한다. 카메라 센서는 CMOS/CCD 기술에 기반하고 있으며 배경광을 차단하기 위하여 대역통과필터에 사용된다. 그레이스케일 및 깊이정보는 정해진 공간분해능에 따른 time-of-flight(TOF)측정원리에 기반한다.
카메라에 의해서 제공된 '깊이정보'는 손가락 위치 측정을 위한 좀 더 간단하고 효율적인 컴퓨터 비전 알고리즘의 설계와 눌려진 키의 위치측정을 가능하게 한다.
구현에 있어 발생할 수 있는 문제로 빛의 산란, 대상에 대한 깊이의 정확도 등이 있다. 이와 관련된 조사는 첨부된 논문 및 각종 영상처리 관련 사이트, 카페, 도서를 참고하게 될것이다.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
본 아이디어에서 내세우는 점은 휴대성과 사용자의 키보드 커스터마이징 기능이다.
사실 휴대성부분에서는 이미 나와있는 아래 그림과 같은 휴대용 키보드보다 떨어진다고 할 수 있다. 또한 키 터치감의 부재라는 부분도 단점이 될 수 있는 부분에서 시장성이 떨어질 수 있다.
그러나 본인은 제안 제품에 사용된 3D카메라를 이용한 분석법이나 깊이탐색. 적외선 프로젝터를 이용한 키 터치인식과 영상처리 기법과 같은 기술을 통한 손가락 좌표 추적을 통한 키보드의 구현과 사용자 임의의 키보드를 자유롭게 만들 수 있다는 부분을 내세우고 싶다.
pdf를 읽으면서 공부.
각변조:
반송파의 진폭은 일정하게 하고
정보신호가 반송파의 각을 변화시키는 변조방식.
각변조:
- 위상변조(Phase Modulation)
- 주파수변조(Frequency Modulation)
반송파의 각은 주파수와 위상으로 나타낼 수 있다.
진폭 변조는 잡음에 의해 신호의 진폭이 직접 영향을 받는다->잡음 특성이 좋지않다.
진폭 변조는 정보 신호와 변조 신호가 선형 관계:선형변조
각 변조는 정보를 반송파의 각에 실어 보낸다,
.진폭 변조에 비해 잡음 특성이 상대적으로 우수
.진폭 변조에 비해 더 넓은 전송대역폭이 필요
각 변조는 정보 신호와 비선형 관계:비선형 변조
다룰것.
이진트리
최적 이진 탐색트리
AVL 트리
2-3 트리
2-3-4 트리
레드블랙 트리(rb트리)
M-원 트리
B-트리
etc
일반적인 이진트리이다. 그러나 마구잡이로 넣어버리면 한쪽방향으로만 뻗어가는 트리가 생길 수도 있겠지?
트리를 만드는 목적은 무엇이냐?
배열이나 단순한 링크드리스트같은 선형구조는 원하는 자료 탐색에 있어서 난항을 겪게된다.
여기에서 탐색을 위한 규칙성이 있다면 탐색하기 편하겠다. 그런데 이진트리에서 한쪽 방향으로만 뻗어버리면 배열과 다를게 없을것이다.
다음과 같은 이진탐색트리에서 알 수 있는 규칙성은?
한 노드에서 그 왼쪽으로 뻗은 자식은 부모보다 작은 숫자이다.
반면 오른쪽으로 뻗은 자식은 부모보다 큰 숫자이다.
트리는 탐색, 접근시간이 짧아야 한다. 여기서 AVL트리의 차례. 트리의 회전을 이용하자.
AVL Tree 개념 : http://blog.naver.com/ryutuna?Redirect=Log&logNo=100122795293
균형치(Balance Factor)가 +-2 미만이어야 한다. 2 이상일 경우 LL, RR, LR, RL 회전을 통하여 균형치를 맞춰준다.
LL회전
RR회전
LR회전
RL회전
용어 정리
1. 균형치(Balance factor)
- 균형치 = 왼쪽 서브트리의 높이 – 오른쪽 서브트리의 높이
2. 트리의 높이(Height)
- 높이 혹은 깊이(Depth)라고 하며 그 트리에 속한 노드의 최대 레벨로 정해진다.
3. 레벨(Level)
- 루트를 레벨1로 정의하기도 하고 0으로 정의하기도 하지만 본 문서에선 1로 정의하도록 하겠다. 만약 한 노드의 레벨이 L이라면 그 자식의 레벨은 L+1이 된다.
B+트리 설명은 다음 링크에서...
http://blog.naver.com/hytgogo?Redirect=Log&logNo=30121130366
'Software > Programming' 카테고리의 다른 글
MFC)버튼을 누르는 동안 지속되는 카운팅 예제 (2) | 2014.10.19 |
---|---|
비트필드(Bit Field) (0) | 2014.08.11 |
전위표기. 후위표기 (0) | 2013.05.25 |
MFC 새로운 가상함수 추가 (0) | 2012.08.12 |
[MFC] bmp파일 열기 (3) | 2012.08.11 |
ex)전위표기
4*5-14/7*3 이 있다고 하자
괄호를 적절하게 넣어서 표현하면
(4*5)-((14/7)*3)이다.
제일 안쪽에서 먼저 계산할것부터 표현하면
1. 4*5
2. 14/7
3. (2)*3
4. (1)-(3)
4번부터 순서대로 표기하면
1. -(1)(3)
2. -(*4 5)(3)
3. -*4 5 (*(2) 3)
4. -*4 5 (*/14 7 3)
결과 : -*4 5 */ 14 7 3 :전위표기
ex)후위표기
4번부터 순서대로 표기하면
1. (1)(3)-
2. (4 5 *)(3)-
3. 4 5 * ((2) 3 *)-
4. 4 5 * 14 7 / 3 * -
결과 : 4 5 * 14 7 / 3 * -
Stack을 이용하여 전위표기를 후위표기로 표기하는 알고리즘을 구현할 수 있다
'Software > Programming' 카테고리의 다른 글
비트필드(Bit Field) (0) | 2014.08.11 |
---|---|
[비선형 자료구조]트리.그래프 (AVL 트리) (1) | 2013.05.25 |
MFC 새로운 가상함수 추가 (0) | 2012.08.12 |
[MFC] bmp파일 열기 (3) | 2012.08.11 |
MFC 여러개 bmp이미지 부르기, 합치기 (0) | 2012.08.10 |
책을 읽다보니 후에 GPIO_Init설명이 나왔다... 책을 순서대로 학습한다면 지금부터 쓰는거였다.
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
uint32_t tmpreg = 0x00, pinmask = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
/*---------------------------- GPIO Mode Configuration -----------------------*/
currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
{
/* Check the parameters */
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
/* Output mode */
currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
}
1줄 : input mode, output mode 판별. 0x0F를 이용하여 하위 4비트의 값만 추출
2줄 : mode가 0x00이 아니면 output모드
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
/*---------------------------- GPIO CRL Configuration ------------------------*/
/* Configure the eight low port pins */
if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00) //CRL인지 확인
{
tmpreg = GPIOx->CRL;
for (pinpos = 0x00; pinpos < 0x08; pinpos++) //어느위치 설정값인지 확인(앞의 학습에서 했음)
{
pos = ((uint32_t)0x01) << pinpos;
/* Get the port pins position */
currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; //맞는 핀 위치 확인
if (currentpin == pos)
{
pos = pinpos << 2; //CRL은 4비트 단위로 값 담당. pinpos*4로 위치값 구함(2만큼 왼쪽으로 shift)
/* Clear the corresponding low control register bits */
pinmask = ((uint32_t)0x0F) << pos;
tmpreg &= ~pinmask; //원하는 부분만 0으로 만든값을 tmpreg에 and함. 원하는 부분만 0으로 변함
/* Write the mode configuration in the corresponding bits */
tmpreg |= (currentmode << pos); //현재 설정값을 원하는 위치에 shift시켜 or시켜 적용
/* Reset the corresponding ODR bit */
//CRL,CRH가 아닌 BRR.BSRR레지스터 설정
//input mode에서 pull-down, pull-up으로 설정할 경우, 그 GPIO에 값이 설정되어야한 정상적으로 설정 가능.
//즉, 해당 작업을 밖에서 설정하는것이 아니라, GPIO초기화 과정에서 한번에 처리
//Pull-down : Reset(0), Pull-up : Set(1)
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
{
GPIOx->BRR = (((uint32_t)0x01) << pinpos);
}
else
{
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
{
GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
}
}
}
}
GPIOx->CRL = tmpreg;
}
/*---------------------------- GPIO CRH Configuration ------------------------*/
/* Configure the eight high port pins */
if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
{
tmpreg = GPIOx->CRH;
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
{
pos = (((uint32_t)0x01) << (pinpos + 0x08));
/* Get the port pins position */
currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
if (currentpin == pos)
{
pos = pinpos << 2;
/* Clear the corresponding high control register bits */
pinmask = ((uint32_t)0x0F) << pos;
tmpreg &= ~pinmask;
/* Write the mode configuration in the corresponding bits */
tmpreg |= (currentmode << pos);
/* Reset the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
{
GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
}
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
{
GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
}
}
}
GPIOx->CRH = tmpreg;
}
}
'중도연재종료 > CORTEX M3' 카테고리의 다른 글
UART_ Hello_Wolrd 찍기_2 (0) | 2013.06.08 |
---|---|
UART_ Hello World 찍기_1 (0) | 2013.06.08 |
Key가 눌린것 알아채기 (0) | 2013.05.24 |
고급스러운 코딩1. (0) | 2013.05.24 |
LED 끄기[GPIO Set Reset 레지스터] (0) | 2013.05.24 |
P213
참고. STM32_Reference_manual. p140의 table 17, 18
직접 만드는것도 연습이 되나, 되도록 있는 함수를 이용하도록한다. 새로 만든 함수와 기존 함수를 병행하면 헷갈리기 쉽기때문에 본래 있는 함수에 익숙하도록 하자.
P216의 GPIO_Port_Init의 대체함수로 GPIO_Configuration을 이용하자.
아래와 같다.
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0+GPIO_Pin_1+GPIO_Pin_4);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
위의 함수들은 본래 주어진다.
BitAction함수도 본래 주어진다.
GPIO_ReadInputDataBit도 주어진다.
GPIO_TypeDef->IDR
:_IO uint32_t IDR
:0~15번 비트까지 0번 핀에서 15번 핀까지의 입력 데이터의 값을 가지고 있다.
GPIO_Pin은 사용하는 핀에 대하여 1이 들어가 있고<핀정보> IDR에 이를 AND함으로써 데이터값이 1이 들어와 있는 핀에 대해서는 1을 반납한다. 물론 IDR에는 복수핀에 대한 데이터 정보로 되어있고 GPIO_Pin은 단일도 복수도 가능하다. 단일일 경우 해당핀만 조건을 만족하면 되고, 복수이면 여러핀이 조건을 만족해야 한다. Bit_RESET, SET은 각각 0,1이다. 32비트로 처리한다. 반납값 bitstatus는 8비트로 0,1표현
ex)
IDR : 0b1011110111110001
PIN : 0b1001001100101100
& : 0b1001000100100000
rese: 0b0000000000000000
테스트 파일. LED3개를 이용하여 깜빡임. 스위치 하나.
![](http://i1.daumcdn.net/icon/editor/p_zip_s.gif)
'중도연재종료 > CORTEX M3' 카테고리의 다른 글
UART_ Hello World 찍기_1 (0) | 2013.06.08 |
---|---|
GPIO_Init (0) | 2013.05.25 |
고급스러운 코딩1. (0) | 2013.05.24 |
LED 끄기[GPIO Set Reset 레지스터] (0) | 2013.05.24 |
LED회로도를 통한 기본적인 이해 (0) | 2013.05.22 |