我正在努力让UART在接收后发送数据,对RX使用循环DMA,对TX使用普通模式。
在main(void)中
HAL_UART_Receive_DMA(&huart2,rx_buff,INCOMING_SETTING_STRING_SIZE);
HAL_UART_Transmit_DMA(&huart2, tx_buff, OUTGOING_SETTING_SIZE);
UART设置
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回调
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模式为循环,它基本上是垃圾邮件串行端口,直到我的终端窗口崩溃。
谢谢!
发布于 2020-01-31 17:07:38
通过一起删除传输DMA并使用以下命令进行传输,解决了此问题:
HAL_UART_Transmit(&huart2,(uint8_t *)‘确认\n’,5);
https://stackoverflow.com/questions/59989350
复制相似问题