1.STM32CubeMX配置
首选也是只能选PA9\PA10,原因无他,别的都被占用了?(不确定昂)
2.代码
(1)代码发送组成部分
void Task_Time(void)
{
if(++key_count==10){key_count=0;key_scan=1;}
if(++uart_count==1000){uart_count=0;uart_send=1;}
if(++lcd_count==100){lcd_count=0;lcd_show=1;}
}
void UART_Send(void)
{
if(uart_send==1)
{
uart_send=0;
sprintf((char*)TX," HELLO WORLD\r\n");
HAL_UART_Transmit_DMA(&huart1,(uint8_t*)TX,strlen((char*)TX));
}
}
void Task_List(void)
{
Key_Scan();
UART_Send();
LCD_Show();
Uart_Recv();
}
LCD_DisplayStringLine(Line4,(uint8_t*)TX);
(2)代码接受组成部分
需要在串口中断处理上方加if语句
在usart.c中添加dma回调函数,并在main.h中添加函数名,
处理函数
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);//Çå³ýÖжÏ
HAL_UART_DMAStop(&huart1);//Í£Ö¹DMA
HAL_UART_IdleCpltCallback(&huart1);
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)
{
re_count =20- __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
re_count = 0;
HAL_UART_Receive_DMA(&huart1,rx,20);
rx_deal = 1;
}
if(rx_deal==1)
{
rx_deal=0;
HAL_UART_Transmit_DMA(&huart1,rx,strlen((char*)rx));
}
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
__HAL_UART_CLEAR_IDLEFLAG(&huart1);