HOLTEK HT32 MCU UART 应用笔记用户手册
介绍
通用异步接收器/发送器 – UART 是一种广泛使用的串行传输接口,可提供灵活的异步全双工数据传输。 本应用笔记提供的“Module_UART”应用程序代码使用 TX/RX 中断和软件环形缓冲区,通过 API 实现简单的 UART 发送/接收功能,其相关功能如下所述。 这将简化整个数据传输过程,让用户快速理解和实现UART通信应用。
- 发送/接收功能:字节读取、字节写入、缓冲区读取、缓冲区写入等。
- 状态函数:获取缓冲区长度、TX状态等。
本文档将首先介绍UART通信协议,帮助用户从原理到应用更好地理解UART通信。 接下来是应用代码所需资源的下载和准备,包括固件库、应用代码下载、 file 和目录配置以及应用笔记中使用的终端软件工具的介绍。 在功能描述章节,将介绍应用程序代码目录结构、参数设置和API说明。 API 的使用将使用“Module_UART”应用程序代码进行描述,并且还将列出 API 所需的闪存/RAM 资源消耗。 Instructions for Use 章节将引导用户完成环境准备、编译和测试等步骤,以确认应用程序代码能够正常工作。 然后,它会提供说明,说明如何将 API 集成到用户的项目中,最后为修改和可能遇到的常见问题提供参考。
使用的缩写:
- UART: 通用异步接收器/发送器
- API: 应用程序编程接口
- 最低标准: 最低有效位
- 最高分: 最重要的位
- 个人电脑: 个人电脑
- SK: 入门套件,HT32开发板
- 集成开发环境(IDE): 集成开发环境
UART 通讯协议
UART 是一种串行通信类型的接口,它在其发送器上实现并行到串行数据转换,然后与类似的接收器进行串行通信。 接收器在数据接收后执行串并数据转换。 图 1 显示了串行通信的示意图,显示了数据如何按位顺序传输。 因此,对于发送器和接收器之间的双向通信,只需要两条线,TX 和 RX,就可以在彼此之间串行传输数据。 TX 是 UART 传输串行数据的引脚,连接到接收器的 RX 引脚。 因此发送器和接收器设备需要交叉连接它们的TX和RX引脚来进行UART双向通信,如图 数字 2.
图 1. 串行通信图
图 2. UART 电路图
在 UART 串行通信过程中,数据传输是异步的。 这意味着发射器和接收器之间没有时钟或其他同步信号。 这里使用波特率,它是串行数据发送/接收速度,由双方在数据传输之前设置。 另外,在数据包的开始和结束处加入了起始位和停止位等特殊位,组成了一个完整的UART数据包。 图 3 显示了 UART 数据包结构,而图 4 显示了没有奇偶校验位的 UART 8 位数据包。
图 3. UART 数据包结构
图 4. UART 8 位数据包格式
下面依次介绍串口数据包的各个部分。
- 起始位: 这表示数据包的开始。 UART TX 引脚通常在传输开始前保持逻辑高电平。 如果数据传输开始,UART 发送器会将TX 引脚从高电平拉到低电平,即从1 到0,然后保持一个时钟周期。 当在 RX 引脚上检测到从高到低的转换时,UART 接收器将开始读取数据。
- 数据: 这是实际传输的数据,数据长度为 7、8 或 9 位。 数据通常先传输 LSB。
- 奇偶校验位: 数据中逻辑“1”的个数用于判断数据在传输过程中是否发生变化。 对于偶校验,数据中逻辑“1”的总数应为偶数,反之,对于奇校验,数据中逻辑“1”的总数应为奇数。
- 停止位: 这表示数据包结束,此时 UART 发送器会将 TX 引脚从低电平拉至高电平,即从 0 变为 1,然后将其保持 1 或 2 位时间段。
如前所述,由于UART电路中没有时钟信号,因此必须在发送器和接收器之间定义相同的串行数据发送/接收速度,即波特率,以实现无差错传输。 波特率由每秒传输的位数定义,单位为 bps(比特每秒)。 一些标准和常用的波特率有4800bps、9600bps、19200bps、115200bps等,传输一个数据位对应的时间如下图所示。
表 1. 波特率与 1 位传输时间
波特率 | 一位传输 时间 |
4800bps | 208.33微秒 |
9600bps | 104.16微秒 |
19200bps | 52.08微秒 |
115200bps | 8.68微秒 |
资源下载与准备
本章将介绍应用代码和使用的软件工具,以及如何配置目录和 file 小路。
固件库
首先确保在使用应用程序代码之前已经下载了 Holtek HT32 固件库。 下载链接如下所示。 这里有两个选项,HT32F0xxxx系列的HT32_M5p_Vyyyymmdd.zip和HT32F3xxxx系列的HT32_M1_Vyyyymmdd.zip。 下载并解压所需的 file.
拉链 file 包含几个文件夹,可以分类为Document、Firmware Library、Tools等项目,其放置路径如图5所示。 HT32固件库zip file 和 file HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip 的名称位于 Firmware_Library 文件夹下。
图 5. HT32_M0p_Vyyyymmdd.zip 内容
应用代码
从以下链接下载应用程序代码。 应用程序代码打包成一个 zip file 和 file HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip 的名称。 看 图 6 对于 file 名称约定。
图 6. 应用程序代码 File 姓名介绍
下载链接: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File 和目录配置
由于应用代码不包含HT32固件库 files,解压后的应用代码和固件库 file在开始编译之前,s 应该放在正确的路径中。 应用程序代码 zip file 通常包含一个或多个文件夹,例如application和library,如图7所示。将application文件夹放在HT32固件库根目录下即可完成 file 路径配置,如图8所示。或者,将应用代码和HT32固件库同时解压到同一个路径下,也可以达到同样的配置效果。
图 7. HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip 内容
图 8. 解压缩路径
终端软件
应用程序代码可以通过COM口传输消息,实现功能选择或状态显示。 这就需要主机端提前安装好终端软件。 用户可以选择合适的连接软件,也可以使用Tera Term等免费授权软件。 在应用代码中,UART通道配置字长为8位,无奇偶校验,1个停止位,波特率为115200bps。
功能描述
本章将对应用代码进行功能描述,包括目录结构、API架构、设置说明等信息
目录结构
申请代码 file 包含一个应用程序文件夹。 下一层是“Module_UART”文件夹,里面有两个应用程序,“UART_Module_Example”和“UART_Bridge”。 相关的 files 在下面列出和描述。
表 2. 应用代码目录结构
文件夹 / File 姓名 | 描述 |
\\应用程序\Module_UART\UART_Module_Example*1 | |
_创建项目.bat | 用于创建项目的批处理脚本 files |
_项目源.ini | 初始化 file 用于将源代码添加到项目 |
ht32_board_config.h | 设置 file 与IC周边I/O分配相关 |
h32fxxxxx_01_it.c | 中断服务程序 file |
主文件 | 主程序源码 |
\\应用程序\Module_UART\UART_Bridge*2 | |
_创建项目.bat | 用于创建项目的批处理脚本 files |
_项目源.ini | 初始化 file 用于将源代码添加到项目 |
ht32_board_config.h | 设置 file 与IC周边I/O分配相关 |
h32fxxxxx_01_it.c | 中断服务程序 file |
主文件 | 主程序源代码 |
uart_bridge.h uart_bridge.c | UART 桥接头 file 和源代码 file |
\\实用程序\中间件 | |
串口模块.h*3 串口模块.c*3 | API标头 file 和源代码 file |
\\公用事业\共同 | |
ringbuffer.hring_buffer.c | 软件环形缓冲区标头 file 和源代码 file |
笔记:
- 在“UART_Module_Example”应用代码,API的读写操作都是以loopback的方式进行的,参考“API使用示例amples”部分了解更多详情。
- 在“UART_Bridge”应用程序代码中,两个 UART 通道 UART CH0 和 UART CH1 被激活,并且通过 COMMAND 结构在两个 UART 设备之间实现自定义通信协议。 有关详细信息,请参阅“API 使用示例amples”部分。
- 应用代码需要使用uart_module.c/h file具有固件库版本要求的 s。 根据更新,要求可能会不时更改。 确认当前固件库版本要求,可在main.c中搜索关键字“Dependency check”查看依赖检查内容 file. 如果固件库版本不符合要求,请从“固件库”部分提供的链接下载最新版本。
API架构
每个API都有一个重要的参数CH,就是UART Channel。 这决定了要控制哪个 UART 通道。 目前最多支持四个 UART 通道,因此四个常量符号定义如下。 这些用作参数 CH,为 API 提供控制基础。
- UARTM_CH0:输入参数——控制或配置UART CH0
- UARTM_CH1:输入参数——控制或配置UART CH1
- UARTM_CH2:输入参数——控制或配置UART CH2
- UARTM_CH3:输入参数——控制或配置UART CH3
如果只使用一个 UART 通道,则不会浪费内存空间。 这是因为可以设置支持的 UART 通道数,并且预处理器将删除未使用的 UART 通道代码以增加可用内存空间。 API架构显示在 图 9.
图 9. API 架构框图
每个API由四组串口通道相关的设置或控制组成,用户只需输入需要的通道参数即可。 配置相关的API,只需要额外有一个结构形式为USART_InitTypeDef的UART基本配置参数表即可。 API会根据表中的参数内容进行串口基本配置。 UART 基本配置结构表见“API 说明”部分。
uart_module.c/.h fileht32_board_config.h仅包含每个UART通道的中断(CHx_IRQ)和状态表(CHx Status),而UART通信所需的所有设置均由ht32_board_config.h提供。 htXNUMX_board_config.h中的硬件相关参数 file 如下表所示。 “设置说明”部分提供了更多详细信息。
ht32_board_config.h中的硬件相关参数包括I/O设置和物理UART口设置,如下。
表 3. ht32_board_config.h 中的定义符号
象征 | 描述 |
HTCFG_UARTM_CH0 | 物理串口名称; 前任amp例:UART0、UART1… |
HTCFG_UARTM0_TX_GPIO_端口 | 为CH0定义TX的端口名称; 前任amp乐:甲、乙、丙…… |
HTCFG_UARTM0_TX_GPIO_PIN | 定义CH0的TX引脚号; 前任amp乐:0~15 |
HTCFG_UARTM0_RX_GPIO_端口 | 为CH0定义RX的端口名称; 前任amp乐:甲、乙、丙…… |
HTCFG_UARTM0_RX_GPIO_PIN | 定义CH0的TX引脚号; 前任amp乐:0~15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | 定义 CH0 的 TX 缓冲区大小; 前任amp乐:128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | 定义 CH0 的 RX 缓冲区大小; 前任amp乐:128 |
要修改 UART 通道 AFIO 配置,请参考相关的设备数据手册。 目前只有 UART CH0 的 I/O 定义生效,因为 ht0_board_config.h 中只配置了 UART CH32。 添加UART CH1~3,其I/O定义需参考UART CH0定义或参考“设置修改及FAQ”章节完成。
API架构主要有以下三个特点:
- 最多支持四个 UART 通道。 它们的输入参数是UARTM_CH0、UARTM_CH1、UARTM_CH2和UARTM_CH3。
- UART 通道数可以设置,未使用的通道不会减少可用内存空间。
- 所有 UART 设置和 I/O 定义都与 API 完全分离。 这增加了设置值的管理便利性,并减少了错误或丢失设置的可能性。
设置说明
本节将介绍ht32_board_config.h和uart_module.h中的参数设置 files.
- ht32_board_config.h:这个 file 用于引脚定义和开发板相关设置,包括入门套件(SK)使用的UART IP通道(UART0、UART1、USART0…)、对应的TX/RX引脚位置和TX/RX缓冲区大小。 图 10 显示了 HT32F52352 Starter Kit 的设置内容。 根据开发的功能集成,用户可以参考所用设备数据表的“Pin Assignment”部分来实现管脚定义。 有关设置修改的更多详细信息将在“设置修改和常见问题解答”部分进行描述。
图 10. ht32_board_config.h 设置 (HT32F52352)
- 串口模块.h: 这是 API 标头 file 由应用程序代码使用,包括相关的默认设置、功能定义等。如图11所示,默认设置内容可以被外部配置覆盖,例如ht32_board_config.h中的设置 file.
图 11. uart_module.h 中的默认设置
接口说明
- 应用程序代码数据类型描述。
- USART_InitTypeDef
这是 UART 基本配置结构,由 BaudRate、WordLength、StopBits、Parity 和 Mode 配置组成,如下所示。多变的 姓名 类型 描述 USART_波特率 u32 UART 通讯波特率 USART_字长 u16 UART 通信字长:7、8 或 9 位 USART_停止位 u16 UART通信停止位长度:1或2位 USART_奇偶校验 u16 UART 通信校验:偶校验、奇校验、标记校验、空格校验或无校验 USART_模式 u16 UART通信方式; API 仅支持普通模式
- USART_InitTypeDef
- 在使用API函数之前,需要先在主程序中完成UART的基本配置。 该应用程序代码的UART基本配置如图12所示。这里的波特率为115200bps,字长为8位,停止位长度为1位,无奇偶校验。
图 12. UART 基本配置
- 图 13 显示了在 uart_module.h 中声明的 API 函数 file. API函数的作用、输入参数和使用方法如下表所示。
图 13. uart_module.h 中的 API 函数声明
姓名 | void UARTM_Init(u32 CH,USART_InitTypeDef *pUART_Init,u32 uRxTimeOutValue) | |
功能 | UART模块初始化 | |
输入 | CH | 串口通道 |
pUART_初始化 | UART基本配置结构体指针 | |
uRx超时值 | UART RX FIFO 超时值。 当 RX FIFO 接收到新数据时,计数器将重置并重新启动。 一旦计数器达到预设的超时值并且相应的超时中断已使能,就会产生超时中断。 | |
用法 | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//执行UART基本配置//USART_InitStructure配置参考图12 |
姓名 | u32 UARTM_WriteByte(u32 CH, u8 uData) | |
功能 | UART模块写字节操作(TX) | |
输入 | CH | 串口通道 |
数据 | 要写入的数据 | |
输出 | 成功 | 成功的 |
错误 | 失败的 | |
用法 | UARTM_WriteByte(UARTM_CH0, 'A'); //UART 写入 1 个字节 – 'A' |
姓名 | u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLength) | |
功能 | UART模块写操作(TX) | |
输入 | CH | 串口通道 |
缓冲区 | 缓冲区指针 | |
u长度 | 待写入数据的长度 | |
输出 | 成功 | 成功的 |
错误 | 失败的 | |
用法 | u8 Test[] = “这是测试!\r\n”; UARTM_Write(UARTM_CH0, 测试, sizeof(测试) -1); //UART写入pBuffer数据 |
姓名 | u32 UARTM_ReadByte(u32 CH, u8 *pData) | |
功能 | UART模块读字节操作(RX) | |
输入 | CH | 串口通道 |
p数据 | 放置读取数据的地址 | |
输出 | 成功 | 成功的 |
错误 | 失败(无数据) | |
用法 | u8 临时数据; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//如果UARTM_ReadByte()返回SUCCESS则UART写入这个数据字节 |
姓名 | u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLength) | |
功能 | UART模块读操作(RX) | |
输入 | CH | 串口通道 |
缓冲区 | 缓冲区指针 | |
u长度 | 读取的数据长度 | |
输出 | 阅读次数 | 已读取数据长度 |
用法 | u8 测试 2[10]; u32 伦; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read()读取5字节数据存入Test2,并赋值读取字节数to Len//写入来自Test2的数据 |
姓名 | u32 UARTM_GetReadBufferLength(u32 中文) | |
功能 | 获取读缓冲区长度(RX) | |
输入 | CH | 串口通道 |
输出 | u长度 | 读取缓冲区长度 |
用法 | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //串口模块初始化 while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//等到UARTM_ReadBuffer已经接收到5个字节的数据 |
姓名 | u32 UARTM_GetWriteBufferLength(u32 中文) | |
功能 | 获取写缓冲区长度(TX) | |
输入 | CH | 串口通道 |
输出 | u长度 | 写缓冲区长度 |
姓名 | u8 UARTM_IsTxFinished(u32 中文) | |
功能 | 获取TX状态 | |
输入 | CH | 串口通道 |
输出 | 真的 | 发送状态:完成 |
错误的 | TX状态:未完成 | |
用法 | UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // “uart_module.c” SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //这个API可以用来查看TX状态,如上图; 等到UARTM_WriteByte() API完成,即TX状态为TRUE,再继续后面的动作。//加了一个限制,因为这个函数直到uart_module.c中的SVN版本号是525才加。 |
姓名 | 空白 UARTM_DiscardReadBuffer(u32 中文) | |
功能 | 丢弃读缓冲区中的数据 | |
输入 | CH | 串口通道 |
API 用法示例amp莱斯
本节将演示 API 写入和读取 examp“Module_UART”应用程序代码使用初始化过程和“UART_Module_Example”应用程序代码进程。 在使用 API 之前,用户需要包含 API 标头 file 进入主程序源码 file (#include “middleware/uart_module.h”)。
如图14所示,进入初始化流程时,首先定义UART基本配置结构。 然后配置UART基本配置结构成员包括BaudRate、WordLength、StopBits、Parity和Mode。 最后调用API初始化函数,调用完成即表示初始化过程结束。 之后用户可以根据预设的串口基本配置继续读写操作。
图 14. 初始化流程图
“UART_Module_Example”应用程序代码以环回方式演示API读写操作。 流程图如图 15 所示。使用的 API 函数包括 UARTM_WriteByte()、UARTM_Write()、UARTM_ReadByte()、UARTM_Read() 和 UARTM_GetReadBufferLength()。 它们的描述在“API 描述”部分中提供。
图 15. 写入和读取示例的流程图amp莱斯
“Module_UART”文件夹下还有一个“UART_Bridge”应用代码,其相关 file 描述在“目录结构”部分介绍。 “UART_Bridge”应用程序代码激活两个 UART 通道,UART CH0 和 UART CH1,然后通过命令结构 gCMD1 和 gCMD2 自定义两个 UART 设备之间的通信协议。 这些在 uart_bridge.c 中定义,如下所示。 UARTBridge_CMD1TypeDef gCMD1:
多变的 姓名 | 类型 | 描述 |
u标头 | u8 | 标头 |
u指令 | u8 | 命令 |
数据[3] | u8 | 数据 |
UARTBridge_CMD2TypeDef gCMD2:
多变的 姓名 | 类型 | 描述 |
u标头 | u8 | 标头 |
细胞因子 | u8 | 命令A |
微分贝 | u8 | 命令B |
数据[3] | u8 | 数据 |
在“UART_Bridge”应用程序代码中,使用gCMD1接收数据作为命令包,然后进行分析。 然后根据自定义的通信协议,将gCMD2设置为响应包并发送。 以下是examp命令包 gCMD1) 和响应包 (gCMD2) 的文件。 命令包(UARTBridge_CMD1TypeDef gCMD1):
字节 0 | 字节 1 | 字节 2 ~ 字节 4 |
u标头 | u指令 | 数据 [3] |
“一个” | “1” | “x、y、z” |
响应数据包(UARTBridge_CMD2TypeDef gCMD2):
字节 0 | 字节 1 | 字节 2 | 字节 3 ~ 字节 5 |
u标头 | 细胞因子 | 微分贝 | 数据 [3] |
“B” | “一个” | “1” | “x、y、z” |
资源占用
以 HT32F52352 为例ample,UART模块占用的资源如下图。
HT32F52352 | |
ROM 大小 | 946 字节 |
RAM 大小 | 40*1 + 256*2 字节 |
笔记:
- 单个通道的包括标志和状态在内的全局变量占用 40 字节的 RAM。
- 这是针对使用单个通道且 TX/RX 缓冲区大小为 128/128 字节的情况。 缓冲区大小可根据应用要求设置。
表 4. 应用程序代码资源占用
- 编译环境: MDK-Arm V5.36、ARMCC V5.06 更新 7(内部版本 960)
- 优化选项: 2 级 (-O2)
使用说明
本章将介绍“Module_UART”应用代码的环境准备,以及编译和测试步骤。
环境准备
“Module_UART”应用程序代码所需的硬件和软件如下所列。
表 5. 硬件/软件环境准备
硬件/软件 | 数数 | 笔记 |
入门套件 | 1 | 本应用笔记使用 HT32F52352 入门套件作为 example |
USB 电缆 | 1 | 微型 USB,连接到 PC |
应用代码 | — | 下载路径, file 和目录配置在“资源下载与准备”一节中介绍。路径:“\\application\Module_UART\UART_Module_Examp这” |
泰拉时报 | — | 请参阅“终端软件”部分 |
基尔集成开发环境 | — | Keil uVision V5.xx |
首先使用HT32F52352 Starter Kit结合e-Link32 Lite的Virtual COM Port (VCP)功能进行UART应用介绍。 这需要实施以下环境准备:
- 板上有两个USB接口。 如图32-(a)所示,使用USB线连接PC机和开发板上的eLink16 Lite接口。
- 由于应用代码需要使用e-Link32 Lite Virtual COM Port (VCP)功能,请确保UART Jumper-J2*2的PAx*1和DAP_Tx已经用跳线短接。 J2 位置如图 16-(b) 所示。
笔记
- 入门套件上的 J2 有两个选项,PAx 和 DAP_Tx 短接或 PAx 和 RS232_Tx 短接。 有关详细设置功能,请参阅入门套件用户手册。
- 不同入门套件上的 MCU UART RX 引脚位置不同。 这个前任ample 使用 PAx 表示 RX 引脚。
图 16. HT32 入门套件框图
现在使用用户目标板结合e-Link32 Pro的Virtual COM Port (VCP)功能进行UART应用介绍。 这需要实施以下环境准备:
- e-Link32 Pro 的一侧使用 Mini USB 电缆连接到 PC,另一侧通过其 10 位灰色电缆连接到用户目标板。 电缆的SWD接口与目标板的连接采用杜邦线实现,如图17-(a)所示。
- e-Link32 Pro 的串行通信引脚为 Pin#7 VCOM_RXD 和 Pin#8- VCOM_TXD。 这些应该连接到用户目标板的 TX 和 RX 引脚,如图 17-(b) 所示。
图 17. e-Link32 Pro + 用户目标板框图
编译与测试
本节将取“application\Module_UART\UART_Module_Example”作为前任ample介绍编译和测试过程。 在此之前,请确保已执行上一节中描述的所有准备工作,并已下载 Tera Term 终端软件。
详细操作步骤总结如下。
Step 1. 开机测试
如前一节所述设置硬件环境。 开机后,入门套件左下角的 D9 电源 LED 将亮起。 USB 枚举完成后,右上角 e-Link1 Lite 上的 D32 USB LED 将亮起。 如果D1长时间不亮,请确认USB线是否可以通信。 如果没有,则将其取出并重新插入。
步骤 2. 生成项目
打开application\Module_UART\UART_Module_Examp文件文件夹,点击_CreateProject.bat file 生成工程,如图 18 所示。由于本应用笔记使用 HT32F52352 Starter Kit,因此打开位于 MDK_ARMv52352 文件夹下的 Keil IDE 工程“Project_5.uvprojx”。
图 18. 执行 _CreateProject.bat 生成项目
步骤 3. 编译和编程
项目打开后,首先单击“Build”(或使用快捷键“F7”),然后单击“Download”(或使用快捷键“F8”)。 在此之后,构建和下载结果将显示在构建输出窗口中。 参见图 19。
图 19. 构建和下载结果
步骤 4. 打开Tera Term软件并配置串口
打开 Tera Term 软件和 COM 端口。 注意Starter Kit生成的COM端口号是否正确。 然后点击“设置>>串口”进入配置界面。 “Module_UART”应用程序代码的 UART 接口配置在“终端软件”部分进行了描述。 设置结果如图 20 所示。
图 20. Tera Term 串口设置结果
步骤 5. 重置系统并测试
按 SK 复位键 – B1 复位。 在此之后,“ABCThis is test!” 消息将是
通过 API 传输,并显示在 Tera Term 窗口中,如图 21 所示。关于接收功能,当将数据输入 Tera Term 窗口时,将使用相关 API 来确定接收缓冲区长度。 当PC接收到的数据达到5个字节时,将接收到的5个字节的数据依次发送出去。 如图22所示,依次输入的数据为“1、2、3、4、5”,通过API接收并判断。 在此之后,将在五个输入后打印数据“1、2、3、4、5”。
图 21. “Module_UART”应用程序代码功能测试——发送
图 22.“Module_UART”应用程序代码功能测试——接收
移植说明
本节将介绍如何将 API 集成到用户的项目中。
步骤1. 添加 uart_module.c file 进入项目。 右键单击“用户”文件夹。 选择“添加现有 Files 到 Group 'User'…”,然后选择 uart_module.c file 并点击“添加”,如图23所示。请参考“目录结构”一节 file 路径说明。
图 23. 添加 uart_module.c File 项目
步骤 2. 添加 ring_buffer.c file 进入项目。 右键单击“用户”文件夹。 选择“添加现有 Files 到 Group 'User'…”,然后选择 ring_buffer.c file 并点击“添加”,如图24所示。\参考“目录结构”一节 file 路径说明。
图 24. 添加 ring_buffer.c File 项目
步骤 3. 包含 API 标头 file 进入 main.c 的开头,如图 25 所示。(Ext:#include “middleware/uart_module.h”)
图 25. 包含 API 标头 File 到 main.c
步骤 4. 使用 ht32_board_config.h 实现 UART 通信所需的设置 file. 这在“设置说明”和“设置修改及FAQ”部分有详细介绍。
设置修改及常见问题
本节将介绍如何修改 UART 设置,并解释一些使用过程中遇到的常见问题。
更改 UART 引脚分配
- 参考 HT32F52352 Datasheet 的“Pin Assignment”章节,查找 Alternate Function Mapping 表,其中列出了设备类型的 AFIO 功能。 UART相关管脚请参考“AF6 USART/UART”一栏,如图26所示。
图 26. HT32F52352 复用功能映射表
- 此步骤将引导用户使用上表定位相应的 UART 引脚。 HT32F52352 前ample 使用 USART1 作为默认通道。 这里TX和RX引脚分别是USR1_TX和USR1_RX,分别位于PA4和PA5上。 图 27 显示了引脚对应关系以及“ht32_board_config.h”中的引脚定义。 管脚分配表中“Package”的空字段表示此包中没有相关的 GPIO。 要修改 UART 引脚,找到目标引脚位置并使用“ht32_board_config.h”重新定义引脚 file.
图 27. 管脚对应及设置修改
添加 UART 通道
以HT32F52352 HTCFG_UARTM_CH1为例ample,这里介绍如何添加新的UART通道。
修改ht32_board_config.h file
参考 HT32F52352 Datasheet 的“Pin Assignment”章节,查找 Alternate Function Mapping 表,其中列出了设备类型的 AFIO 功能。 由于USART1已经作为HTCFG_UARTM_CH0使用,新添加的HTCFG_UARTM_CH1可以选择USART0。 这里,TX和RX引脚分别位于PA2和PA3,如图28上半部分所示。相应的修改是使用ht120_board_config.h中的代码行126~32实现的,如图中红色虚线框所示28.
图 28. 添加 UART 通道
常见问题解答
Q: Compilation and Test部分的第5步,发送功能测试正常。 在这里,“ABCThis is test!” message已经显示成功,但是对于receive函数,为什么输入的XNUMX个值没有返回显示?
A: 检查UART Jumper-J2的MCU UART RX和DAP_Tx管脚是否被跳线短接。 由于“Module_UART”应用程序代码需要使用e-Link32 Lite的Virtual COM Port (VCP),因此需要将UART Jumper-J2左侧两个引脚短路设置,如图29所示。
图 29. UART 跳线-J2 设置
问:之后 执行“Build”(或快捷键“F7”),出现一条错误消息,提示固件库版本低于所需版本? 参见图 30。
A: “Module_UART”应用代码的实现需要包含uart_module.c/h files 对某个固件库版本有要求。 当出现这样的错误信息时,说明当前使用的固件库是旧版本。 因此,有必要通过“固件库”部分提供的链接下载最新版本。
图 30. 固件库版本错误消息
结论
本文档对“Module_UART”应用程序代码和UART 通信协议进行了基本介绍,以帮助用户更好地理解。 接下来是资源下载和准备。 功能描述章节介绍了 file 目录结构、API 架构、API 描述和API 用法examp莱斯。 使用说明章节演示了“Module_UART”应用程序代码的环境准备、编译和测试。 还提供了代码移植和修改设置的说明,以及可能遇到的一些常见问题的说明。 所有这些结合在一起将使用户能够快速了解如何使用 API,从而减少上手的时间。
参考资料
有关详细信息,请参阅 Holtek web网址:www.holtek.com
版本和修改信息
日期 | 作者 | 发布 | 修改信息 |
2022.04.30 | 蔡期货(Chi-Yu Tsai) | V1.00 | 第一版 |
免责声明
出现在此的所有信息、商标、徽标、图形、视频、音频剪辑、链接和其他项目 web网站(“信息”)仅供参考,如有更改,恕不另行通知,由 Holtek Semiconductor Inc. 及其关联公司(以下简称“Holtek”、“公司”、“我们”、“我们'或'我们的')。 虽然 Holtek 努力确保此信息的准确性 web网站,Holtek 不对信息的准确性作出任何明示或暗示的保证。 Holtek 对任何错误或泄漏不承担任何责任。
Holtek 对使用本产品或与使用本产品有关的任何损害(包括但不限于计算机病毒、系统问题或数据丢失)概不负责 web任何一方的网站。 该区域可能有链接,可让您访问 web其他公司的网站。
这些 web网站不受盛群控制。 Holtek 不对此类网站上显示的任何信息承担任何责任和保证。 到其他的超链接 web网站风险自负。
责任限制
在任何情况下,Holtek Limited 均不对任何其他方因您访问或使用本网站而直接或间接导致的任何损失或损害承担任何责任 web网站、网站上的内容或任何商品、材料或服务。
适用法律
免责声明包含在 web本网站受中华民国法律管辖并依其解释。 用户将服从中华民国法院的非专属管辖权。
免责声明更新
Holtek 保留随时更新免责声明的权利,无论是否事先通知,所有更改在发布到 web地点。
文件/资源
![]() |
HOLTEK HT32 MCU UART应用笔记 [pdf] 用户手册 HT32 MCU, UART 应用笔记, HT32 MCU UART, 应用笔记, HT32, MCU UART 应用笔记, HT32 MCU UART 应用笔记 |