硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4291|回复: 3
收起左侧

[有问必答] stm32f030移植uart fifo调试GPRS一直进中断

[复制链接]

1

主题

83

回帖

86

积分

初级会员

积分
86
发表于 2018-2-5 19:05:05 | 显示全部楼层 |阅读模式
移植stm32f407 GPRS例子中的uart fifo,一直进入中断,只要调用发送就不行,可以接收。
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: UartSend
  4. *        功能说明: 填写数据到UART发送缓冲区,并启动发送中断。中断处理函数发送完毕后,自动关闭发送中断
  5. *        形    参:  无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. static void UartSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
  10. {
  11.         uint16_t i;

  12.         for (i = 0; i < _usLen; i++)
  13.         {
  14.                 /* 如果发送缓冲区已经满了,则等待缓冲区空 */               
  15.         #if 0
  16.                 /*
  17.                         在调试GPRS例程时,下面的代码出现死机,while 死循环
  18.                         原因: 发送第1个字节时 _pUart->usTxWrite = 1;_pUart->usTxRead = 0;
  19.                         将导致while(1) 无法退出
  20.                 */
  21.                 while (1)
  22.                 {
  23.                         uint16_t usRead;

  24.                         DISABLE_INT();
  25.                         usRead = _pUart->usTxRead;
  26.                         ENABLE_INT();

  27.                         if (++usRead >= _pUart->usTxBufSize)
  28.                         {
  29.                                 usRead = 0;
  30.                         }

  31.                         if (usRead != _pUart->usTxWrite)
  32.                         {
  33.                                 break;
  34.                         }
  35.                 }
  36.         #else
  37.                 while (1)
  38.                 {
  39.                         uint16_t usCount;

  40.                         DISABLE_INT();
  41.                         usCount = _pUart->usTxCount;
  42.                         ENABLE_INT();

  43.                         if (usCount < _pUart->usTxBufSize)
  44.                         {
  45.                                 break;
  46.                         }
  47.                 }                       
  48.         #endif

  49.                 /* 将新数据填入发送缓冲区 */
  50.                 _pUart->pTxBuf[_pUart->usTxWrite] = _ucaBuf[i];

  51.                 DISABLE_INT();
  52.                 if (++_pUart->usTxWrite >= _pUart->usTxBufSize)
  53.                 {
  54.                         _pUart->usTxWrite = 0;
  55.                 }
  56.                 _pUart->usTxCount++;
  57.                 ENABLE_INT();
  58.         }

  59.         USART_ITConfig(_pUart->uart, USART_IT_TXE, ENABLE);
  60. }
复制代码
是不是这个发送代码有问题?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-2-6 01:37:15 | 显示全部楼层
不影响,注意加大bsp_uart_fifo.C文件中的缓冲大小,只要你一次发送的数据没有超过缓冲大小就没有问题。
回复

使用道具 举报

1

主题

83

回帖

86

积分

初级会员

积分
86
 楼主| 发表于 2018-2-6 09:53:21 | 显示全部楼层
eric2013 发表于 2018-2-6 01:37
不影响,注意加大bsp_uart_fifo.C文件中的缓冲大小,只要你一次发送的数据没有超过缓冲大小就没有问题。

已经加大了,还是不行
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-2-6 09:54:34 | 显示全部楼层
neomissing 发表于 2018-2-6 09:53
已经加大了,还是不行

暂时我也没辙了,你再检查下其它问题吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 06:48 , Processed in 0.037862 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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