做电池网站的引导页,沈阳全网推广公司哪家好,上海装修设计公司排名,建网站设置网站首页一、基础配置
Universal Asynchronous Receiver Transmitter
异步#xff0c;串行#xff0c;全双工
TTL电平 #xff1a;高电平1 低电平0
帧格式#xff1a; 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD#xff0c;…一、基础配置
Universal Asynchronous Receiver Transmitter
异步串行全双工
TTL电平 高电平1 低电平0
帧格式 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD那么就自动给PA9和PA10设置引脚了。但如果没有设置默认配置的是PC4和PC5。 二、串口发送
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t
Timeout)
功能串口发送数据
参数UART_HandleTypeDef *huart UART句柄 huart1uint8_t *pData 需要发送的数据uint16_t Size 发送的字节数uint32_t Timeout 最大发送时间发送数据超时退出发送
案例每次上电后发送 Hello World!
/* USER CODE BEGIN Includes */
#include stdio.h //使用sprintf()
#include string.h // 使用strlen()
/* USER CODE END Includes *//* USER CODE BEGIN PV */
char tx_buf[20];
/* USER CODE END PV *//* USER CODE BEGIN 2 */sprintf(tx_buf,Hello World!\r\n);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);/* USER CODE END 2 */ 三、串口接收
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
功能串口中断接收函数
参数UART_HandleTypeDef *huart UART句柄 huart1uint8_t *pData 接收到的数据存放地址uint16_t Size 发送的字节数 为1每次中断只能接收一个字符 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
功能中断回调函数串口中断接收完之后会进入该函数。这是一个空函数用户可以重写该函数在函数里实现相应的操作。
1. 接收单个字符
案例:接收到 O 时点亮LED1并发送 LED1 Open! ,接收到 C 时熄灭LED1并发送 LED1 Close!
char tx_buf[20];
uint8_t rx_data;/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(huart1,rx_data,1); //打开接收中断
/* USER CODE END 2 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(rx_dataO){ucled0x01;sprintf(tx_buf,LED1 Open!\r\n);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}if(rx_dataC){ucled0x00;sprintf(tx_buf,LED1 Close!\r\n);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}HAL_UART_Receive_IT(huart1,rx_data,1);
} 2. 接收定长字符串 void Uart_Proc(void)
{if(rx_count4){if( strcmp(rx_buf,LEDO)0 ){ucled0x01;sprintf(tx_buf,LED1 Open!\r\n);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}if( strcmp(rx_buf,LEDC)0 ){ucled0x00;sprintf(tx_buf,LED1 Close!\r\n);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);}rx_count0;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);
} 3. sscanf() 解析字符串 int sscanf(const char* str, const char* format, ...);
参数str要解析的输入字符串。format格式字符串指定要匹配的格式规则。...可变参数列表用于接收解析后的数据。 void Uart_Proc(void)
{ //22个字符if(rx_count22){//解析rx_buf然后用三个参数接收数据sscanf(rx_buf,%4s:%4s:%12s,car_type,car_num,car_time);sprintf(tx_buf,car_type:%4s\r\n,car_type);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);sprintf(tx_buf,car_num:%4s\r\n,car_num);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);sprintf(tx_buf,car_time:%12s\r\n,car_time);HAL_UART_Transmit(huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);rx_count0;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);
}