hal_uart.c
来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 128 行
C
128 行
//-----------------------------------------------------------------------------
// HAL_UART
//-----------------------------------------------------------------------------
#include "hal_uart.h"
//-----------------------------------------------------------------------------
// INIT & CONFIG
//-----------------------------------------------------------------------------
void UART_Init (void)
{
UART->IER = 0x00;
UART->CR = 0x00;
UART->RBR;
UART->RRR = 0xFFFF;
UART->TRR = 0xFFFF;
}
//-----------------------------------------------------------------------------
void UART_BaudRate_Config (u32 BaudRate)
{
UART->BRR = (vu16)(SYSCLK/(16*BaudRate));
}
//-----------------------------------------------------------------------------
void UART_CR_Config (u16 what, u16 value)
{
UART->CR = (UART->CR&~what)|(u16)value;
}
//-----------------------------------------------------------------------------
void UART_CR_OnOffConfig (u16 what, FunctionalState NewState)
{
if (NewState == ENABLE)
UART->CR |= what;
else
UART->CR &= ~what;
}
//-----------------------------------------------------------------------------
void UART_IT_Config (u16 what, FunctionalState NewState)
{
if (NewState == ENABLE)
UART->IER |= what;
else
UART->IER &= ~what;
}
//-----------------------------------------------------------------------------
void UART_Fifo_Reset (u16 what)
{
if (what == UART_RxFIFO)
UART->RRR=0xFFFF;
else
UART->TRR=0xFFFF;
}
//-----------------------------------------------------------------------------
// SEND
//-----------------------------------------------------------------------------
void UART_ByteSend (vu8 *Data)
{
if (UART->CR & UART_FIFO_ENABLE)
while (UART->SR & UART_TxFull);
else
while (!(UART->SR & UART_TxEmpty));
UART->TBR = *Data;
}
//-----------------------------------------------------------------------------
void UART_DataSend (vu8 *Data, vu8 DataLength)
{
vu8 *DataToSend;
DataToSend = Data;
while(DataLength--)
{
UART_ByteSend(DataToSend);
DataToSend++;
}
}
//-----------------------------------------------------------------------------
void UART_StringSend (vu8 *String)
{
vu8 *Data = String;
while(*Data != '\0')
UART_ByteSend(Data++);
*Data='\0';
UART_ByteSend(Data);
}
//-----------------------------------------------------------------------------
// RECEIVE
//-----------------------------------------------------------------------------
u16 UART_ByteReceive (vu8 *Data, vu8 TimeOut)
{
u16 wStatus;
if (TimeOut != 0)
{
UART->TOR = TimeOut;
while (!((wStatus = UART->SR) & (UART_TimeOutIdle|UART_RxHalfFull|UART_RxBufFull)));
} else {
UART->TOR = 0xFF;
while (!((wStatus=UART->SR) & (UART_RxHalfFull|UART_RxBufFull)));
}
*Data = (u8)UART->RBR;
return wStatus;
}
//-----------------------------------------------------------------------------
u16 UART_DataReceive (vu8 *Data, vu8 DataLength, vu8 TimeOut)
{
u16 wStatus;
while(DataLength--)
wStatus = UART_ByteReceive(Data++,TimeOut);
return wStatus;
}
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?