首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >到达RX回调后未发送HAL_UART_TRANSMIT_DMA

到达RX回调后未发送HAL_UART_TRANSMIT_DMA
EN

Stack Overflow用户
提问于 2020-01-30 23:28:41
回答 1查看 643关注 0票数 0

我正在努力让UART在接收后发送数据,对RX使用循环DMA,对TX使用普通模式。

在main(void)中

代码语言:javascript
运行
复制
HAL_UART_Receive_DMA(&huart2,rx_buff,INCOMING_SETTING_STRING_SIZE);
HAL_UART_Transmit_DMA(&huart2, tx_buff, OUTGOING_SETTING_SIZE);

UART设置

代码语言:javascript
运行
复制
static void MX_USART2_UART_Init(void)
{

  huart2.Instance = USART2;
  huart2.Init.BaudRate = 9600;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }
}

RX回调

代码语言:javascript
运行
复制
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    ProcessSerialSettings();

    HAL_UART_Transmit_DMA(&huart2,(uint8_t *)'ACK\n',5);

    memset(rx_buff,0,sizeof(rx_buff));
}

我确信我一定遗漏了什么,因为它看起来太简单了。毫无疑问,当"processSerialSettings“函数每次更新一些变量时,数据会继续进入设备。我想要接收设置字符串,更新几个变量并返回确认。

经过进一步的调试,我现在知道端口的状态是繁忙的,然而,当我没有通过TX线路发送任何东西时,怎么会出现这种情况?如果我改变发送DMA模式为循环,它基本上是垃圾邮件串行端口,直到我的终端窗口崩溃。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 17:07:38

通过一起删除传输DMA并使用以下命令进行传输,解决了此问题:

HAL_UART_Transmit(&huart2,(uint8_t *)‘确认\n’,5);

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59989350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档