• 注册 / 登录
  • 切换到窄版
  • 查看: 2022|回复: 0

    HC32L30E8PA 低功耗串口设置

    [复制链接]

    676

    主题

    690

    帖子

    6810

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6810
    发表于 2023-3-9 16:43:37 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    初用小华芯片开发很容易把低功耗串口当普通串口使用,记录下串口设置以备以后忽然忘记.

    小华芯片库开发还是和STM32有些不同,串口设置也有些不同,官方给的例程相对简单.

    平时习惯STM32和STM8设置,校验位为:无校验位.小华芯片库,模式3只能设置奇偶校验,串口助手设置无校验,数据出差,折腾了两天.

    我们开发大多数都是习惯性的无校验位:华大芯片设置成模式1 ,把设置校验位代码//注释掉就可以了.


    1. #define lPUART1_REC_LEN                          200          //定义USART1最大接收字节数
    2. u8  lPUART1_RX_BUF[lPUART1_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
    3. u16 lPUART1_RX_STA=0;                         //接收状态标记        
    4. u16 u16Scnt;//波特率设置

    5. //串口管脚初始化
    6. void Lpuart_PortInit(void)
    7. {
    8.                 stc_gpio_config_t stcGpioCfg;        
    9.           DDL_ZERO_STRUCT(stcGpioCfg);
    10.                 stcGpioCfg.enDir =  GpioDirOut;//端口初始化
    11.     Gpio_Init(GpioPortA,GpioPin0,&stcGpioCfg);//TX
    12.                 Gpio_SetAfMode(GpioPortA,GpioPin0,GpioAf2);
    13.     stcGpioCfg.enDir =  GpioDirIn;
    14.                 //stcGpioCfg.enPuPd = GpioPu;
    15.     Gpio_Init(GpioPortA,GpioPin1,&stcGpioCfg);//RX
    16.     Gpio_SetAfMode(GpioPortA,GpioPin1,GpioAf2);
    17. }


    18. void Lpuart_Init(void)
    19. {

    20.    // stc_lpuart_sclk_sel_t stcSclk;
    21.     stc_lpuart_config_t  stcConfig;//
    22.     stc_lpuart_irq_cb_t stcLPUartIrqCb;//
    23.     stc_lpuart_multimode_t stcMulti;//
    24.     stc_lpuart_baud_t stcBaud;//
    25.                
    26.     DDL_ZERO_STRUCT(stcConfig);//
    27.     DDL_ZERO_STRUCT(stcLPUartIrqCb);//
    28.     DDL_ZERO_STRUCT(stcMulti);//
    29.     DDL_ZERO_STRUCT(stcBaud);//
    30.     //DDL_ZERO_STRUCT(stcSclk);
    31.                           
    32.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);//外设模式时钟使能
    33.     Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart1,TRUE);
    34.    
    35.                 Lpuart_PortInit();//管脚初始化
    36.         
    37.     stcLPUartIrqCb.pfnRxIrqCb   = RxIntCallback;//中断服务函数入口地址
    38.     stcLPUartIrqCb.pfnTxIrqCb   = NULL;
    39.     stcLPUartIrqCb.pfnRxFEIrqCb = NULL;
    40.     stcLPUartIrqCb.pfnPEIrqCb   = NULL;
    41.     stcLPUartIrqCb.pfnCtsIrqCb  = NULL;
    42.     stcConfig.pstcIrqCb = &stcLPUartIrqCb;
    43.     stcConfig.bTouchNvic = TRUE;
    44.           if(TRUE == stcConfig.bTouchNvic)
    45.         {
    46.                 EnableNvic(LPUART1_IRQn,IrqLevel3,TRUE);
    47.         }
    48.     stcConfig.enStopBit = LPUart1bit;//停止位
    49.    
    50.     /
    51.     stcConfig.enRunMode = LPUartMode1;//模式1
    52.     stcMulti.enMulti_mode = LPUartNormal;//正常模式
    53.                 LPUart_SetMultiMode(LPUART1,&stcMulti);//多机模式设置
    54.   //
    55.     //LPUart_SetMMDOrCk(LPUART1,LPUartEven);//偶校验
    56.         
    57.     LPUart_Init(LPUART1, &stcConfig);//串口初始化
    58.    
    59.     LPUart_SetClkDiv(LPUART1,LPUart8Or16Div);//采样分频
    60.    
    61.     stcBaud.u32Sclk = Sysctrl_GetPClkFreq();
    62.     stcBaud.enRunMode = LPUartMode3;
    63.     stcBaud.u32Baud = 9600;
    64.     u16Scnt = LPUart_CalScnt(LPUART1,&stcBaud);//波特率计算
    65.     LPUart_SetBaud(LPUART1,u16Scnt);//波特率值设置
    66.    
    67.                 LPUart_ClrStatus(LPUART1,LPUartRC);//清 接收中断请求
    68.     LPUart_EnableIrq(LPUART1,LPUartRxIrq);//使能接收中断
    69.     LPUart_EnableFunc(LPUART1,LPUartRx);//使能数据收发
    70. }

    71. //接收中断
    72. void RxIntCallback(void)
    73. {
    74.                 lPUART1_RX_BUF[lPUART1_RX_STA]=LPUart_ReceiveData(LPUART1);//读数据
    75.                 lPUART1_RX_STA++;        
    76. }
    复制代码

    测试代码

    1. u8 xxx=0;
    2. void USERT_SEND(void)
    3. {
    4.         if(lPUART1_RX_STA>5)//接收到数据
    5.         {
    6.                 for(xxx=0;xxx<lPUART1_RX_STA;xxx++)
    7.                 {
    8.                 LPUart_SendData(LPUART1,lPUART1_RX_BUF[xxx]);
    9.                 }
    10.                 lPUART1_RX_STA=0;
    11.         }
    12. }
    复制代码

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-12-22 20:42 , Processed in 0.041621 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表