开发平台
- 山外KEAZ128
- 已通过Jlink解锁,解除山外的0-(16-1)K的app
- 串口使用串口0(A2,A3)
- 外接CH340(共地)
关于串口
串口应该是我们经常用的东西,它涉及到的方面太多了,它能用在我们平时调试、可以有shell输出,可以用于多机通讯、可以传输文件、驱动ESP8266等、驱动显示屏(串口屏)…等等等,太多了说不完。
对熟悉使用STM32的朋友来说,串口基本上是必备的,在32上,通过固件库来配置串口是件很简单的事情,但串口的基本知识我们还是要知道一下的,虽然说百度上一大堆。
串口:
- 通讯方式:异步通讯
- 接口:TXD & RXD
重要的参数
- 波特率
- 校验位
- 停止位
- 数据位
- 流控(这个一般调试不常用)
串口的模式:
- TX模式
- RX模式
- TX & RX模式
- FIFO
- 回环
串口的中断:
- FIFO 溢出错误
- 线中止错误(line-break,即Rx 信号一直为0 的状态,包括校验位和停止位在内)
- 奇偶校验错误
- 帧错误(停止位不为1)
- 接收超时(接收FIFO 已有数据但未满,而后续数据长时间不来)
- 发送
- 接收
KEAZ128的串口引脚复用
在KEAZ128的芯片手册上,我们可以找到UART0对应的引脚,
因为硬件设计原因,我选择使用A2\A3作为串口。
KEAZ128的串口初始化配置
串口使用的步骤:
- 1、初始化A2/A3的引脚,并复用为串口模式(可以看我前面的GPIO章节)
- 2、初始化UART的时钟
- 3、配置UART的寄存器
串口的寄存器描述,在芯片手册上有详细介绍,
串口引脚初始化就不说了,在配置UART的步骤:
- 1、禁用发送接收。
- 2、配置C1寄存器(配置数据位和校验)。
- 3、计算波特率,计算公式是:UART 波特率 = UART 模块时钟 / (16 × (SBR[12:0] ))。
- 4、写入波特率寄存器,对寄存器写入的值是SBR值,因为是[12:0],所以波特率寄存器分为高位和低位。需要分别写入。
- 5、使能发送和接收。
完成后,串口基本上是可以使用了。
串口输入输出
使用串口时,要自己编写UART_SendData和UART_Receiver
发送时需要检测S1寄存器的TDRE位,检测缓冲区,并向D寄存器写入数据,数据类型时uint8_t。
发送时需要检测S1寄存器的RDRF位,等待接收满,并读取D寄存器的值,获得的数据类型时char型。
效果如下: