一、通信接口
通信目的:将一个设备的数据传送到另一个设备。
通信协议:通信双方按照协议规则进行数据收发。
全双工:可以同时收发数据;半双工:同一时间只能收或发。
二、USART串口协议
串口是一种十分广泛的通讯接口,可以使单片机与单片机、单片机与电脑、单片机与各式各样模块互相通信。
1.硬件电路
TX发送端,RX接收端。TX与RX要交叉连接。电平标准不一致需要加电平转换芯片。
电平标准:TTL电平,+3.3V~+5V表示1,0V表示0。
RS232电平,-3V~-15V表示1,+3V~+15V表示0。
RS485电平,两线压差+2V~+6V表示1,-2V~-6V表示0。(差分信号)
2.串口参数及时序
波特率:串口通信速度。(9600波特率,每传送一位所需时间1/9600)
起始位:标志一个数据帧开始,固定为低电平。(下降沿触发)
停止位:用于数据帧间隔,固定为高电平。
数据位:数据帧的有效负荷,1为高电平,0为低电平,低位先行。
校验位:用于数据验证,根据数据位计算的来。(无校验、奇校验、偶校验,判断1的个数)
三、USART串口外设
USART(Universal Synchronous/Asynchronous Receiver/Transmitter),通用同步/异步收发器。USART使STM32内部集成的硬件外设,可以根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可以自动接收RX引脚数据帧时序,拼接为一个字节数据,存放在数据寄存器里。
USART自带波特率发生器,最高达4.5Mbits/s。数据位长度(8/9),停止位长度(0.5/1/1.5/2),可选校验位(无校验/奇校验/偶校验)。支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN。
STM32F103C8T6的USART资源:USART1、USART2、USART3。
1.USART框图
RX连接接收移位寄存器,接收移位寄存器接收到数据置一个位,把数据送到接收数据寄存器(RDR),然后接可以读取RDR的值。
把发送的数据送到发送数据寄存器(TDR),TDR接收到数据置一个标志位,TDR数据送到发送移位寄存器,发送移位寄存器把数据发送至TX。
硬件数据流控,nRTS连接其他USART的nCTS,如果不能处理过来发来的数据,就会置一个标志位给发送端。
SCLK只能输出,用于扩展USART的其他协议。
USART中断控制,能不能进NVIC。TXE发送中断标志位,RXNE接收中断标志位。
波特率发生器,fpclk_x,APB1频率36MHz,APB2频率72MHz,先预分频,然后再16分频。
2.USART基本结构
RX通过GPIO到接收移位寄存器,接收移位寄存器把数据送到接受数据寄存器(RDR),置标志位位RXEN,判断RXEN是否接收到数据。
发送数据寄存器(TDR)把数据送到发送移位寄存器,置标志位TXE,判断TXE是否可以发送数据。
①数据帧
时钟上升沿,读取数据。
②输入数据策略
起始位侦测:16倍频速率进行采样,8、9、10采样准确。
数据采样:16倍频速率进行采样,8、9、10采样准确。
③波特率发生器
发送器和接收器的波特率由波特率寄存器BRR里的DIV确定。(整数部分和小数部分)
④数据模式
HEX模式/十六进制模式/二进制模式:以原始数据显示。
文本模式/字符模式:以原始数据编码后的形式显示。
3.CH340原理图
USB接CH340,接稳压芯片,引出VCC+5V、CH340 VCC、CH340 TXD、CH340 RXD、CH340 3.3V、GND。
四、实验1
1.串口发送
①实验现象
利用串口助手,在串口助手上显示接收到的的数据。
HEX模式、文本模式
②硬件设计
③软件设计
Usart.c
Usart.h
main.c
④用到函数
外设时钟使能:RCC_APB2PeriphClockCmd
GPIO结构体重命名:GPIO_InitTypeDef
GPIO初始化:GPIO_Init
USART结构体重命名:USART_InitTypeDef
USART初始化:USART_Init
USART使能:USART_Cmd
2.串口发送+接收
①实验现象
OLED显示电脑端发送来的数据,电脑端串口助手显示STM32发送来的数据。
②硬件设计
③软件设计
用到OLED模块。
查询的方法:
Serial.c
Serial.h
main.c
中断的方法:
Serial.c
Serial.h
main.c
④用到函数
外设时钟使能模块:RCC_APB2PeriphClockCmd
GPIO结构体重命名:GPIO_InitTypeDef
GPIO初始化:GPIO_Init
UASRT结构体重命名:USART_InitTypeDef
USART初始化:USART_Init
USART中断配置:USART_ITConfig
NVIC优先级分组:NVIC_PriorityGroupConfig
NVIC结构体重命名:NVIC_InitTypeDef
NVIC初始化:NVIC_Init
USART发送数据:USART_SendData
USART返回标志位状态:USART_GetFlagStatus
USART返回中断状态:USART_GetITStatus
USART清空中断标志位:USART_ClearITPendingBit
五、数据包发送与接收
1.HEX数据包
0xFF包头,0xFE包尾。
2.文本数据包
‘@’包头,‘\r’、‘\n’包尾。
3.HEX数据包接收
状态机编程思想。等待包头0xFF,状态为0;收到0xFF,状态为1,判断是否收到4个数据;收到4个数据,状态为2,等待包尾0xFE。收到0xFE,状态转为0。
4.文本数据包接收
状态机编程思想。等待收到包头‘@’,状态为0;收到包头‘@’,状态为1,接收数据,判断是否收到‘\r’;收到‘\r’,状态为2,等待包尾‘\n’;收到‘\n’,状态为0。
六、实验2
1.串口收发HEX数据包
①实验现象
OLED第一行显示TxDATA;第二行显示发送的数据,按键按下数据加1;第三行显示RxDATA;第四行显示接收的数据。
②硬件设计
③软件设计
用到OLED、Key模块。
Serial.c
Serial.h
main.c
④用到函数
外设时钟使能:RCC_APB2PeriphClockCmd
GPIO结构体重命名:GPIO_InitTypeDef
GPIO初始化:GPIO_Init
USART结构体重命名:USART_InitTypeDef
USART初始化:USART_Init
USART中断配置:USART_ITConfig
NVIC优先级分组:NVIC_priorityGroupConfig
USART使能:USART_Cmd
USART发送数据:USART_SendData
USART返回标志状态:USART_GetFlagStatus
USART返回中断编制位:USART_GetITStatus
USART接收数据:USART_ReceiveData
USART清除中断标志位:USART_ClearITPendingBit
2.串口收发文本数据包
①实验现象
OLED第一行显示TxData;第二行显示发送的字符串;第三行显示RxData;第四行显示接收到的字符串。
串口助手发送Led_On,OLED第四行显示接收到的命令字符串,OLED第二行显示Led_On_OK,Led灯亮。串口助手发送Led_Off,OLED第四行显示接收到的命令字符串,OLED第二行显示Led_Off_OK,Led灯灭。串口助手发送Led_abc,OLED第四行显示接收到的命令字符串,OLED第二行显示Error_Command,Led灯无变化。
②硬件设计
③软件设计
用到OLED、Led模块。
Serial.c
Serial.h
main.c
④用到函数
外设时钟使能:RCC_APB2PeriphClockCmd
GPIO结构体重命名:GPIO_InitTypeDef
GPIO初始化:GPIO_Init
USART结构体重命名:USART_InitTypeDef
USART初始化:USART_Init
USART中断配置:USART_ITConfig
NVIC优先级分组配置:NVIC_PriorityGroupConfig
NVIC初始化:NVIC_Init
USART使能:USART_Cmd
USART发送数据:USART_SendData
USART返回标志状态:USART_GetFlagStatus
USART返回中断状态:USART_GetITStatus
USART接收数据:USART_ReceiveData
USART清空中断标志位:USART_ClearITPendingBit
七、两个软件
1.FlyMcu
串口下载程序。只能用USART1,因为STM32F103C8T6本芯片只适配了USART1下载。
在魔术棒的Output里勾选Create HEX File,生产.hex文件。切换BOOT0为1,按复位,下载程序。切换BOOT0为0,按复位,程序现象就出来了。
切换BOOT0为1,FlyMcu勾选编程后执行,编程到FLASH时写选项字节取消勾选,程序现象会执行一次。
设置一键下载电路,就不要老是切换跳线帽和按复位按键。
读FLASH,山寨。清楚芯片,读器件信息。设置选项字节等。
2.STLINK Utiliti
STLINK下载程序。