123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #include "uart.h"
- #include "lpuart.h"
- #include "gpio.h"
- #include "dmac.h"
- #include "board_config.h"
- static uint8_t u8RxData[URX_BUFF_LEN]={0x00};
- static volatile uint16_t u8RxLen = 0;
- ///< 端口配置
- static void App_LpUartPortCfg(void)
- {
- stc_gpio_cfg_t stcGpioCfg;
-
- DDL_ZERO_STRUCT(stcGpioCfg);
-
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
-
- // ///< 端口方向配置->输入
- // stcGpioCfg.enDir = GpioDirOut;
- // ///< 端口驱动能力配置->高驱动能力
- // stcGpioCfg.enDrv = GpioDrvH;
- // ///< 端口上下拉配置->上拉
- // stcGpioCfg.enPu = GpioPuDisable;
- // stcGpioCfg.enPd = GpioPdDisable;
- // ///< 端口开漏输出配置->开漏输出关闭
- // stcGpioCfg.enOD = GpioOdDisable;
- // ///< 端口输入/输出值寄存器总线控制模式配置->AHB
- // stcGpioCfg.enCtrlMode = GpioAHB;
-
- ///<TX
- stcGpioCfg.enDir = GpioDirOut;
- Gpio_Init(GpioPortB,GpioPin0,&stcGpioCfg);
-
- delay1ms(1);///发现不加延时波特率115200的时候第一次上电跑的时候串口会出乱七八糟的东西
-
- Gpio_SetAfMode(GpioPortB,GpioPin0,GpioAf3); //配置PB00为LPUART0_TX
-
- ///<RX
- stcGpioCfg.enDir = GpioDirIn;
- Gpio_Init(GpioPortB,GpioPin11,&stcGpioCfg);
-
- //delay100us(1);
-
- Gpio_SetAfMode(GpioPortB,GpioPin11,GpioAf3); //配置PB11为LPUART0_RX
- }
- ///< LPUART配置
- static void App_LpUartCfg(void)
- {
- stc_lpuart_cfg_t stcCfg;
-
- DDL_ZERO_STRUCT(stcCfg);
-
- ///<外设模块时钟使能
- Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
-
- ///<LPUART 初始化
- stcCfg.enStopBit = LPUart1bit; ///<1停止位
- stcCfg.enMmdorCk = LPUartEven; ///<偶校验
- stcCfg.stcBaud.enSclkSel = LPUartMskPclk; ///<传输时钟源
- stcCfg.stcBaud.u32Sclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
- stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频
- stcCfg.stcBaud.u32Baud = 115200; ///<波特率
- stcCfg.enRunMode = LPUartMskMode1; ///<工作模式
- LPUart_Init(M0P_LPUART0, &stcCfg);
-
- ///<LPUART 中断使能
- LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
- LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
- LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<开启接收中断
- // LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
- EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
- }
- ///<LPUART0 中断服务函数
- void LpUart0_IRQHandler(void)
- {
- if(LPUart_GetStatus(M0P_LPUART0, LPUartTC))
- {
- // LPUart_ClrStatus(M0P_LPUART0, LPUartTC); ///<清发送中断请求 没使能发送中断的时候也要屏蔽这句话,不然轮训方式的时候也会把完成标志清除掉
-
- }
-
- if(LPUart_GetStatus(M0P_LPUART0, LPUartRC)) ///接收数据
- {
-
- LPUart_ClrStatus(M0P_LPUART0, LPUartRC); ///<清接收中断请求
-
-
- u8RxData[u8RxLen] = LPUart_ReceiveData(M0P_LPUART0);///读取数据
-
- u8RxLen ++ ;
- }
- }
- void board_lpuart_config(void)
- {
- App_LpUartPortCfg();
- App_LpUartCfg();
- }
- void board_uart_rx_polling(void)
- {
- }
|