串口收发参考资料:https://www.xmf393.com/2020/02/16/2020021606/
串口收发详解:https://blog.csdn.net/Firefly_cjd/article/details/109529573
HAL库配置串口:https://blog.csdn.net/m0_70748084/article/details/124930320
关于HAL库的基本配置 如图
跟着自己需要的情况来设置,主要是串口是否选择异步还是同步和是否串口需要应用到中断
分割线///分割线/分割线
发送函数
原理
发送有分阻塞发送和非阻塞发送,在数据发送完成之后我需要做的是使用回调函数
参考资料:
阻塞和非阻塞区别:http://news.eeworld.com.cn/mcu/ic520335.html
USART全称:通用异步同步收发器
异步 = 非阻塞 :发送端口(TX)发送一段数据,接收端(RX)无需响应可以让发送端继续的发送数据
UART全称:通用同步收发器
同步 = 阻塞:发送端口(TX)发一段数据,接收端得(RX)回应才能继续发送下一个数据
阻塞式发送函数
uint8_t TX[]="asdasdasd";
HAL_UART_Transmit(&huart1,TX,sizeof(TX),10000);//(串口结构体,发送的数据,发送长度,超时)
分割线///分割线/分割线
非阻塞接收函数
图片的发送都改为接收
非阻塞接收函数
uint8_t rx_data = 0;
HAL_UART_Receive_IT(&huart1 , &rx_data ,1);//(定时器时令,接收到的字节存放,1个字节)
接收函数要在回调函数处理
HAL_UART_Receive_IT(&huart1 , &rx_data ,1);//(定时器时令,接收到的字节存放,1个字节)
接收回调函数处理
//串口发送0X1a点亮LED
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
char data=0;
if(huart->Instance == USART1)
{
if(data == 0x1a)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
}
}
}
记一下
HAL_UART_RxHalfCpltCallback
这个函数是接收一半然后进行中断的一个函数,后续用到会更新