一、串行通信相关概念
单工,双工,半双工,全双工
同步(有时钟线),异步
波特率,比特率(bps)
二、用串口实现字符回显
1> 确定想用哪个COM口(自己定,比如COM2)
2> 看板子,找到那个COM口,板子上印的名字是CON7 3> 查看原理图找到CON7对应的GPIO管脚
a> 看开发板的原理图,在开发板原理图里面找CON7,发现对应的接线BUF_XuTXD2/UART_AUDIO_TXD
b> 查找BUF_XuTXD2/UART_AUDIO_TXD,发现它接的是开发板的CON4
c> 查找XuTXD2/UART_AUDIO_TXD,发现接的是CON4的56脚(此信息来源可以咨询硬件工程师,或者自己从板子上找,可能需要把核心板和开发板分离才看得到)
e> 去核心板的原理图去继续找XuTXD2/UART_AUDIO_TXD,能找到它对应的是GPA1_1管脚
f> 同理可得,还有一根线对应的是GPA1_0管脚
4> 查看芯片手册,看GPA1是怎么用的
配置GPA1CON就可以了,需要把GPA1_0和GPA1_1配置成UART模式,对应的是UART2
(通过学习芯片手册,或者通过参考别人的程序,或者参考芯片公司提供的参考方案,或者请教有经验的人)
5> 查看芯片手册,看UART2是怎么用的,第28章
(通过学习芯片手册,或者通过参考别人的程序,或者参考芯片公司提供的参考方案,或者请教有经验的人)
6> 编写程序
a> 先搭框架:简单区分驱动部分和应用部分
驱动部分提供 init ReceiveFromUart SendToUart
应用部分:循环里面去读,读到就马上显示,从而实现回显功能 b> 函数具体实现
init:1. 配置管脚为UART模式;2. 配置UART的数据位,停止位,校验位,波特率等;
ReceiveFromUart:判断接受缓存寄存器是不是包含的有效数据,若有,读,没有就死等
SendToUart:判断发送缓存寄存器是不是空,若空,发送,不空就死等
main:死循环去读ReceiveFromUart,读到了就SendToUart c> 编译程序 make
d> 下载编译好的程序到板子的内存里运行
串口实现字符回显:
需求分析结果:
一、配置
1 配置管脚为UART模式
2 串口数据格式(数据位奇偶校验位停止位)
3 uart收发数据的方式
4 波特率
二、数据的收发
1 数据从哪里收?哪里发?
2 收发动作触发(何时收?何时发?)硬件接线:
1、
可以从开发板上查到con7的收发数据
UART_AUDIO_TXD(发数据)和UART_AUDIO_RXD(收数据),连接到
开发板con4上
2、
3、
在核心板con3上找到UART_AUDIO_TXD(发数据)和UART_AUDIO_RXD(收数据)
4、
在核心板U1A上找到串口收发数据接到GPA1_0和GPA1_1上查手册配寄存器:
一:配置。
1、把GPA1_0和GPA1_1配置成UART模式
2:串口的数据格式
3:UART收、发数据的方式
4:波特率
小数部分:
整数部分:
如何计算的:
已知:波特率要配成115200,时钟频率SCLK_UART=100M
公式:DIV_VAL = (SCLK_UART/(bps *16))- 1 芯片手册上有
计算:DIV_VAL= 100 000 000/115200/16 -1 = 53.25 整数部分保存在UBRDIV=53
小数部分保存在 UFRACVAL2 = 0.25*16 = 4 二:数据收发
1、从哪里发,从哪里收?
2、什么时候收?什么时候发?