电子说
本文解答三问题:
1 串口是什么,
2 串口数据从哪里来,
3 串口数据去向何方。
术语:
1 formula 对应公式
2 parity even奇校验 odd偶校验
3 TXE 发送数据寄存器空 (Transmit data register empty)
4 TC 发送完成 (Transmission complete)
5 RXNE 读数据寄存器非空 read data register not empty
6 abandon 放弃
串口通讯中物理层:
1 规定数据传输介质
协议层:
1 规定传输的形式,统一双方的数据打包方式,解包标准
电平标准:
1 TTL 电平为3.3V 0v
2 RS232 +15v 到-15v
3 485 电平 +2-+6 表示1,-2--6 表示0
232标准串口 主要用于工业设备直接通信
1 高低电平标准较高,用于抗干扰,以及抗静电 使用峰峰值 进行抗干扰
2 max3232 sp3232 转换芯片上有独立的供电接口
3 DB9端口上 大头开始的端口为1脚,对于公头 2/3 分别为 R/T 对于母头2/3为T/R
串口校验位
1 奇校验 数据1 对应的数量不为奇数,校验位,补充一位1
2 偶校验 数据1对应的数据量不为偶数,校验位,补充一位1
3 无校验 数据位中不包含校验位
串口模式:
对应两种模式,发送模式,以及接收模式 硬件控制流,
异步发送数据,数据发送帧中插入有效的标志位
polarity极性 phase相位
时钟极性:
1 0 总线空闲时CK引脚上保持低电平
1 总线空闲时CK引脚上保持高电平
2 部分串口上不支持时钟极性的配置方式
时钟相位 :
1 0 :在时钟的第一个边沿进行数据采集
2 1:在时钟的第二个边沿进行数据采集
总结:
时钟中极性以及相位:方式保持一致即可,主机需要适配从机上通讯方式
LBCL:最后一位时钟脉冲
1 0 最后一位数据的时钟脉冲不从CK输出
2 1 最后一位的时钟脉冲会从CK输出
deInit复位寄存器数值
编程之前,需要对库中使用到函数进行查看,否则会导致编程中出现 不知道如何使用函数这种问题
串口初始化:
1 BSP Board Support Package 板极支持包 硬件设计相关的代码都被封装在BSP中,代码层次设计,进行抽象 单独设计
2 使用条件编译,定义头文件,主要用来防止多个文件中重复对此头文件进行调用,之后对应变量被重复定义使用
3 串口模式可以进行设置,可发送可接收,可两者同时操作
4 数据发送,调用库中发送单字节的函数进行数据筹备,之后,通过while函数,对数据发送缓冲区是否为空进行判断,非set为真
后期串口上数据处理,都需要进行检查
5 定义变量一定要写上变量初始数值,防止变量初始化之后,对应的数值不正确 且很难找到问题点
6 字符串中进行最后一位数据判断,可以对数据进行提取,之后判定数据是否为 ''判断字符串中对应数据是否发送完成
7 printf函数是一个标准的c语言函数 使用此函数需要使用 stdio.h头文件
8 printf函数 会使用到fputc这个函数,代码中需要对fputc函数进行实现,之后,可正常使用print函数进行数据打印输出
10 putchar函数也可以正常使用 putchar(‘A’); C语言中标准库对应的操作方式
11 进行数据发送,不勾选16进制数据显示的情况下,部分数据不能正常显示
串口号进行切换
1 使用宏定义对不同的串口进行区分,开启指定宏定义实现串口中通讯需求
2 不同的串口,需要使能的时钟不同
3 中断函数名,来自启动文件
4 串口数据接收:
1 串口接收中断参数配置,开始对抢占优先级进行配置
2 后续串口上数据交互,必须对寄存器标志进行判断 发送数据,接收数据标志
3 使用getchar函数, 单片机上可以接收外部数据
4 C语言中常规数据收发的方式,在单片机中需要进行特殊处理,考虑到实际工控应用,单片机中数据处理 需要进行合理的解析
5 串口中发送的数据 需要区分是字符还是数字
6 串口参数进行配置中,需要先对芯片中资源以及 拥有的IO 进行统计
7 IO 重映射 主要针对芯片上IO合理布局做出的决策
8 数据寄存器 DR 一个数据发送寄存器 TDR 和一个接收数据寄存器RDR 一个地址对应两个物理内存
9 寄存器中,使用0 / 1映射到实际的数字上 设备上端口不够使用的情况下,可使用此种方法
10 单片机中时钟为外设工作的心脏,要是时钟不工作,外设上也就不会正常运转
11 串口使能开启,需要 UE =1 TE = 1 发送数据时,对应数据流向为 DMA或者 cpu 两种渠道
12 波特率 每秒钟要发送多少数据 【二进制位】
串口中寄存器说明
TXE 用来判断数据 发送数据寄存器 先将数据放置到发送数据寄存器中,之后将数据移动到发送移位寄存器中 对应到寄存器为txc 为数据传输标志位
TC 标志位对应的是数据发送完成
串口上时钟进行计算,需要先确定时钟来源
定时器以及串口上使用时钟, 分别挂载在APB1 APB2
备注:
1 后续设备使用GD32芯片,可以考虑提升芯片上串口波特率 ,或者使用同步串口进行数据传输
2 单片机中对小数进行表示,精度为bit位对应有效数据分之1 波特率寄存器表示精度 1 / 16
3 计算出波特率对应数值,小数部分数值 / 1 / 16 对应数值为 小数部分对应的转化数字,实际数据 / 精度 = 数量级
4 波特率相关参数计算,可以使用宏定义 ,使用公式 自己进行计算,最终实现赋值
祝各位:前程似锦。
全部0条评论
快来发表一下你的评论吧 !