BASIC4MCU | 질문게시판 | UART 통신 질문입니다.
페이지 정보
작성자 adoui 작성일2023-08-08 17:56 조회369회 댓글4건본문
Richtek의 MCU를 활용하여 UART 통신을 하고있습니다.
unsigned char u8UART_Read(void)
{
return(u32Read_UART_Reg(&CMSDK_UART -> DATA));
}
void UART_Write(unsigned char u8data)
{
Write_UART_Reg(&CMSDK_UART->DATA,u8data);
while(u32Read_UART_Bit(&UART_TXFULL))
{
Write_WDT1_Reg(&CMSDK_WATCHDOG1 -> INTCLR,0);
}
}
void UART_Interrupt(void)
{
Write_UART_Reg(&CMSDK_UART -> INTCLEAR , u32Read_UART_Reg(&CMSDK_UART->INTSTATUS));
if(u32Read_UART_Reg(&CMSDK_UART -> STATE) & 0x02)
{
if(u8UART_Read()==0x2B) UART_Write(u16TmpVSP);
}
}
위는 UART관련 코드입니다.UART_Write(u16TmpVSP)로 UART 출력을 하는 부분이고u16TmpVSP는 현재 VSP값을 읽어들이는 코드입니다.+값을 입력하면 u16TmpVSP를 출력하는 코드인데값이 이상하게 나옵니다.
이유가 뭘까요?
댓글 4
조회수 369master님의 댓글
master 작성일
보레이트에 문제는 없나요?
u16TmpVSP 이 변수에 어떤값이 들어갔는지 모르겠지만
이 값에 문제가 있을 수도 있고요
//if(u8UART_Read()==0x2B)UART_Write(u16TmpVSP);
if(u8UART_Read()==0x2B)UART_Write('A'); // 이런 값을 보내는 것이 체크하기 쉽지 않을까요?
adoui님의 댓글
adoui
말씀하신대로 해보니 A가 정상적으로 출력됩니다.
그런데, A를 AB로 바꾸니 B밖에 출력이 안되는데 이유가 뭘까요?
master님의 댓글
master
함수에서 1문자만 전송하니 B만 출력되는 겁니다.
void UART_Write(unsigned char u8data){
Write_UART_Reg(&CMSDK_UART->DATA,u8data);
while(u32Read_UART_Bit(&UART_TXFULL))Write_WDT1_Reg(&CMSDK_WATCHDOG1 -> INTCLR,0);
}
void UART_Str(char *s){ while(*s)UART_Write(*s++); }
UART_Str() 함수를 추가 선언하고
UART_Str("hello");
문자열 보낼 때 사용하면 됩니다.
adoui님의 댓글
adoui
답변 감사합니다.
u8UART_Read(void)로 숫자1000을 읽어들이려면 어떻게 해야되나요?
void UART_Num(int *n)
{
while(*n) u8UART_Read(*n++);
}
이런식으로 하면 too many argument 오류가 뜹니다.