52 系列_串口外设的使用说明
📎 原始文档:https://www.kdocs.cn/l/cfooYZDy20GI TOC \o "1-3" \h \u HYPERLINK \l _Toc9128 一、概述 PAGEREF _Toc9128 \h 2
HYPERLINK \l _Toc3540 二、SDK中带DMA串口的相关配置 PAGEREF _Toc3540 \h 3
HYPERLINK \l _Toc18379 三、DMA串口程序例程 PAGEREF _Toc18379 \h 4
HYPERLINK \l _Toc10278 四、普通串口程序例程 PAGEREF _Toc10278 \h 5
HYPERLINK \l _Toc13631 五、串口开发过程可能遇到的问题 PAGEREF _Toc13631 \h 6
一、概述
如图1.1,52系列IC 串口总共有4组,其中3组支持DMA方式,另外一组则只支持普通中断方式。
图1.1
注意:
1、本文档是基于AC521X_release_sdk_V1.1.6 SDK 提供52系列芯片使用串口外设的demo,其他52系列SDK版本基本适用;硬件环境基于AC5213B_V2.0开发顶板。
2、关于串口寄存器等详细信息请联系助理或者代理申请《AC521N用户手册v1.0》。
二、SDK中带DMA串口的相关配置
请用户参照如下配置,结合硬件和自身需求进行修改:
app_config.h相关配置,如图2.1:
图2.1
板级文件配置如图2.2,图2.3:
图2.2
图2.3
三、DMA串口程序例程
参照第二章节完成基础配置后请添加带DMA的特殊串口例程文件到工程,见附件一:
EMBED Package
附件一
如图3.1,加入该demo到工程之后,全保存然后编译下载到开发板。接入串口调试工具将会看到“spec_uart demo.”字符串,然后用户通过串口工具向开发板发送任意字符串看到开发板所接收的打印,则代表开发板特殊串口功能正常。
图3.1
四、普通串口程序例程
添加如下例程文件到工程,关于配置以及描述见demo文件,见附件二。
EMBED Package
附件二
加入该demo到工程之后,全保存然后编译下载到开发板。接入串口调试工具将会看到“general_uart_task demo.”字符串,然后用户通过串口工具向开发板发送任意字符串看到开发板所接收的打印,则代表开发板特殊串口功能正常。
五、串口开发过程可能遇到的问题
1、使用串口模块测试过程中接收不稳定,一直收到奇奇怪怪的数据,检查开发板与模块是否共地。
2、特殊串口接受数据频率较高时(大概10ms以下),会异常中断;加大uart_circlebuf或者接收频率降低即可。
3、特殊串口接收1k或者更大的数据,概率性收不全;接收buffer要跟板级文件设置的串口buffer长度需要相应加大。
app_config.h相关配置如图5.1:
图5.1
板级文件相关配置如图5.2:
图5.2
spec_uart.c相关配置如图5.3:
图5.3
4. 串口测试发现没有读取到接收的数据或者发送数据没有成功;首先应确保硬件通路的连接是没问题的,然后则需要怀疑是GPIO被复用导致的串口功能被抢占。下面请根据如下步骤解除被复用的状态: 以5213芯片为例,其引脚描述见《AC5213B Datasheet V1.1_20181107.pdf》, 应用场景使用UART2、PF2做TX、PF3做RX,则该GPIO可能会被SD2 A组、UART1、SD1 A组、ALNK B组所占用,如图5.4。
图5.4
SD2 A组、SD1 A组、ALNK B组均需要通过检查板级设备表、设备结构体去,做相应的修改或者屏蔽,以确保其不会占用GPIO,如图5.5。
图5.5
设置IOMC3寄存器解除UART1对gpio的占用,UART2也需要解除原GPIO的占用,以开放相应的硬件引脚给其他外设使用,如图5.6:
图5.6
最后如果是寄存器方式实现的串口,检查中断优先级和cpu_id,参考如图5.7:
图5.7
5. 串口TX输出没有数据:请检查outputchannel是否被其他外设复用,打印IOMC1寄存器对比手册可以定位到哪个外设占用; 6. 寄存器方式使用串口,串口的RX使用inputchannel只需要正确配置IOMC3 UARTN_MXS位,然后该RX引脚设置为输入即可完成重映射。 7. 长时间老化通信测试,出现概率跑飞,说明如图5.8: 
图5.8
- 带DMA的串口接收数据的三种方式: 第一种 接收启用阻塞方式,该方式底层将使用信号量管理线程,操作系统线程效率较高,推荐使用,配置如图5.9。

图5.9
第二种 串口接收完指定长度才返回的方式,该方式建议同时开启接收阻塞方式使用,配置如图5.10。
图5.10
第三种方式就是非阻塞方式,只需要设置前面两种为失能状态即可进入非阻塞接收。
此种方式相比前面两种操作系统线程效率较低。
杰理科技
2023年2月2日