HC32F002的UART功能注意点

问题:使用芯片HC32F002的UART功能来通信,波特率4800,其中格式为 数据位8位,偶校验,1停止位。使用串口通信工具发送数据,单片机接收数据出现错误。

参考程序来自于(小华提供的例程HC32F002_SDK\hc32f002_ddl_beta1.0\example\lpuart\lpuart_rx_tx_it)

void App_LpUartCfg(void)
{
    stc_lpuart_init_t  stcInit = {0};
    
    ///<外设模块时钟使能
    SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_LPUART0);
    
    ///<LPUART 初始化
    stcInit.u32StopBits    = LPUART_STOPBITS_1;            ///< 1停止位
    stcInit.u32Parity      = LPUART_PARITY_NONE;           ///< 无校验
    stcInit.u32FrameLength = LPUART_FRAME_LEN_8BITS;       ///< 帧长8位
    stcInit.u32TransMode   = LPUART_MODE_TX_RX;            ///< 发送模式
    stcInit.stcBaudRate.u32SclkSrc  = LPUART_CLKSRC_PCLK;  ///< 传输时钟源
    stcInit.stcBaudRate.u32Sclk     = SYSCTRL_GetPCLK();   ///< PCLK获取
    stcInit.stcBaudRate.u32BaudRate = 9600;                ///< 波特率
    LPUART_Init(M0P_LPUART0, &stcInit);
    
    
}

其中变更:

   stcInit.u32Parity      = LPUART_PARITY_EVEN;           ///< 偶校验
   stcInit.stcBaudRate.u32BaudRate = 4800;                ///< 波特率
   

上位机发送命令如下:01   03

然而单片机中断接收的数据分别为0x81,0x03。

将校验位改为奇校验,那么单片机中断接收的数据变为0x01,0x83。

从以上结果可以得出偶校验时:接收的数据是奇数个1,则不正常;偶数个1则正常。

解决方法:

stcInit.u32FrameLength = LPUART_FRAME_LEN_9BITS;       ///< 帧长9位

参考HC32F002参考手册

        需要将CR.MODE改为(0x11>>6),程序内使用LPUART_FRAME_LEN_9BITS可以满足要求,即模式3

        LPUART_FRAME_LEN_8BITS是将CR.MODE改为(0x01>>6),即模式1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值