STM32点亮LED灯(标准库)

1. 串口通讯协议简介

串口通讯是一种设备间非常常用的串行通讯方式,因为它简单 便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通 讯方式输出调试信息。

在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和 片上外设;STM32 标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有 机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑, 统一收发双方的数据打包、解包标准。

1.1 物理层(RS-232 标准)

RS-232 标准主要规定了信号的用途、通讯接口以及信号的电平标准。

使用 RS-232 标准的串口设备间常见的通讯结构见下图。
在这里插入图片描述

在上面的通讯方式中,两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接, 串口信号线中使用“RS-232标准”传输数据信号。由于 RS-232电平标准的信号不能直接被 控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的 “TTL 标准”的电平信号,才能实现通讯

1.1.1 RS_232电平与TTL电平的区别

通讯标准电平标准(发送端)
5V TTL逻辑 1:2.4V-5V
逻辑 0:0~0.5V
RS-232逻辑 1:-15V~-3V
逻辑 0:+3V~+15V

使用 RS232 与 TTL 电平校准表示同一个信号时的对比见下图。

在这里插入图片描述

1.1.2 USB/TTL转232"模块(以CH340芯片模块为例)的工作原理

1. 模块特点

CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。

  • 全速USB驱动,兼容USB2.0
  • 硬件全双工串口,内置收发缓冲区
  • 支持波特率50bps~2Mbps
  • 输出TTL电平3.3V,兼容5V的IO电平
2. 模块接口引脚
符号类型描述
TXD输出串行数据输出口
RXD输入串行数据输入口
GND电源接地引脚
3V3电源3.3V电源输出引脚(最高250mA)
5V电源5V电源输出引脚(最高500mA)
DTS输出MODEM联络输出信号,请求发送
DTR输出MODEM联络输出信号,数据终端就绪
3. 硬件设计

硬件电路设计主要介绍以CH340C芯片为核心,设计出一个USB转TTL的模块(也就是该模块)。主要包括电源的设计、功能的设计等。

模块原理图

在这里插入图片描述

模块的USB转TTL电路设计

CH340C芯片的D-,D+与USB的D-,D+连接到一起作为USB电平的信号连接,同时引出TTL电平信号的接口TXD与RXD,还有两个MODEM输出信号接口RTS与DTR。

模块的电源设计

在CH340C的引脚功能表中红色部分是电源相关的引脚。对于不同电压供电系统的TTL电平是不一样的,大部分的系统是5V或3.3V供电。一般5V的系统是兼容3.3V的TTL电平的,但是3.3V系统是不兼容5V的。为了是能兼容3.3V与5V的系统,模块的电源使用3.3V电源供电。

电脑的USB接口电源输出时5V,最大电流是500mA,在电路中为了防止意外的误操作,在5V的电源端加了一个0.5A,6V的保险丝F1,当电压超过6V或电流超过0.5A保险丝就会断开对电路进行保护。

USB输出的电压是5V,而CH340C的芯片采用3.3V供电,为了使模块的供电为3.3V,在电路中加入了一个LDO(低压差线性稳压器)U2,它可以把5V稳压成3.3V,然后对CH340C进行供电(根据手册要求V3引脚也要接3.3V的电源)。每一个电源的输入端都会加上一个0.1uF的滤波电容。

在模块引出的接口中:

  • 5V:USB的电源输出,电压为5V,电流最大可达500mA
  • 3V3:5V经过LDO稳压后得到的3.3V电压,电流最大可达25mA
  • GND:USB的GND
模块的指示灯电路设计

为了检测模块是否通电正常,在5V的输入端设计了一个指示灯LED1(红色),该灯亮表示模块已经上电。通讯时需要了解数据的收发情况,在TXD,RXD数据接口中分别接入了LED2(蓝色),LED3(绿色)指示灯。当模块接收到数据时,RXD的指示灯就会亮;模块发送数据时TXD的指示灯就会亮。另外引出的RTS与DTR信号接口也设计了LED4(黄色),LED5(绿色)指示灯。

因为TXD,RXD,RTS,DTR接口都是从CH340C芯片管脚印出来的,CH340C是3.3V供电,所以设计对应的指示灯的电源应该选择3.3V。TXD与RXD在CH340C中空闲时(没有发生数据传输)是高电平的,对应的指示灯状态时灭的,只有发生数据传输时指示灯才会亮。RTS与DTR接口时CH340C的MODEM输出信号接口,对应的指示灯在用不同的上位机软件它们的亮灭是不确定的。

1.2 协议层

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

在这里插入图片描述

1.2.1 波特率

指的是每秒传输的位数。波特率越高,数据传输速度越快。两个通讯设备之间需要约定好波特率,即每个码元的长度, 以便对信号进行解码,用虚线分开的每一格就是代表一个码元。常见的波特率为 4800、9600、115200 等。

1.2.2 通讯的起始和停止信号

串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一 个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示, 只要双方约定一致即可。

1.2.3 有效数据

在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效 数据的长度常被约定为 5、6、7 或 8 位长。

1.2.4 数据校验

在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰 导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验 (odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity)。

2.1 标准库方式点亮LED灯

其他驱动文件的添加请参考文章结尾的资料链接

代码块

#include "stm32f10x.h"                 


	void Delay(__IO u32 nCount)
{
      for(;nCount !=0;nCount--);
}
int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启A口的时钟
	//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;  //用的GPIO C的13号引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure); 


	while(1)
	{
//以下可以自己定义
	GPIO_Write(GPIOA, ~0x0001);
  Delay(720000); 
	GPIO_Write(GPIOA, ~0x0002);
	Delay(720000); 
	GPIO_Write(GPIOA, ~0x0004);
	Delay(720000); 
	}
	
}

实验结果:

在这里插入图片描述

波形分析:

在这里插入图片描述

通过波形可知,与LED灯的亮灯次序一致。

总结

学习到了用除寄存器以外的标准库来点亮LED灯,总体来说标准库相对简单一些。

总结

学习到了用除寄存器以外的标准库来点亮LED灯,总体来说标准库相对简单一些。

参考资料

https://blog.csdn.net/qq_58804208/article/details/127457311
https://blog.csdn.net/weixin_63019977/article/details/133749827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值