基于HAL库的串口通信【嵌入式】

一、RS-232串口通信协议

1.串口通讯协议

串口通讯 (SerialCommunication)是一种设备间非常常用的串行通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。
通讯协议,我们以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。

2.协议层

串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD
接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

  1. 波特率
    本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号 ( 如前面讲解的 DB9接口中是没有时钟信号的) ,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图 21-6 中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、 9600 、 115200 等。
  2. 通讯的起始和停止信号
    串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5 、 1 、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
  3. 有效数据
    在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5 、 6 、 7 或 8 位长。
  4. 数据校验
    在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验 (odd)、偶校验 (even) 、 0 校验 (space) 、 1 校验 (mark) 以及无校验 (noparity) 。
    奇校验要求有效数据和校验位中“ 1 ”的个数为奇数,比如一个 8 位长的有效数据为:01101001,此时总共有 4 个“ 1 ”,为达到奇校验效果,校验位为“ 1 ”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。
    偶校验与奇校验要求刚好相反,要求帧数据和校验位中“ 1 ”的个数为偶数,比如数据帧:11001010 ,此时数据帧“ 1 ”的个数为 4 个,所以偶校验位为“ 0 ”。0 校验是不管有效数据中的内容是什么,校验位总为“ 0 ”, 1 校验是校验位总为“ 1 ”。

二、RS232电平与TTL电平转换

在这里插入图片描述1 载波检测 DCD
2 接收数据 RXD
3 发送数据 TXD
4 数据终端准备好 DTR
5 信号地 SG
6 数据准备好 DSR
7 请求发送 RTS
8 清除发送 CTS
9 振铃提示

接口电平

RS232采用负逻辑电平

-15~-3:逻辑1;

+15~+3:逻辑0;

电压值通常在7V左右

三、任务目标

完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:

1)设置波特率为115200,1位停止位,无校验位;

2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

四、使用HAL库完成

选择STM32F103C8开发板,双击配置
配置时钟,使用外部高速时钟:
在这里插入图片描述

设置USART2:
在这里插入图片描述点击Clock Configuration选择HSEPLLCLK
在这里插入图片描述
设置中断:
在这里插入图片描述为创建的项目起个名,并选择MDK,之后打包下载
在这里插入图片描述

打开项目之后在main.c中的while循环中添加代码:

char data[]="hello windows!\n";
		HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);
		//高电平点亮A12
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET);
		
		HAL_Delay(100);
		//低电平熄灭A12
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET);
		HAL_Delay(900);

编译成功后利用串口烧录程序
在这里插入图片描述打开串口调试助手:
在这里插入图片描述

可以看到我们只是再main函数里面调用了HAL_UART_Transmit函数,就实现了串口通信

五、参考文献

RS232电平与TTL电平转换

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值