STM32的串口数据收发基础学习笔记

一、串行接口相关知识点

并行通信、串行通信的概念。

单工、半双工、全双工的概念

异步串行通信:通信双方在没有同步时钟的前提下,将一个字符(包括特定的附加位)按位进行传输的通信方式。

波特率:每秒钟传输的二进制位数,如9600bps

TTL电平<—->RS232:MAX3232 SP3232

串口<———>USB接口:CH340 CP2012

STM32芯片的串口UASRT功能十分强大,但对于日常编程而言,使用最多的还是异步串行通信。

串口1:USART1_TXPA9复用,USART1_RXPA10复用。

串口2:USART2_TXPA2复用,USART2_RXPA3复用。

二、HAL库中串口发送的重要函数

查询方式,阻塞式发送函数(初学者,推荐使用)   
HAL_StatusTypeDef  HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size, uint32_t Timeout);

参数1:huart,串口实例的指针。
参数2:*pData,待发送数据缓冲区的指针。
参数3:Size,待发送数据的字节数。
参数4:Timeout,超时时间值。
返回值:HAL_StatusTypeDef,函数执行状态。
typedef enum
{
  HAL_OK       = 0x00U,
  HAL_ERROR    = 0x01U,
  HAL_BUSY     = 0x02U,
  HAL_TIMEOUT  = 0x03U
} HAL_StatusTypeDef;

中断方式,非阻塞式发送函数
HAL_StatusTypeDef  HAL_UART_Transmit_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size);
参数1:huart,串口实例的指针。
参数2:*pData,待发送数据缓冲区的指针。
参数3:Size,待发送数据的字节数。
返回值:HAL_StatusTypeDef,函数执行状态。

串口发送完毕中断回调函数  
void HAL_UART_TxCpltCallback(UART_HandleTypeDef  *huart);
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef  *huart)
应用举例:使用非阻塞式的串口发送函数,将发送缓数组dat_Txd中的前5个数据发送到USART1,在数据发送完成后,翻转PB9引脚的输出电平。   
//使用中断,非阻塞方式 
HAL_UART_Transmit_IT(&huart1,  dat_Txd, 5);

void HAL_UART_TxCpltCallback(UART_HandleTypeDef  *huart) 
{         
    if(huart->Instance == USART1);         
    {             
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);    
    }
}

 
//使用查询,阻塞方式 
HAL_UART_Transmit(&huart1,  dat_Txd, 5, 10000);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);

三、HAL库中串口接收的重要函数

查询方式,阻塞式接收函数
     
HAL_StatusTypeDef  HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData,  uint16_t Size, uint32_t Timeout);
参数1:huart,串口实例的指针。
参数2:*pData,数据接收据缓冲区的指针。
参数3:Size,待接收数据的字节数。
参数4:Timeout,超时时间值。
返回值:HAL_StatusTypeDef,函数执行状态。

非阻塞式接收函数(推荐使用)
HAL_StatusTypeDef  HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size);
参数1:huart,串口实例的指针。
参数2:*pData,数据接收据缓冲区的指针。
参数3:Size,待接收数据的字节数。
返回值:HAL_StatusTypeDef,函数执行状态。

串口接收完毕中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart);
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef  *huart);
应用举例:使用非阻塞式的串口接收函数,接收USART1中的一个字节,将其保存在dat_Rxd变量中,在数据接收完成后,判断该字节,若为0x5A,则翻转PB8引脚的输出电平。
//使用中断,非阻塞方式
HAL_UART_Transmit_IT(&huart1,  &dat_Rxd, 1);
  
void HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)    
{        
    if(huart->Instance == USART1)    
    {       
        if(dat_Rxd == 0x5A)      
            HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
    }
}

参考网址:https://www.xmf393.com/2020/02/16/2020021606/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值