串口协议
串口通信
串口通信(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单、便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通 讯方式输出调试信息。
RS-232标准
RS232协议是一种流行的串行接口,用于将计算机连接到诸如串口服务器之类的联网设备。用于实现RS232的串口引脚以及有关该协议的一些其他参考信息。
RS232协议使用不同于标准5V的信号电平传输电线数据,以最大程度地减少信号干扰。它以恒定速率执行异步传输,该速率与起始脉冲信号的电平同步。最长20米的距离是使用RS232接口进行可靠数据传输的极限。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hwTfRXkN-1666001548660)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017153858173.png)]
RS232电平与TTL电平的区别
根据通讯使用的电平标准不同,串口通讯可分为 TTL标准和 RS-232标准
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDrmn1d2-1666001548662)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017162133555.png)]
USB/TTL转232“模块
USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-US9BnadF-1666001548663)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017162602956.png)]
stm32的简单应用
led流水灯
首先配置GPIO口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDaBkdhC-1666001548664)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017164428696.png)]
然后led要有时间间隔
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVu2W6I7-1666001548664)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017164628245.png)]
然后写一个循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q2hgt6C7-1666001548665)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017164727130.png)]
这样的一个简单流水灯程序就编写完成了,可以用keil来观察三个GPIO的波形
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9m4yhtG-1666001548666)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017165056251.png)]
串口通信
串口通信使用到的GPIO引脚配置
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.9
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.10
串口主要参数设置
USART_InitTypeDef USART_InitStructure;
//USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;
//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//数据格式,8位
USART_InitStructure.USART_StopBits = USART_StopBits_1;
//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;
//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//收发模式
USART_Init(USART1, &USART_InitStructure);
//初始化串口1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
//开启串口接受中断
串口使能
USART_Cmd(USART1, ENABLE); //使能串口1
然后接收发送函数
void usart1_send_byte(char data)
{
//USART_GetFlagStatus 用来获取串口SR寄 存器中的指定标志位
//获取TXE标志,判断其是否被设置(SET) while(USART_GetFlagStatus(USART1,USART_F LAG_TXE) != SET);
//USART_SendData 用来通过指定串口发送数 据 USART_SendData(USART1,data);
}
char usart1_recv_byte(void)
{
char ch = 0;
while(USART_GetFlagStatus(USART1,USART_F LAG_RXNE) != SET);
ch = USART_ReceiveData(USART1);
return ch;
}
在野火助手里查看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zl1P8rN-1666001548666)(C:\Users\yes\AppData\Roaming\Typora\typora-user-images\image-20221017170352256.png)]