STM32通信接口学习笔记

一、大致了解通信接口专有名词

USART: TX(Transmit Exchange)数据发送脚,RX(Receive Exchange) 数据接收脚

I2C:SCL(Serial Clock) 是时钟,SDA(Serial Data)是数据

SPI:SCLK(Serial Clock) 是时钟,MOSI(Master Output Slave Input)是主机输出数据脚

        MISO(Serial Input Slave Output) 是主机输入数据脚,CS(Chip Select) 是片选,用于指定通信对象

CAN: CAN_H,CAN_L这两个引脚是差分数据脚,用两个引脚表示一个差分数据
USB: DP(Data Positive) 和DM(Data Minus) 也是一对差分数据脚

数据按照协议的规定在这些引脚上进行输入输出,从而实现通信

双工特性:

全双工:就是指通信双方能够同时进行双向通信,一般来说,全双工通信都有两根通信线

单工是指在数据只能从一个设备到另一个设备,而不能反着来。

时钟特性:

        需要有一个时钟信号来告诉接收方,你什么时候需要采集数据

同步:I2C和SPI有单独的时钟线,所以他们是同步的,接收方可以在时钟信号的指引下进行采样

异步:串口、CAN和USB没有时钟线,所以需要双方约定一个采样频率,这就是异步通信。并且还需要加一些帧头帧尾等,进行采样位置的对齐

电平特性:

单端信号:他们引脚的高低电平都是对GND的电压差,所以单端信号通信的双方必须要共地,就是把GND接在一起,所以USART、I2C、SPI应该再加一个GND引脚,不接GND是没法通信的

差分信号:它是靠两个差分引脚的电压差来传输信号的,在通信的时候,可以不需要GND。使用差分信号可以极大的提高抗干扰特性,所以差分信号一般传输速度和距离都会非常高,性能也好。

设备特性:

点对点通信:USART(串口)、USB。例如老师找你到办公室谈话,直接传输数据就可以了

多设备通信:可以在总线上挂载多个设备。例如老师在教室里,面对所有同学谈话,需要一个寻址的过程,以确定通信的对象。

二、串口通信相关内容


串口的TX、RX、GND是必须要接线的,上面的VCC 如果两个设备都有独立供电,那VCC可以不接,如果(左边是STM32,右边是蓝牙串口)其中一个设备没有供电需要把蓝牙串口的VCC和STM32的VCC接在一起,STM32通过这根线,向右边的子模块供电。

一般直接从控制器里出来的信号,一般都是TTL电平,相同的电平才能互相通信,不同的电平信号需要加一个电平转换芯片,转接一下。

电平标准 :

        TTL电平:+3.3V或者+5V表示1,0V表示逻辑0

在硬件电路上,协议规定是,一个设备使用TX发送高低电平另一个设备使用RX接收高低电平。在线路中,使用TTL 电平。STM32 是3.3V器件。

所以线路对地是3.3V,就代表发送了逻辑1

如果线路对地是0,就代表发送了逻辑0
 

如何用1和0,来组成我们想要发送的一个字节数据

波特率:规定串口通信的速率。异步通信需要约定一个通信速率。

USART和USART使用起来,没啥区别。主要是异步通信

配置数据位长度:一般不需要校验位就是8位,需要校验位就是9位

三、USART 外设使用基本思路

第一步:开启时钟,把需要用的USART和GPIO的时钟打开

第二步:GPIO初始化,把TX配置成复用输出,RX配置成输入

第三步:配置USART,直接使用一个结构体,就可以把这里所有的参数都配置好了

第四步:如果只需要发送功能,就直接开启USART,初始化就结束了。如果还需要接收功能,可能还需要配置中断,那就在开启USART之前,再加上ITConfig和NVIC的代码就行了。

以上就是整个初始化

USART外设的使用思路:

初始化完成之后,如果要发送数据,调用一个发送函数就行了。如果要接收数据,就调用接收的函数。如果要获取发送和接收的状态,就调用获取标志位的函数。

代码配置部分:

void Serial_Init(void)

{

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);



        GPIO_InitTypeDef GPIO_InitStructure;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOA,&GPIO_InitStructure);



        USART_InitTypeDef USART_InitStructure;

        USART_InitStructure.USART_BaudRate=9600;

        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

        USART_InitStructure.USART_Mode=USART_Mode_Tx;

        USART_InitStructure.USART_Parity=USART_Parity_No;

        USART_InitStructure.USART_StopBits=USART_StopBits_1;

        USART_InitStructure.USART_WordLength=USART_WordLength_8b;

        USART_Init(USART1,&USART_InitStructure);

      

        USART_Cmd(USART1,ENABLE);

}

配置引脚部分不清楚的话:参考一下文档的GPIO引脚模式

每个字符对应的编码:

使用串口工具选择的端口,是USB端口(COM3)。

单字节数据传输

很多模块都需要回传大量数据,这时就需要用数据包的形式进行传输,接收部分也需要按照数据包的格式来接收。这样才能接收多字节数据包。数据包的发送和接收是比较常见及重要内容

四、USART串口数据包

   如何规定一个合理的数据包格式+如何收发数据包

数据包的作用是把一个个单独的数据给打包起来,方便我们进行多字节的数据通信。

数据包的任务就是把属于同一批的数据进行打包分割,打包和分析的方法,可以自己来设计,方便接收方进行识别。

通过添加包头和包尾实现数据分割打包的思路。

定义三个状态:

        第一个:等待包头

        第二个:接收数据

        第三个:等待包围

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值