STM32 串口的使用–以串口调试助手为例

@(STM32基本外设)

串口介绍

USART ((Universal Synchronous Asynchronous Receiver and Transmitter, 通用同步异步收发器), 是一 个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同 步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要接SCLK即时钟线,我们平时用的串口通信基本都是 UART。USART 支持使用中断和DMA,可实现高速数据通信。

  1. 引脚
    TX:发送数据输出引脚。USB转TTL模块的TXD接单片机的RX引脚。
    RX:接收数据输入引脚。USB转TTL模块的RXD接单片机的TX引脚。
    VCC:供电,接单片机的3.3V或5V引脚。
    GND:地端,与单片机共地。

代码说明

  1. 图形配置

异步收发模式,八位字长,一位停止位,无奇偶校验位。
2. 重要语句
发送数据
HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100)
功能为由单片机向串口即电脑发送数据,可在串口调试助手的接收区查看
接收数据
HAL_UART_Receive_IT(&huart1, Receive_Databuf, 10);
功能为单片机接收从串口即电脑发来的数据,可借助串口调试助手的发送区向单片机发送数据
注意:串口调试助手发送数据会自动给数据末位加上**‘\r\n’**,当发送数据的长度(包括换行符在内)超过HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100)中设定的SIZE时,超过的数据无法接收;当长度(包括换行符在内)少于SIZE时,无法触发中断。可将该语句写在接收中断里,这样接收的数据不会丢失和混乱。
3. 具体代码
1. 中断回调函数
发送

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100);//单片机向电脑发送数据
  ms_Delay(100);
  m++;

}

接收

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  for(i=0;i<10;i++)
  {
	  printf("%c",Receive_Databuf[i]);
  }
  printf("Finished\r\n");
  ms_Delay(300);
  n++;
  HAL_UART_Receive_IT(&huart1, Receive_Databuf, 10);
}
  1. 中断里使用的延时函数
void ms_Delay(uint16_t t_ms)
{
	uint32_t t=t_ms*3127;
	while(t--);
}
  1. 变量定义
uint8_t Transmit_Databuf[100];
uint8_t Receive_Databuf[10];
uint8_t n,m;
uint16_t i;

参考链接:https://blog.csdn.net/u010160335/article/details/84679260


DMA方式

  1. 图形配置

  1. 具体代码
    Normal模式下,只需将
    HAL_UART_Transmit_IT(&huart1, Transmit_Databuf, 100);
    替换为
    HAL_UART_Transmit_DMA(&huart1, Transmit_Databuf, 100);
    中断回调函数不变。
    Circular模式下,无需再在中断中添加
    ``HAL_UART_Transmit_DMA(&huart1, Transmit_Databuf, 100);`,
    因为一旦开始发送数据便会开启循环。
物联沃分享整理
物联沃-IOTWORD物联网 » STM32 串口的使用

发表评论