gpt4 book ai didi

interrupt - 无法通过 UART 传输每个字符

转载 作者:行者123 更新时间:2023-12-03 08:03:49 25 4
gpt4 key购买 nike

我正在使用 stm32f0 MCU。

我想将从 uart 接收到的每个字节传输到 uart 中。我正在从 uart 接收到的每个字节上启用中断。

我的代码很简单。

uint8_t Rx_data[5]; 

//Interrupt callback routine
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1) //current UART
{
HAL_UART_Transmit(&huart1, &Rx_data[0], 1, 100);
HAL_UART_Receive_IT(&huart1, Rx_data, 1); //activate UART receive interrupt every time on receiving 1 byte
}
}

我的 PC 将 ASCII 12345678 传输到 stm32。如果事情按预期工作,PC 应该会收到 12345678 回。但是,PC 会改为接收 1357。代码有什么问题?

最佳答案

重新启用中断可能效率低下。通过一些修改,可以保持中断处于事件状态,而无需重新编写处理程序。请参阅下面从 stm32cubemx 生成器更改的示例。

/**
* @brief This function handles USART3 to USART6 global interrupts.
*/
void USART3_6_IRQHandler(void)
{
InterruptGPS(&huart5);
}

void InterruptGPS(UART_HandleTypeDef *huart) {
uint8_t rbyte;
if (huart->Instance != USART5) {
return;
}
/* UART in mode Receiver ---------------------------------------------------*/
if((__HAL_UART_GET_IT(huart, UART_IT_RXNE) == RESET) || (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) == RESET)) {
return;
}
rbyte = (uint8_t)(huart->Instance->RDR & (uint8_t)0xff);
__HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);

// do your stuff

}

static void init_gps() {
__HAL_UART_ENABLE_IT(&huart5, UART_IT_RXNE);
}

关于interrupt - 无法通过 UART 传输每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37297318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com