LEDyyds 发表于 2024-2-26 21:12

HC32F460串口波特率设置19200,函数返回ErrorInvalidParameter

今天,在调试项目的时候,遇到设置串口2波特率为19200的时候,USART_SetBaudrate(M4_USART2, 19200)函数返回 ErrorInvalidParameter,导致程序陷入了死循环,配置程序如下:
void USART2_LIN_Config(void){
   
#ifdef LIN_EN
#ifdef HC32_MCU
   stc_usart_uart_init_t stcInitCfg;
   en_result_t enRet;
   
   stcInitCfg.enClkDiv = UsartClkDiv_1;
   stcInitCfg.enClkMode = UsartIntClkCkNoOutput;
   stcInitCfg.enDataLength = UsartDataBits8;
   stcInitCfg.enDirection = UsartDataLsbFirst;
   stcInitCfg.enStopBit = UsartOneStopBit;
   stcInitCfg.enParity = UsartParityNone;
   stcInitCfg.enSampleMode = UsartSamleBit8;
   stcInitCfg.enDetectMode = UsartStartBitFallEdge;
   stcInitCfg.enHwFlow = UsartRtsEnable;
   enRet = USART_UART_Init(M4_USART2, &stcInitCfg);
   if (enRet != Ok)
      { while (1); }
   enRet = USART_SetBaudrate(M4_USART2, 19200);
   if (enRet != Ok)
      { while (1); }
   USART_FuncCmd(M4_USART2, UsartRx, Enable);
   USART_FuncCmd(M4_USART2, UsartTx, Enable);
   USART_FuncCmd(M4_USART2, UsartRxInt,Enable);
#endif
#endif
}

probedog 发表于 2024-2-27 09:40

确定一下你的MCU是否支持19200的波特率

laocuo1142 发表于 2024-2-27 10:30

检查你的stc_usart_uart_init_t结构体配置是否正确

tagntangtangtan 发表于 2024-2-27 10:42

stcInitCfg.enClkDiv = UsartClkDiv_1;分频这块,频率太高了,不支持当前的波特率,改为16分频应该就可以了

duo点 发表于 2024-2-27 11:12

查看参考手册或数据手册把

onlycook 发表于 2024-2-27 12:00

你可以尝试使用一些标准的波特率值(如9600、115200等)来测试USART_SetBaudrate函数,看看是否能够成功设置。如果其他波特率值可以成功设置,那么问题可能确实出在19200这个特定的波特率值上。

七毛钱 发表于 2024-2-27 12:57

检查你的代码、函数实现、MCU文档以及USART模块的配置
页: [1]
查看完整版本: HC32F460串口波特率设置19200,函数返回ErrorInvalidParameter