查看: 1104|回复: 6

[求助] MKV30串口通信速度慢,且会出错

[复制链接]
  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
    发表于 2020-11-6 14:40:52 | 显示全部楼层 |阅读模式
    untitled.png 首先感谢小恩GG的帮助,已经调通了串口接收中断,但是在测试的时候发现使用for循环连续发送多个数据,会导致数据错误且只能发送一个数据,但是在每个发送函数后面加一个延时,数据就可以完整输出。

    我使用的是485通信,所以有个485的使能,RS485flag标志位通过串口接收中断赋值为1。使能完成后循环发送数据,如果不加延时收到的都是0xFF,加了延时数据就完整接收。

    最佳答案

    鹰宫璞爱惟 发表于 2020-11-9 12:35 这样确实是可以了,但是最后一个数据会丢失或者错误,我的数组最后一个是0x0B,但是串口接收到的是0xFF或 ... 改成while((kUART_TransmissionCompleteFlag & UART_GetStatusFl ...
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19947
    最后登录
    2024-4-19
    发表于 2020-11-6 15:56:16 | 显示全部楼层
    看例程,每次UART_WriteByte完了都要加kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)这个判断的,你这判断位置错了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-11-9 10:59:22 | 显示全部楼层
    小恩GG 发表于 2020-11-6 15:56
    看例程,每次UART_WriteByte完了都要加kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)这个判 ...

    添加kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(UART0_PERIPHERAL)判断对结果没有任何影响,不加延时依旧无法完整发送数据。前两个图片为添加延时,后两个图为未加延时。
    1.png 2.png
    3.png 4.png
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19947
    最后登录
    2024-4-19
    发表于 2020-11-9 11:13:02 | 显示全部楼层
    鹰宫璞爱惟 发表于 2020-11-9 10:59
    添加kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(UART0_PERIPHERAL)判断对结果没有任何影响,不加延 ...

    while判断不是if
    for(uint8_t i=0; i<11; i++)
    {
        UART_WriteByte(uart,demobuffer);
         while((UART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART) )== 0);
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-11-9 12:35:50 | 显示全部楼层
    小恩GG 发表于 2020-11-9 11:13
    while判断不是if
    for(uint8_t i=0; i

    这样确实是可以了,但是最后一个数据会丢失或者错误,我的数组最后一个是0x0B,但是串口接收到的是0xFF或者直接就没有了。
    5.png 6.png 7.png
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19947
    最后登录
    2024-4-19
    发表于 2020-11-9 13:55:28 | 显示全部楼层
    鹰宫璞爱惟 发表于 2020-11-9 12:35
    这样确实是可以了,但是最后一个数据会丢失或者错误,我的数组最后一个是0x0B,但是串口接收到的是0xFF或 ...

    改成while((kUART_TransmissionCompleteFlag & UART_GetStatusFlags(DEMO_UART) )== 0);试试
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-15 10:56
  • 签到天数: 39 天

    [LV.5]常住居民I

    21

    主题

    116

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    436
    最后登录
    2021-10-9
     楼主| 发表于 2020-11-9 17:03:58 | 显示全部楼层
    小恩GG 发表于 2020-11-9 13:55
    改成while((kUART_TransmissionCompleteFlag & UART_GetStatusFlags(DEMO_UART) )== 0);试试

    完美解决!!!非常感谢
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 18:13 , Processed in 0.417115 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表