STM32H743xx串口1中断接收不定长数据并根据自定义ASCII协议处理,实现多参数的协议解析以及读写操作
编译器平台及例程说明
编译器平台说明
1. Toolchain : MDK-ARM Community Version: 5.30.0.0(Kile V5)
2. Encoding : Encode in UTF-8 without signature
3. Device Specific Packs : Keil.STM32H7xx_DFP.2.7.0.pack
4. Preprocessor Symbols Define : USE_HAL_DRIVER, STM32H743xx
USE_HAL_DRIVER : 允许使用HAL库驱动
STM32H743xx : STM32H743xx芯片
5. Chip Type : STM32H743VIT6, Flash:2MByte, ROM:1MByte
6. 在stm32h7xx_hal_conf.h文件中HSE_VALUE为外部高速振荡器,默认25MHZ。此值必须与硬件保持一致。
例程说明
本例程是在 STM32H743xx串口1中断接收不定长数据并转发用HAL实现 基础上实现的,这部分有疑问的请自行查看
1. STM32H743xx串口1中断接收不定长数据并根据自定义ASCII协议处理,实现多参数的协议解析以及读写操作
一、宏定义说明
/* 指令表大小 */
#define UART_CMD_TAB_SIZE (sizeof(UART_CMD_TAB) / sizeof(UART_CMD_TAB[0]))
/* 协议头 */
#define UART_ASCII_PROTOCOL_HEADER "xSuper:"
/* 协议头长度 不计算'\0' */
#define UART_ASCII_HEADER_SIZE (sizeof(UART_ASCII_PROTOCOL_HEADER) - 1)
/* 参数表大小 */
#define UART_ASCII_ARG_TAB_SIZE (20)
/* 参数个数可变 */
#define UART_ASCII_ARG_NUM_VARIABLE (0xFF)
/* 指令索引无效 */
#define UART_ASCII_CMD_INDEX_INVALID (0xFE)
/* 指令最小长度 */
#define UART_ASCII_CMD_MIN_LEN (5)
/* 串口1接收缓存大小 */
#define UART1_RXD_BUF_SIZE 480
/* 串口1接收缓存大小 */
#define UART1_TXD_BUF_SIZE 480
二、变量的定义
UART_HandleTypeDef USART1_HandlerType = {
0};
//RxState[0..13] : 接收到的数据长度
//RxState[14] : (1)已接收到0x0D (0)未接收到0x0D
//RxState[15] : (1)已接收完成 (0)接收未完成
u16 RxState = 0; //串口1接收状态
static u8 RxBufIRQ[1] = {
0}; //串口1中断接收缓存
u8 __attribute__ ((aligned(4))) UART1_RXD_BUF[UART1_RXD_BUF_SIZE] = {
0}; //串口1接收缓存
u8 __attribute__ ((aligned(4))) UART1_TXD_BUF[UART1_TXD_BUF_SIZE] = {
0}; //串口1发送缓存
/* 指向串口接收数据缓存 */
static char * pRxDat = NULL;
/* 指向串口发送数据缓存 */
static char * pTxDat = NULL;

本文详细阐述了如何在STM32H743xx单片机上通过串口1实现不定长数据接收,利用自定义ASCII协议解析指令,包括系统复位、波特率设置和测试例程等功能,并介绍了关键函数如初始化、索引获取和协议解析的实现过程。
最低0.47元/天 解锁文章
3287

被折叠的 条评论
为什么被折叠?



