1. CubeMX配置——UART
2. CubeMX配置——DMA
3. CubeMX配置——设置LL库
4. CubeMX配置——设置中断
不启动UART中断
5. 添加自定义代码
在usart.c程序中添加代码,注意字段位置
/* USER CODE BEGIN 0 */
uint8_t uart_tx_data[100];
uint8_t uart_rx_data[100];
uint8_t uart_tx_len;
/* USER CODE END 0 */
/* USER CODE BEGIN USART1_Init 1 */
LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)uart_tx_data);
LL_DMA_SetPeriphAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)(&USART1->DR));
LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 7);
LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);
LL_DMA_EnableIT_TC(DMA2, LL_DMA_STREAM_7);
LL_DMA_EnableIT_TE(DMA2, LL_DMA_STREAM_7);
LL_USART_EnableDMAReq_TX(USART1);
/* USER CODE END USART1_Init 1 */
在中断程序stm32f4xx_it.c添加代码,清除指定标志位
void DMA2_Stream7_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
if(LL_DMA_IsActiveFlag_TC7(DMA2))
{
LL_DMA_ClearFlag_TC7(DMA2);
}
if (LL_DMA_IsActiveFlag_TE7(DMA2))
{
LL_DMA_ClearFlag_TE7(DMA2);
}
/* USER CODE END DMA2_Stream7_IRQn 0 */
/* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
/* USER CODE END DMA2_Stream7_IRQn 1 */
}
在主程序main.c添加代码,注意字段位置
/* USER CODE BEGIN 0 */
uint8_t Uart1_DATA[] = "12345\r\n";
extern uint8_t uart_tx_data[100];
extern uint8_t uart_rx_data[100];
extern uint8_t uart_tx_len;
/* USER CODE END 0 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
LL_DMA_ClearFlag_TC7(DMA2);//
memcpy(uart_tx_data, Uart1_DATA, 7);
LL_DMA_DisableStream(DMA2, LL_DMA_STREAM_7);//
LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)uart_tx_data);//
LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 7);//
LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);//
while (1)
{
//HAL_UART_Transmit_DMA(&huart1,Uart1_DATA,7);
//HAL_UART_Transmit(&huart1,Uart1_DATA,7,100);
LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7); //å¯åŠ¨DMAä¼ è¾“
HAL_Delay(1000);
//__HAL_UART_RESET_HANDLE_STATE(&huart1);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
6. 串口接收到数据