board_uart.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "uart.h"
  2. #include "lpuart.h"
  3. #include "gpio.h"
  4. #include "dmac.h"
  5. #include "board_config.h"
  6. static uint8_t u8RxData[URX_BUFF_LEN]={0x00};
  7. static volatile uint16_t u8RxLen = 0;
  8. ///< 端口配置
  9. static void App_LpUartPortCfg(void)
  10. {
  11. stc_gpio_cfg_t stcGpioCfg;
  12. DDL_ZERO_STRUCT(stcGpioCfg);
  13. Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
  14. // ///< 端口方向配置->输入
  15. // stcGpioCfg.enDir = GpioDirOut;
  16. // ///< 端口驱动能力配置->高驱动能力
  17. // stcGpioCfg.enDrv = GpioDrvH;
  18. // ///< 端口上下拉配置->上拉
  19. // stcGpioCfg.enPu = GpioPuDisable;
  20. // stcGpioCfg.enPd = GpioPdDisable;
  21. // ///< 端口开漏输出配置->开漏输出关闭
  22. // stcGpioCfg.enOD = GpioOdDisable;
  23. // ///< 端口输入/输出值寄存器总线控制模式配置->AHB
  24. // stcGpioCfg.enCtrlMode = GpioAHB;
  25. ///<TX
  26. stcGpioCfg.enDir = GpioDirOut;
  27. Gpio_Init(GpioPortB,GpioPin0,&stcGpioCfg);
  28. delay1ms(1);///发现不加延时波特率115200的时候第一次上电跑的时候串口会出乱七八糟的东西
  29. Gpio_SetAfMode(GpioPortB,GpioPin0,GpioAf3); //配置PB00为LPUART0_TX
  30. ///<RX
  31. stcGpioCfg.enDir = GpioDirIn;
  32. Gpio_Init(GpioPortB,GpioPin11,&stcGpioCfg);
  33. //delay100us(1);
  34. Gpio_SetAfMode(GpioPortB,GpioPin11,GpioAf3); //配置PB11为LPUART0_RX
  35. }
  36. ///< LPUART配置
  37. static void App_LpUartCfg(void)
  38. {
  39. stc_lpuart_cfg_t stcCfg;
  40. DDL_ZERO_STRUCT(stcCfg);
  41. ///<外设模块时钟使能
  42. Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
  43. ///<LPUART 初始化
  44. stcCfg.enStopBit = LPUart1bit; ///<1停止位
  45. stcCfg.enMmdorCk = LPUartEven; ///<偶校验
  46. stcCfg.stcBaud.enSclkSel = LPUartMskPclk; ///<传输时钟源
  47. stcCfg.stcBaud.u32Sclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
  48. stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频
  49. stcCfg.stcBaud.u32Baud = 115200; ///<波特率
  50. stcCfg.enRunMode = LPUartMskMode1; ///<工作模式
  51. LPUart_Init(M0P_LPUART0, &stcCfg);
  52. ///<LPUART 中断使能
  53. LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
  54. LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
  55. LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<开启接收中断
  56. // LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
  57. EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
  58. }
  59. ///<LPUART0 中断服务函数
  60. void LpUart0_IRQHandler(void)
  61. {
  62. if(LPUart_GetStatus(M0P_LPUART0, LPUartTC))
  63. {
  64. // LPUart_ClrStatus(M0P_LPUART0, LPUartTC); ///<清发送中断请求 没使能发送中断的时候也要屏蔽这句话,不然轮训方式的时候也会把完成标志清除掉
  65. }
  66. if(LPUart_GetStatus(M0P_LPUART0, LPUartRC)) ///接收数据
  67. {
  68. LPUart_ClrStatus(M0P_LPUART0, LPUartRC); ///<清接收中断请求
  69. u8RxData[u8RxLen] = LPUart_ReceiveData(M0P_LPUART0);///读取数据
  70. u8RxLen ++ ;
  71. }
  72. }
  73. void board_lpuart_config(void)
  74. {
  75. App_LpUartPortCfg();
  76. App_LpUartCfg();
  77. }
  78. void board_uart_rx_polling(void)
  79. {
  80. }