UART
UART(범용 비동기화 송수신기: Universal asynchronous receiver/transmitter)는 병렬및 직렬 방식으로 데이터를 전송하는 컴퓨터 하드웨어의 일종이다. UART는 일반적으로 EIA RS-232, RS-422, RS-485 와 같은 통신 표준과 함께 사용한다. UART의 U는 범용을 가리키는데 이는 자료 형태나 전송 속도를 직접 구성할 수 있고 실제 전기 신호 수준과 방식(이를테면 차분신호)이 일반적으로 UART 바깥의 특정한 드라이버 회로를 통해 관리를 받는다는 뜻이다.
UART는 일반적으로 컴퓨터나 주변 기기 직렬 포트의 직렬 통신 을 위해 사용되는 개별 집적회로 이다. UART는 보통 마이크로컨트롤러에도 포함되어 있다. 듀얼 UART, 곧 DUART는 두 개의 UART를 하나의 칩에 합친 것이다. 수많은 현대의 집적 회로(IC)는 동기화 통신도 지원하는 UART와 함께한다. 이러한 장치들은USARTs(범용 동기화 송수신기: universal synchronous/asynchronous receiver/transmitter)로 부른다.
수신측과 송신측의 약속이 있어야 한다
#include "stm32f10x_usart.h"
#define fck 8000000
#define BaudRate 115200
#define USART_HardwareFlowControl_None ((uint16_t)0x0000)
#define USART_WordLength_8b ((uint16_t)0x0000)
#define USART_Parity_No ((uint16_t)0x0000)
#define USART_Mode_Rx ((uint16_t)0x0004)
#define USART_Mode_Tx ((uint16_t)0x0008)
#define CR1_UE_Set ((uint16_t)0x2000)
void USART1_Configuration(void)
{
//Baud Rate 설정
uint32_t temp=0x0;
uint_t USARTDIV=0x0, FractionDevider=0x0;
USARTDIV=fck/((0x10)*BaudRate));
temp=(USARTDIV/0x64)<<4;
FractionDevider=USARTDIV-(0x64*(temp>>4));
temp |=(((FractionDevider*0x10)+0x32)/0x64)&0x0F;
USART1->BRR=(uint16_t)temp;//보레에트 값을 집어넣는 공간 temp
//그외세팅 (페리티 설정 같은)
//USART1->CR1_WordLength_|USART_Parity_No|USART_HardwareFlowControl_None|8b USART_Mode_Rx | USART_Mode_Tx;
temp=USART1->CR1;
temp &=~(0x160c);
temp |= (USART_WordLength_8b | USART_Parity_No | USART_HardwareFlowControl_None|USART_Mode_Rx | USART_Mode_Tx;
USART1->CR1 = (uint16_t)temp;
//USART_WordLength_8b,USART_Parity_No 이것들에는 별도의 디파인이 있어야한다
//Stop bit:1
temp=USART1->CR2;
temp&=~(0x3000);
temp |=((uint16_t)0x0000); //USART_StopBit_1 엄밀하게는 지금 해놓은것이 들어가는것이다
USART1->CR2=(uint16_t)temp;
//Hardware Flow Control None
temp=USART1->CR3;
temp&=~(0x300);
temp |=USART_HardwareFlowControl_None;
USART1->CR3=(uint16_t)temp;
//Enable USART1
USART1->CR1 |=CR1_UE_Set;
}
int main()
{
while(1)
{
//예를 들어서 헬로 월드를 보내줄려면 함수하나를 만들어서 던져주게 하면 된다
}
return 0;
이 위에 있는 Tx/Rx baud=fck/16*USARTDIV 를 이용해서 설정을 해준다
X 표시가 되어있는것이 가능하다는 것들인데 거의다가 가능한 모드라는것을 알수있다
우리가 하려는 UART 에서는 이 Baud rate register 이 중요하다
여기있는 레지스터를 참고해서 작업을 하면 된다고 하신다.
우리는 Idle Line으로 설정한다고 한다
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20141110 일일보고 김재성 (5) | 2014.11.10 |
---|---|
2014.11.10 USART / ASSERT() (0) | 2014.11.10 |
assert함수 설명 / 김진철 (0) | 2014.11.10 |
1107 김상엽 출석번호 5번 업무일지 (7) | 2014.11.07 |
keil usart (0) | 2014.11.06 |
2014.11.05 업무일지 - 한솔 (7) | 2014.11.06 |
ARM (0) | 2014.11.05 |
2014.11.04. 업무일지 22번 허수웅 (8) | 2014.11.05 |