打印
[技术问答]

请问HC32L136的lpuart使用xtl,2400bps,是不是误差太大了

[复制链接]
1012|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yixifeng1990|  楼主 | 2020-11-5 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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%
是不是有点大了,有没有别的解决办法

使用特权

评论回复
评论
yixifeng1990 2020-11-5 11:13 回复TA
能不能设置sclk不分频 
沙发
martinhu| | 2020-11-5 11:28 | 只看该作者
需要用38400的低速晶振信号

使用特权

评论回复
板凳
yixifeng1990|  楼主 | 2020-11-5 13:05 | 只看该作者
martinhu 发表于 2020-11-5 11:28
需要用38400的低速晶振信号

主要考虑低功耗下使用的是XTL,RCL功耗有点大

使用特权

评论回复
地板
caizhiwei| | 2020-11-6 08:27 | 只看该作者
我就是用的RCL 38400,功耗还是0.3uA

使用特权

评论回复
5
yixifeng1990|  楼主 | 2020-11-6 09:31 | 只看该作者
caizhiwei 发表于 2020-11-6 08:27
我就是用的RCL 38400,功耗还是0.3uA

我也试试

使用特权

评论回复
6
zydr1989| | 2021-2-27 16:52 | 只看该作者
楼主,咨询下,lpuart0休眠模式下数据是否发送、接收正常?方便提供下代码么?

使用特权

评论回复
7
Q80351951| | 2021-3-3 22:58 | 只看该作者
我现在用1024000速率,调试用。8M

使用特权

评论回复
8
yixifeng1990|  楼主 | 2021-3-8 16:15 | 只看该作者
zydr1989 发表于 2021-2-27 16:52
楼主,咨询下,lpuart0休眠模式下数据是否发送、接收正常?方便提供下代码么? ...

用RCL 2400bps 8 e 1,工作正常

///< LPUART0配置
static void board_LpuartConfig(void)
{
    stc_lpuart_cfg_t  stcCfg;

    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);      ///<禁止接收中断
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

95

帖子

1

粉丝