用CubeMX对F103VET6进行配置和自动生成代码,只需额外添加3条指令即可实现连续发送。
CubeMX配置:对RCC、UART、GPIO、DMA进行了常规配置,生成代码后在main.c的USER CODE BEGIN 2后插入:
uint8_t TxD_Buf[32]="Hello,STM32F103VET6!\r\n";
在main.c的USER CODE END WHILE前插入:
HAL_Delay(100);
HAL_UART_Transmit_DMA(&huart1,TxD_Buf,24);
编译、下载、运行后即可发送字符串,但只发送一次即停止。
原因:函数HAL_UART_Transmit_DMA内部有一状态:huart->gState阻碍了后续发送,一般由中断或其他程序对其复位,试着在此函数的return前插入“huart->gState = HAL_UART_STATE_READY;”指令,程序即可连续发送。
注:函数HAL_UART_Transmit_DMA()在stm32f1xx_hal_uart.c中,这是ST提供的HAL库函数,一般不应随意修改!!