本章代码仓库:
git clone https://gitee.com/jumayusi/unit5-gd32-usart.git5.1 串口UART基础知识
并行通信在同一时刻可以传输多个二进制位,我们当前使用的GD32F303使用的是16bit并行接口EXMC;STM32对应的接口一般叫做FSMC接口。
数据帧结构:
同步通信通常需要时钟信号,而异步通信通常不需要,所以uart通信我们一般归类为异步通信,IIC、SPI我们归类为同步通信。
TTL电平
RS232电平
RS485
RS232的物理接口标准
ARM32单片机串口硬件结构内是存在CK时钟线的,因此从习惯上,我们把串口通信叫做USART(跟官方API里面的命名同步synchronous)。
5.2 串口UART硬件结构
主要特性
开发板串口资源介绍:
关键寄存器与标志位:
奇偶校验
和校验\异或校验
循环冗余校验
5.3 printf打印通过串口输出
本节课的目标是利用单片机的串口通信功能重定向ARM Mirco库中的printf函数实现打印输出。
今天在使用arm_gnu时遇到了一个奇怪的问题,重定向fputc实现串口打印无效,问了AI才注意到arm_gnu里面printf依赖的是syscalls.c里面的_write函数。注意我们像使用arm_clang(keil)时候那样重写fputc是无效的!因此syscalls.c里面之前为了避免编译器报错的空实现都需要改为弱函数,然后在外部进行强实现。