前言
一、配置
二、使用步骤
1.串口发送
代码逻辑
char tx_buf[20];
LCD_Init();
LCD_Clear(White);
LCD_SetBackColor(White);
LCD_SetTextColor(Black);
sprintf(tx_buf,"jin ke\r\n");
HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
效果展示
2.串口接收单个字符
案例:接受到O时,点亮LED1并发送LED1OPEN!,接受到C时,熄灭LED1并发LED1CLOSE!
代码逻辑
uint8_t rx_data;
中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(rx_data=='O')
{led_show(2,1);
sprintf(tx_buf,"led1OPEN!");
HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
}
if(rx_data=='C')
{led_show(2,0);
sprintf(tx_buf,"led1CLOSE!");
HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
}
HAL_UART_Receive_IT(&huart1,&rx_data,1);
}
3.串口接受字符串
代码逻辑
字符串函数
void uart_proc(void)
{
if(rx_count==4)
{
if(strcmp(rx_buf,"LEDO")==0)
{
led_show(1,1);
sprintf(tx_buf,"led1OPEN!\r\n");
HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
}
if(strcmp(rx_buf,"LEDC")==0)
{
led_show(1,0);
sprintf(tx_buf,"led1CLOSE!\r\n");
HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);
}
rx_count=0;
memset(rx_buf,0,20);
}
}
中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
rx_buf[rx_count++]=rx_data;
HAL_UART_Receive_IT(&huart1,&rx_data,1);
}
声明
/* USER CODE BEGIN PV */
uint8_t key_rval;
char tx_buf[20];
uint8_t rx_data;
char rx_buf[20];
uint8_t rx_count;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void uart_proc(void);
/* USER CODE END PFP */
代码开源
通过网盘分享的文件:12-TEST6-串口通信(接收和发送多个字符).zip
链接: https://pan.baidu.com/s/1IoKdqO9sgooXArpK1wgjyg?pwd=0820 提取码: 0820