查看: 5874|回复: 10

[其他] 问下串口只能发送出来16字节数据的问题

[复制链接]
  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
    发表于 2017-7-2 18:30:23 | 显示全部楼层 |阅读模式
    本帖最后由 NXP+LPC+FSL 于 2017-7-5 10:50 编辑

    最近看了sdk,配置串口5玩玩,可是发出来的数据只有16个字节,后面的数据没发出来。
    小于16字节的数据可以正常发

    看了下可能和 fifo有关,这个怎么配置成 普通的模式,不要fifo,,大于16字节的数据也可以发送。。。

    我现在跳了好久,单片机往外部 发数据,发不全啊,有没有参考啊,,,sdk的好像不行

    我的配置如下:

    1.                 usart_config_t config;
    2.         
    3.                 /* attach 12 MHz clock to FLEXCOMM5  */
    4.     CLOCK_AttachClk(BOARD_UART5_CLK_ATTACH);

    5.     /* reset FLEXCOMM for USART5 */
    6.     RESET_PeripheralReset(BOARD_UART5_RST);        
    7.         
    8.                 USART5_InitPins();

    9.     USART_GetDefaultConfig(&config);
    10.     config.baudRate_Bps = BAUDRATE_115200;
    11.     config.enableTx = true;
    12.     config.enableRx = true;

    13.     USART_Init(LPC_USART, &config, CLOCK_GetFreq(kCLOCK_Flexcomm5));

    14.     USART_EnableInterrupts(LPC_USART, kUSART_RxLevelInterruptEnable | kUSART_RxErrorInterruptEnable);
    15.                            
    16.     EnableIRQ(LPC_USART_IRQn);

    复制代码
    然后发送函数
    1. void USART5_Send(char * buf1)
    2.                         {        
    3.                                         uint8_t i=0;
    4.                                         while (1)
    5.                                         {        if (buf1[i]!=0)
    6.                                                 {        USART_WriteByte(LPC_USART, buf1[i]);
    7.                                                         while(kUSART_TxFifoEmptyFlag & USART_GetStatusFlags(LPC_USART));
    8.                                                         
    9.                                                         i++;
    10.                                                 }
    11.                                                 else return;
    12.                                         }
    13.                         }
    复制代码

      最多只能发送16字节
    USART5_Send("01234567890123456789\r\n");

    QQ截图20170702182913.png

    最佳答案

    首先你可以在debug的情况下,看看代码在输出16字节后停在哪里了,还有我建议在写入FIFO之前首先判断FIFO是否未满,而不是判断其为空,未满就就写入到FIFOWR寄存器中。 ...
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25503
    最后登录
    2025-9-11
    发表于 2017-7-3 15:04:10 | 显示全部楼层
    请问楼主是用的是SDK哪个例程呢,然后有看过参考手册吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
     楼主| 发表于 2017-7-3 16:36:01 | 显示全部楼层
    小恩GG 发表于 2017-7-3 15:04
    请问楼主是用的是SDK哪个例程呢,然后有看过参考手册吗?

    参考sdk串口中断例程   usart0 改为了usart5,配置上和usart0  一样,,可以在usart0 中断例程里面测试下直接发送一个 大于16字节的字符串试下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
     楼主| 发表于 2017-7-3 16:37:44 | 显示全部楼层
    本帖最后由 NXP+LPC+FSL 于 2017-7-5 10:49 编辑
    小恩GG 发表于 2017-7-3 15:04
    请问楼主是用的是SDK哪个例程呢,然后有看过参考手册吗?



    这个
    QQ截图20170703163702.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
     楼主| 发表于 2017-7-3 16:44:29 | 显示全部楼层
    小恩GG 发表于 2017-7-3 15:04
    请问楼主是用的是SDK哪个例程呢,然后有看过参考手册吗?

    感觉 和配置中的FIFO  有关,我这个发送函数只能发出来16个字节。。。。

    之前在别的单片机上都用这个发送函数  ok的。

    demo中 有个这样的发送函数,可以发送长字符串
    1. /* Send g_tipString out. */
    2.     USART_WriteBlocking(DEMO_USART, g_tipString, sizeof(g_tipString) / sizeof(g_tipString[0]));
    复制代码



    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
     楼主| 发表于 2017-7-3 16:45:03 | 显示全部楼层
    小恩GG 发表于 2017-7-3 15:04
    请问楼主是用的是SDK哪个例程呢,然后有看过参考手册吗?

    如果我用 我这个发送函数,该怎么配置呢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25503
    最后登录
    2025-9-11
    发表于 2017-7-4 15:29:43 | 显示全部楼层
    NXP+LPC+FSL 发表于 2017-7-3 16:44
    感觉 和配置中的FIFO  有关,我这个发送函数只能发出来16个字节。。。。

    之前在别的单片机上都用这个发 ...

    这个函数适用所有的UART接口,你需要确定的是正确配置uart引脚复用以及使得DEMO_USART指向UART5
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
     楼主| 发表于 2017-7-4 17:59:18 | 显示全部楼层
    小恩GG 发表于 2017-7-4 15:29
    这个函数适用所有的UART接口,你需要确定的是正确配置uart引脚复用以及使得DEMO_USART指向UART5 ...

    配置没问题,我没有使用这个函数
    USART_WriteBlocking(DEMO_USART, g_tipString, sizeof(g_tipString) / sizeof(g_tipString[0]));

    我用我自己写的发送函数
    void USART5_Send(char * buf1)
                            {        
                                            uint8_t i=0;
                                            while (1)
                                            {        if (buf1!=0)
                                                    {        USART_WriteByte(LPC_USART, buf1);
                                                            while(kUSART_TxFifoEmptyFlag & USART_GetStatusFlags(LPC_USART));
                                                            
                                                            i++;
                                                    }
                                                    else return;
                                            }
                            }


    低于16字节都是正常工作的。。。我写的这个函数 之前一直在stm32
    上用,没遇到这个问题
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25503
    最后登录
    2025-9-11
    发表于 2017-7-5 10:21:07 | 显示全部楼层
    首先你可以在debug的情况下,看看代码在输出16字节后停在哪里了,还有我建议在写入FIFO之前首先判断FIFO是否未满,而不是判断其为空,未满就就写入到FIFOWR寄存器中。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
     楼主| 发表于 2017-7-5 10:48:33 | 显示全部楼层
    小恩GG 发表于 2017-7-5 10:21
    首先你可以在debug的情况下,看看代码在输出16字节后停在哪里了,还有我建议在写入FIFO之前首先判断FIFO是 ...

    有空我试下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-11 23:49 , Processed in 0.122248 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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