简介
STM32CubeMX串口的操作,以及HAL库串口的配置,基于HAL库实现Printf函数功能重定向,UART中断接收
一、串口的基础知识
1.并行通信与串行通信
2. 单工 :只有一个方向,要么发送数据,要么接受数据
半双工:可以发送也可以接受,但是在某一时刻只能处在一种状态,例,RS485
全双工: 在任意的时刻,都可以同时进行发送数据和接受数据
3.异步串行通信:通信双方在没有同步时钟的前提下,将一个字符按位进行传输的通信方式
4.在没有同步时钟的前提下,怎么准确的接受? 波特率:每秒传输的二进制数,如9600bps
二、STM32CubeMx中关于USART的配置
1.界面配置
2. HAL库中串口发送的重要函数
3. HAL库中串口接收的重要函数
三、代码实现部分
/* USER CODE BEGIN 0 */
uint8_t Tx_strl[] = "hello world!\r\n";
uint8_t Tx_str2[] = "LED1 Open!\r\n";
uint8_t Tx_str3[] = "LED1 Closed!\r\n";
uint8_t Rx_dat = 0;
//串口接收的回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if( huart == &huart1 )
{
if(Rx_dat == 0xa1)
{
HAL_UART_Transmit(&huart1,Tx_str2 ,sizeof (Tx_str2),10000);
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
else if(Rx_dat ==0xa2)
{
HAL_UART_Transmit(&huart1,Tx_str3 ,sizeof (Tx_str3),10000);
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
}
}
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000); //发送
HAL_UART_Receive_IT(&huart1,Rx_dat,1); //接收
/* USER CODE END 2 */
注:本文有参考b站小蜜蜂老师,他专门针对一些比赛讲解的stm32简单易懂,推荐大家观看。