| 
 | 
 
路线栈欢迎您!
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
初用小华芯片开发很容易把低功耗串口当普通串口使用,记录下串口设置以备以后忽然忘记. 
 
小华芯片库开发还是和STM32有些不同,串口设置也有些不同,官方给的例程相对简单. 
 
平时习惯STM32和STM8设置,校验位为:无校验位.小华芯片库,模式3只能设置奇偶校验,串口助手设置无校验,数据出差,折腾了两天. 
 
我们开发大多数都是习惯性的无校验位:华大芯片设置成模式1 ,把设置校验位代码//注释掉就可以了. 
 
 
- #define lPUART1_REC_LEN                          200          //定义USART1最大接收字节数
 
 - u8  lPUART1_RX_BUF[lPUART1_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 
 
 - u16 lPUART1_RX_STA=0;                         //接收状态标记        
 
 - u16 u16Scnt;//波特率设置
 
  
- //串口管脚初始化
 
 - void Lpuart_PortInit(void)
 
 - {
 
 -                 stc_gpio_config_t stcGpioCfg;        
 
 -           DDL_ZERO_STRUCT(stcGpioCfg);
 
 -                 stcGpioCfg.enDir =  GpioDirOut;//端口初始化
 
 -     Gpio_Init(GpioPortA,GpioPin0,&stcGpioCfg);//TX
 
 -                 Gpio_SetAfMode(GpioPortA,GpioPin0,GpioAf2);
 
 -     stcGpioCfg.enDir =  GpioDirIn;
 
 -                 //stcGpioCfg.enPuPd = GpioPu;
 
 -     Gpio_Init(GpioPortA,GpioPin1,&stcGpioCfg);//RX
 
 -     Gpio_SetAfMode(GpioPortA,GpioPin1,GpioAf2);
 
 - }
 
  
 
- void Lpuart_Init(void)
 
 - {
 
  
-    // stc_lpuart_sclk_sel_t stcSclk;
 
 -     stc_lpuart_config_t  stcConfig;//
 
 -     stc_lpuart_irq_cb_t stcLPUartIrqCb;//
 
 -     stc_lpuart_multimode_t stcMulti;//
 
 -     stc_lpuart_baud_t stcBaud;//
 
 -                 
 
 -     DDL_ZERO_STRUCT(stcConfig);//
 
 -     DDL_ZERO_STRUCT(stcLPUartIrqCb);//
 
 -     DDL_ZERO_STRUCT(stcMulti);//
 
 -     DDL_ZERO_STRUCT(stcBaud);//
 
 -     //DDL_ZERO_STRUCT(stcSclk);
 
 -                           
 
 -     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);//外设模式时钟使能
 
 -     Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart1,TRUE);
 
 -     
 
 -                 Lpuart_PortInit();//管脚初始化
 
 -         
 
 -     stcLPUartIrqCb.pfnRxIrqCb   = RxIntCallback;//中断服务函数入口地址
 
 -     stcLPUartIrqCb.pfnTxIrqCb   = NULL;
 
 -     stcLPUartIrqCb.pfnRxFEIrqCb = NULL;
 
 -     stcLPUartIrqCb.pfnPEIrqCb   = NULL;
 
 -     stcLPUartIrqCb.pfnCtsIrqCb  = NULL;
 
 -     stcConfig.pstcIrqCb = &stcLPUartIrqCb;
 
 -     stcConfig.bTouchNvic = TRUE;
 
 -           if(TRUE == stcConfig.bTouchNvic)
 
 -         {
 
 -                 EnableNvic(LPUART1_IRQn,IrqLevel3,TRUE);
 
 -         }
 
 -     stcConfig.enStopBit = LPUart1bit;//停止位
 
 -     
 
 -     /
 
 -     stcConfig.enRunMode = LPUartMode1;//模式1
 
 -     stcMulti.enMulti_mode = LPUartNormal;//正常模式
 
 -                 LPUart_SetMultiMode(LPUART1,&stcMulti);//多机模式设置
 
 -   //
 
 -     //LPUart_SetMMDOrCk(LPUART1,LPUartEven);//偶校验
 
 -         
 
 -     LPUart_Init(LPUART1, &stcConfig);//串口初始化
 
 -     
 
 -     LPUart_SetClkDiv(LPUART1,LPUart8Or16Div);//采样分频
 
 -     
 
 -     stcBaud.u32Sclk = Sysctrl_GetPClkFreq();
 
 -     stcBaud.enRunMode = LPUartMode3;
 
 -     stcBaud.u32Baud = 9600;
 
 -     u16Scnt = LPUart_CalScnt(LPUART1,&stcBaud);//波特率计算
 
 -     LPUart_SetBaud(LPUART1,u16Scnt);//波特率值设置
 
 -     
 
 -                 LPUart_ClrStatus(LPUART1,LPUartRC);//清 接收中断请求
 
 -     LPUart_EnableIrq(LPUART1,LPUartRxIrq);//使能接收中断
 
 -     LPUart_EnableFunc(LPUART1,LPUartRx);//使能数据收发
 
 - }
 
  
- //接收中断
 
 - void RxIntCallback(void)
 
 - {
 
 -                 lPUART1_RX_BUF[lPUART1_RX_STA]=LPUart_ReceiveData(LPUART1);//读数据
 
 -                 lPUART1_RX_STA++;        
 
 - }
 
  复制代码 
测试代码 
 
- u8 xxx=0;
 
 - void USERT_SEND(void)
 
 - {
 
 -         if(lPUART1_RX_STA>5)//接收到数据
 
 -         {
 
 -                 for(xxx=0;xxx<lPUART1_RX_STA;xxx++)
 
 -                 {
 
 -                 LPUart_SendData(LPUART1,lPUART1_RX_BUF[xxx]);
 
 -                 }
 
 -                 lPUART1_RX_STA=0;
 
 -         }
 
 - }
 
  复制代码 
 |   
 
 
 
 |