HC32F448串口接收数据失败

最近接触单片机HC32F448,从原有的程序(单片机-MSP430)移植到HC32F448。USART功能设置为9600波特率,8位数据位,1位停止位,无奇偶校验位。

问题:

1.boot程序(产品)内存在升级程序的功能,结果上位机(串口助手exe)发送的字节--包头(0x02)在产品调试中无法解析到包头

2.app程序(产品)设置为38400波特率时,可以与通信模块产生连接;设置为9600波特率时,不能与通信模块产生连接。由于通信模块的设定是这两种波特率都是可行的,那么通信模块与产品的连接在这两种波特率模式下都应该实现。此时产生了矛盾

boot程序内USART使用查询方式设计,app程序内USART使用中断方式设计。初始化(引脚定义和USART功能配置)都是相同的。

分析:

问题2中,产品与烧录器(USB转UART工具)连接,上位机使用串口工具,波特率在9600时可以成功实现数据交互。那么说明程序的设置都是没有问题。产品与通信模块连接,调试模式下,程序没有进入该命令,采集的数据有异常。换句话来说,波特率9600下,产品接收通信模块发送的数据,没有解析成功(因为通信模块一直在发送01 10 80 32 00 10 cc 09+FE+FF+......一些波特率9600下不认识的数据)。

问题1中,产品无法解析包头。

两个问题本质是一样的,接收的数据无法解析,数据异常无法处理。

解决方法:

static void USART_RxError_IrqCallback(void)
{
    (void)USART_ReadData(USART_UNIT);

    USART_ClearStatus(USART_UNIT, (USART_FLAG_PARITY_ERR | USART_FLAG_FRAME_ERR |USART_FLAG_OVERRUN));
}

这个真得需要加,即使boot程序采用查询方式,还是需要增加接收数据错误的处理方法。当然别忘了 使能USART_INT_RX

 USART_FuncCmd(USART_UNIT, (USART_RX | USART_INT_RX | USART_TX), ENABLE);

建议:

有时候哪能分析问题具体出错情况,还有个方法:直接拿出例程进行比较,最终确认错误位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值