打印
[PIC®/AVR®/dsPIC®产品]

【Curiosity Nano测评报告】串口接收的实验及疑惑

[复制链接]
37|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hu9jj|  楼主 | 2024-9-24 16:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hu9jj 于 2024-9-24 16:29 编辑

#申请原创#

    上次在LED闪烁测试中就测试了串口通讯利用printf命令发送数据的功能,测试过程非常顺利。最近几天就一直在测试串口通讯的接收功能,MCC中串口的配置如下:

    串口接收启用了中断方式,缓存区设置为16个字节。开始还添加了UART Example,生成代码后却找不到相应的示例,所以后来就删除了。

    设置串口接收中断的优先级别为最高,以免被其它中断影响到接收过程。
    生成代码后,由于找不到示例,就只好查找相应的中断函数,在eusart1.c文件中找到EUSART1_ReceiveISR()函数,这个明显就是中断接收处理函数。

    其中的eusart1RxBuffer[]就应该是接收数据的缓存区,eusart1RxCount应该是接收到的数据长度。我在主循环中想通过eusart1RxCount>0来判断串口是否接收到数据,当其大于0时则读出eusart1RxBuffer数组中的内容,结果却不能如愿。后来就在这里添加了自己定义的缓存数组进行测试,如上图红色箭头所指的行。测试中多数也接收不到数据,偶尔接收到数据时,前面几个字符正确,后面的字符就不正确了。

    如上图,我将日期时间按照YYYYMMDDhhmmcc字符串的格式发送到单片机,首个字母为‘D',单片机按接收到的数据转换后,前面的年月是正确的,后面的日时分数据却是错误的。

    仔细查看MCC配置界面,看到其中明确标示了各种波特率下的误差百分比,波特率越低误差就越小。9600波特率时误差为0.04%,1200波特率时误差为0.001%(详见上图)。我就有点不明白,我只传输了不到16个字节,在百分之零点零几的误差率下,怎么就会出现数据传输错误了呢?
    为了解决时而能接收数据、时而不能接收数据的问题,我在代码中每次接收到数据之后就对串口重新初始化,就可以每次都接收到数据了(如下图),应该是接收到数据之后没有将某个标志位复位吧。


    本次实验暂告一段落,希望厂家的工程师及有经验的坛友提供更简单明了的示例代码。


使用特权

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

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

148

主题

1042

帖子

11

粉丝