Huada HC32L30E8PA low power serial port settings

First play with BGI chip development

I use the low-power serial port as a normal serial port.

Record the serial port settings in case you suddenly forget them later
. The development of the Huada chip library is still somewhat different from that of STM32, and the serial port settings are also somewhat different
. The official routines are relatively simple.
I am used to STM32 and STM8 settings, and the check digit is: no check digit

Huada chip library, mode 3 can only set parity, serial port assistant set no parity, data travel, let me toss for two days.

Most of our development is customary without check digit.

Huada chip is set to mode 1, just comment out the set check digit code //.


#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++;	
}

test code

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;
	}
}

loop inside the main function,

Beginners, a lot of advice

Guess you like

Origin blog.csdn.net/weixin_42839808/article/details/107528140