请问HC32L136的lpuart使用xtl,2400bps,是不是误差太大了
本帖最后由 yixifeng1990 于 2020-11-5 11:13 编辑请问HC32L136的lpuart使用xtl,boaud=2400bps,是不是误差太大了
选用fsclk=32768,sclkdiv=0x400; 则scnt=fsclk/boaud=32768/2400/4=3.41=3
实际波特率:fsclk/(scnt*over)=32768/(3*4)=2730.6
误差 (2730.6-2400)/2400=13.77%
是不是有点大了,有没有别的解决办法
需要用38400的低速晶振信号 martinhu 发表于 2020-11-5 11:28
需要用38400的低速晶振信号
主要考虑低功耗下使用的是XTL,RCL功耗有点大 我就是用的RCL 38400,功耗还是0.3uA caizhiwei 发表于 2020-11-6 08:27
我就是用的RCL 38400,功耗还是0.3uA
我也试试 楼主,咨询下,lpuart0休眠模式下数据是否发送、接收正常?方便提供下代码么? 我现在用1024000速率,调试用。8M zydr1989 发表于 2021-2-27 16:52
楼主,咨询下,lpuart0休眠模式下数据是否发送、接收正常?方便提供下代码么? ...
用RCL 2400bps 8 e 1,工作正常
///< LPUART0配置
static void board_LpuartConfig(void)
{
stc_lpuart_cfg_tstcCfg;
DDL_ZERO_STRUCT(stcCfg);
#if(LPUART_CLKSRC_RCL==LPUART_CLKSRC)
Sysctrl_SetRCLTrim(SysctrlRclFreq38400);
Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE); //开 RCL 时钟 已在系统时钟初始化时开启
#endif
///<外设模块时钟使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
#if(LPUART_CLKSRC_XTL==LPUART_CLKSRC) ///<LPUART 初始化2400bps 误差较大13% 若无法用,则换时钟源RCL 38400Hz
stcCfg.enStopBit = LPUart1bit; ///<1停止位
stcCfg.enMmdorCk = LPUartEven; ///<偶校验
stcCfg.stcBaud.enSclkSel = LPUartMskXtl; ///<传输时钟源 XTL
stcCfg.stcBaud.u32Sclk =LPUART_CLKSRC_XTL; ///sclk
stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频<模式0无效,模式1/3为4分频,模式2为8分频
stcCfg.stcBaud.u32Baud = 2400; ///<波特率
stcCfg.enRunMode = LPUartMskMode3; ///<工作模式
LPUart_Init(M0P_LPUART0, &stcCfg);
#elif(LPUART_CLKSRC_RCL==LPUART_CLKSRC)
stcCfg.enStopBit = LPUart1bit; ///<1停止位
stcCfg.enMmdorCk = LPUartEven; ///<偶校验
stcCfg.stcBaud.enSclkSel = LPUartMskRcl; ///<传输时钟源 XTL
stcCfg.stcBaud.u32Sclk = LPUART_CLKSRC_RCL ; ///sclk
stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频<模式0无效,模式1/3为4分频,模式2为8分频
stcCfg.stcBaud.u32Baud = 2400; ///<波特率
stcCfg.enRunMode = LPUartMskMode3; ///<工作模式
LPUart_Init(M0P_LPUART0, &stcCfg);
#endif
///<LPUART 中断使能
LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<使能接收中断
EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
// LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
// LPUart_DisableIrq(M0P_LPUART0,LPUartRxIrq); ///<禁止接收中断
}
页:
[1]