验证
串口部分确认配置为115200-8-N-1
//串口模块配置
void App_UartCfg(void)
{
stc_uart_cfg_tstcCfg;
stc_uart_baud_t stcBaud;
DDL_ZERO_STRUCT(stcCfg);
DDL_ZERO_STRUCT(stcBaud);
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE); ///<使能UART0外设时钟门控开关
///<UART Init
stcCfg.enRunMode = UartMskMode1; ///<模式1
stcCfg.enStopBit = UartMsk1bit; ///<1bit停止位
stcCfg.enMmdorCk = UartMskDataOrAddr; //无校验
stcCfg.stcBaud.u32Baud= 115200; ///<波特率115200
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<通道采样分频配置
stcCfg.stcBaud.u32Pclk= Sysctrl_GetPClkFreq(); ///</<获得外设时钟(PCLK)频率值
Uart_Init(M0P_UART0, &stcCfg); ///<串口初始化
///<UART中断使能
Uart_ClrStatus(M0P_UART0,UartRC); //清接收请求
Uart_ClrStatus(M0P_UART0,UartTC); //清发送请求
Uart_EnableIrq(M0P_UART0,UartRxIrq); //使能串口接收中断
//Uart_EnableIrq(M0P_UART0,UartTxIrq); //使能串口发送中断
//EnableNvic(UART0_IRQn, IrqLevel3, TRUE); ///<系统中断使能
}
再次抓取波形,123轻松识别,脉宽8.65us,误差不到0.35%,验证ok 总结
HC32L13x 串口例程PCLK给的是4MHz,默认串口波特率也是9600,要正常使用115200bps通信,需调高PCLK的值。
也许这就是低功耗MCU吧,时钟跑这么低,PLL也不用。
void Sys_Clk(void)
{
stc_gpio_config_t stcGpioCfg;
stc_sysctrl_clk_config_t stcCfg;
stc_sysctrl_pll_config_t stcPLLCfg;
DDL_ZERO_STRUCT(stcCfg);
DDL_ZERO_STRUCT(stcPLLCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 开启FLASH外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);
///< 因将要倍频的PLL作为系统时钟HCLK会达到48MHz:所以此处预先设置FLASH 读等待周期为1 cycle(默认值为0 cycle)
Flash_WaitCycle(FlashWaitCycle2);
///< 时钟初始化前,优先设置要使用的时钟源:此处配置PLL
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz); //PLL使用RCH作为时钟源,因此需要先设置RCH
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; //RCH 4MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz;//PLL 输出48MHz
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
stcPLLCfg.enPllMul = SysctrlPllMul12; //4MHz x 12 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
stcCfg.enClkSrc= SysctrlClkPLL;
stcCfg.enHClkDiv = SysctrlHclkDiv1;
stcCfg.enPClkDiv = SysctrlPclkDiv1;
///< 系统时钟初始化
Sysctrl_ClkInit(&stcCfg);
}
115200波特率理论上,系统时钟需要比115200速率要大,比如16M,24M,32M,48M等等。我这个配置是内部4M倍频到48M。可以直接使用。若不需要校验,请使用MODE1模式。 小华半导体代理:13168079092 直接加载24M频率,真是大胆啊,玩玩可以,批量的时候有你找不到问题出在哪里的。
关注,这个在4M的时候不能配置波特率生成器寄存器吗,可以降低误差
页:
1
[2]