【发布时间】:2022-12-10 14:34:27
【问题描述】:
我正在使用 STM32F103RB 板,我想简单地将我通过串行端口从计算机收到的所有内容回显到该端口。我必须使用 UART 和 DMA 来完成。我已经在正常模式下使用 CubeMX 在 USART2_RX 上设置了 DMA。我的问题是 HAL_UART_RxCpltCallback 只被调用一次。有趣的是,我在 PC 端得到了响应,但有额外的 0xFC 字节。之后,控制器停止对通过串口发送的新数据做出反应,直到我用 usb 拔下并重新插入控制器时才会这样做。这是回调和主要功能的代码:
#define BUF_SIZE 16
uint8_t RX_BUF[BUF_SIZE] = {0};
uint8_t TX_BUF[BUF_SIZE] = {0};
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit(&huart2, RX_BUF, BUF_SIZE, 1000);
HAL_UART_Receive_DMA(&huart2, RX_BUF, BUF_SIZE);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
HAL_UART_Receive_DMA(&huart2, RX_BUF, sizeof (RX_BUF));
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
编辑:我正在尝试通过 USB-C 加密狗在 Mac 上执行此操作。这可能是问题所在吗?
【问题讨论】:
标签: stm32 uart dma stm32f1 stm32cubemx