区分:串口,COM口,UART,USART
https://blog.csdn.net/qq_26904271/article/details/79829363
串口通信
https://blog.csdn.net/zxh1592000/article/details/78656609
串口:传输一个字节(8个位)的数据时,将8个位排好队,逐个地在1条连接线上传输,串行接口包括:USB,I2C,SPI,RJ-45,UART,USART等。
并口:将8个位一字排开,分别在8条连接线上同时传输。 在相同的数据传输速率下,并口的确比串口更快,但由于并口的各个连接线之间容易互相干扰,高速情况下难以同步各连接线的数据,而且硬件成本也相对串口更高(线多)
COM口:电脑上的异步串行通信接口,有RS-232标准的COM口,也称DB9接口
单片机的串口:
UART使用异步通信,
USART既可异步通信,也可同步通信。当USART使用异步通信时,就变成了UART。
同步通信和异步通信的区别是:时钟线的有无。
同步通信有时钟线,收发双方通过统一的时钟来确定何时进行数据的传输,如I2C和SPI。异步通信没有时钟线,只能在数据的头和尾加入标志位来区分不同的数据帧,接收数据之前也要预先知道波特率的大小,传输效率比同步通信要低。
RS-232:是一个串行通信接口标准,它规定了逻辑“1”为-3 ~ -15V,逻辑“0”为+3 ~ +15V,符合该标准的串口也叫RS-232串口,比如电脑的COM口
TTL电平:该电平的逻辑“1”为+5V,逻辑“0”为0V,称为TTL串口。
“DB9接口”之间通过串口信号线建立起连接,串口信号线使用”RS-232标准“传输数据信号,这些信号通过记过电平转换芯片转换成控制器能识别的TLL标准的电平信号,才能实现通信。
单片机与电脑的连接:
既然单片机有串口(UART/USART),电脑也有串口(COM口),那么两者就可以通过串口进行通信。
如果电脑有实体COM口,由于COM口使用的RS-232电平跟单片机的UART/USART使用的TTL电平不一样,这时就需要使用MAX232之类的电平转换芯片,将TTL电平转换成RS-232电平,连接示意如下:
电脑COM口 <—> MAX232 <—> 单片机UART/USART
如果电脑没有COM口,就要通过CH340之类的USB转TTL串口芯片,来实现用USB模拟COM口,这样电脑的USB口就变成了一个TTL串口,可以跟单片机的UART/USART通信,连接示意如下:
电脑USB口 <—> CH340 <—> 单片机UART/USART
// 配置USART_TX
GPIO_USART_TX_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_USART_TX_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_USART_TX_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_USART_TX_InitStructure);
// 配置USART_RX
GPIO_USART_RX_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_USART_RX_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_USART_RX_InitStructure);
TX,就是输出单元,指的是单片机用来给电脑(或其他设备)发送数据的寄存器。
单片机上的TX位于Pin9,是Pin9的复用功能,然后速度设为50MHz,这个可以变更,但没有必要。速度快一点不是很好吗?
这三项配置好后,就可以调用GPIO_Init()来将其配置到单片机里面了。
RX,相应的就是输入单元。
相似的,它位于Pin10,模式是浮动输入(当然了……)。
输入单元不用配置速度,因为它是被动输入,没有速度这种说法……
同样,调用GPIO_Init()函数配置一下。
GPIO_SetBits和GPIO_ResetBits
前者将引脚置1,后者置0
对单个IO口置0或1:
GPIO_WriteBit(GPIOA,GPIO_Pin_8 , 0);
同时对多个IO口置1:
GPIO_SetBits(GPIOD,GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6);