如果不想看的可以直接使用git把我的代码下载出来,里面工程挺全的,后期会慢慢的补注释之类的
如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用
git的使用(下载及上传_git如何下载文件_八月风贼冷的博客-优快云博客
主要完成的这两个工作
1:串口发送
2:串口收发
本篇为单字节的收发,如果是需要传输modbus通信协议那样的数据包请去这里看多字节的收发
stm32f103串口多字节接收_stm32串口接收多个字节_是小刘不是刘的博客-优快云博客
目录
1)发送一个0x55(起始位为低,低位先行0x55最后高位结束)
1:串口理论部分
1:通信的目的和通讯协议·
通讯协议有很多,USART、IIC、SPI、CAN这些都是已经约定好了的协议,通过时序图可以看出协议的要求,然后根据这些要求来进行代码的编写。
异步与双工:异步或同步:同步就是两个设备通过时钟线来协议通讯。
异步就是不需要时钟线的参与,一般都有波特率的参与。
全双工半双工:全双工设备都有两根通讯线,收发互不影响。
半双工发的时候不能同时接收,收的时候不能同时发。
2、串口通信
一些设备需要通过stm32的USART外设与其它设备进行通讯,调试设备的时候也能直接通过串口助手打印信息,可以直接打印没有使用屏幕调试那么麻烦,有时候也比打断点直观。
3、硬件接线
TX与RX需要交叉接TX和RX是相较于地线的电平,所以需要供地,如果两个设备的供地不一样是无法进行通讯的。
比如单片机与电脑通讯,就需要使用一个ch340将USB转为串口通讯通讯,就像上面的第一张图,usb转串口模块,一端接usb一端接单片机的TX和RX就可以实现单片机与串口通讯。
4、电平标准
上面写了电平标准不一致需要加入电平转换芯片,一般我们使用的就是TTL电平,但是在工业控制一些环境会使用到232或者485标准,小型器件一般只使用TTL。
如果需要485或者232的则需要购买TTL转485或者232的转换芯片。
5、串口参数及时序
波特率:每秒传输码元的个数,一个码元在二进制的情况下就是一个bit,波特率与比特率转换公式Rb = RB log2M (其中M是进制数)在m等于2的情况下,波特率等于比特率,所以不用管这两种转换和叫法之类的。
起始位:必须有一个标志位为低来告诉对方我要开始
数据位:看图,可以与校验位分开描述,也可以一起描述(低位先行)
校验位:奇偶校验,通过对数据插入1让其1的个数为奇数或者偶数,读取的时候判断是否为偶数或者奇数个以此来判断数据是否正确。
停止位:固定高
6、串口时序图
1)发送一个0x55(起始位为低,低位先行0x55最后高位结束)
波特率:9600 1秒9600bit 差不多一个bit就是100us左右
起始位:s 低电平标志
结束位:p 高电平标志
校验位:没有加校验位
2)发送两个0x55带停止位1位
3)加上一个偶校验
这里1的个数已经为偶数个了,所以校验位为0.
7,,USART外设
硬件流控制:多加两根线,防止发送过快,多的一根线通过高低电平来告诉主机是否准备好,准备好了才会发送。
8、usart硬件框图
主要部分为上面的一小部分,下面的只是上面硬件的具象化。
串口通讯主要的就是TX和RX,这里可以看得出来一个是连接到了发送数据寄存器和接收数据寄存器。虽然硬件上TDR和RDR分为两个硬件描述,但是在软件中都为DR寄存器
发送数据:通过TXE标志位来判断是否发送数据寄存器为空,如果为空就向TDR写入数据,这时候硬件会检测移位寄存器是否有数据正在移位,如果没有那TDR的数据就会被全部移到移位寄存器去,比如现在TDR里面的是0x55就是01010101 全部移入发送寄存器,发送寄存器一位一位的向右发送移出,这样也就形成了低位先行。
接收数据:数据接收到的数据存放在接收移位寄存器,判断标志位RXNE,当移位寄存器的数据被移到DR寄存器时置1,表示DR有数据可以读出。
硬件流控制:两根线RTS和CTS:交叉连接其他设备的这两根线。