#include "BSP_GPIO.h"
#include "BSP_Uart.h"
//#include "UFD.h"
uint8_t u8Rx0Data;
//< 串口发送重定向
int fputc(int ch, FILE * file)
{
Uart_SendDataPoll(M0P_UART0,ch); //调用库函数,通过UART0发送一个字母。
return ch;
}
static void Uart0_PortInit(void)
{
stc_gpio_cfg_t stcGpioCfg;
///< 打开GPIO外设时钟门控
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
DDL_ZERO_STRUCT(stcGpioCfg);
///< 端口方向配置 UART0_TXD
stcGpioCfg.enDir = GpioDirOut;
Gpio_Init(PORT_DEBUG_TXD,PIN_DEBUG_TXD,&stcGpioCfg);
Gpio_SetAfMode(PORT_DEBUG_TXD,PIN_DEBUG_TXD,GpioAf2);//UART0_TXD
///< 端口方向配置 UART0_RXD
stcGpioCfg.enDir = GpioDirIn;
///< 端口上下拉配置->上拉
stcGpioCfg.enPu = GpioPuEnable;
Gpio_Init(PORT_DEBUG_RXD,PIN_DEBUG_RXD,&stcGpioCfg);
Gpio_SetAfMode(PORT_DEBUG_RXD,PIN_DEBUG_RXD,GpioAf2);//UART0_RXD
Sysctrl_SetFunc(SysctrlSWDUseIOEn, TRUE); /*Set SWD port to GPIO mode*/
}
static void Uart0_Init(void)
{
stc_uart_cfg_t stcCfg;
stc_uart_baud_t stcBaud;
DDL_ZERO_STRUCT(stcCfg);
DDL_ZERO_STRUCT(stcBaud);
///< 打开UART0外设时钟门控
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);
///<UART Init
stcCfg.enRunMode = UartMskMode1; ///<模式1
stcCfg.enStopBit = UartMsk1bit; ///<1bit停止位
stcCfg.enMmdorCk = UartMskDataOrAddr; ///<多机模式时
stcCfg.stcBaud.u32Baud = 1000000; ///<波特率1000000
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<通道采样分频配置
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); ///</<获得外设时钟(PCLK)频率值
Uart_Init(M0P_UART0, &stcCfg); ///<串口初始化
///<UART中断使能
Uart_ClrStatus(M0P_UART0,UartRC); ///<清接收请求
Uart_ClrStatus(M0P_UART0,UartTC); ///<清接收请求
Uart_EnableIrq(M0P_UART0,UartRxIrq); ///<使能串口接收中断
EnableNvic(UART0_2_IRQn, IrqLevel3, TRUE); ///<系统中断使能
}
void BSP_UartInit(void)
{
Uart0_PortInit();
Uart0_Init();
}
|