• 收藏
  • 加入书签
添加成功
收藏成功
分享

基于PC和STM32单片机串口通信的表情识别报警系统

张星月 董祺 李乐乐 刘嘉豪 廖清江 刘婷
  
大地媒体号
2023年4期
天津商业大学 天津市 300134

打开文本图片集

摘要:本研究提出一种基于PC和STM32单片机串口通信的报警系统。PC机通过Python人脸识别算法分析表情数据,实时检测并传输到串口,利用USB转TTL串口模块转换电平逻辑,STM32F103RCT6单片机根据接收到的指令对声光及短信报警设备进行控制。实验结果表明,该报警系统能够准确监测到指定表情,及时做出响应和处理,有助于关注用户情绪变化并采取相应措施,实用意义广泛。

关键词:单片机;PC机;串口通信;电平转换

Abstract: This study proposes an alarm system based on PC and STM32 microcontroller USART communication. The PC utilizes a Python face recognition algorithm to analyze facial expression data, detects them in real-timeand transmits them to the serial port. A USB to TTL serial module is used for logic level conversion, and the STM32F103RCT6 microcontroller controls the sound, light, and SMS alarm devices based on the received instructions. Experimental results demonstrate that the alarm system accurately detects specified facial expressions, responds and processes them promptly, and facilitates attention to user’s emotional changes and corresponding measures, with broad practical significance.

Keywords: microcontroller, PC, serial communication, logic level conversion

0 引言

单片机作为一种集成了CPU、内存、I/O接口以及各种外设功能的微型计算机系统,在家电控制[1]、汽车电子[2]、医疗器械[3]、工业自动化[4]等领域得到广泛应用。单片机计算能力有限、难以进行复杂的数据,因此实践中通常将单片机与PC通过串口通信构建完整系统,实现数据交换和功能扩展,具有成本低、易用性强、通信线路简单等特点。

研究采用串行全双工异步通信USART,该方式技术成熟、性能可靠,对软硬件要求较低,可为智能化系统的发展和应用提供有益参考。

1USART通信协议

要实现PC机和单片机的通信,首先需要约定数据包内容,制定通信协议,确保通信双方能够正确地解析和处理数据。数据包由波特率和数据帧格式组成,波特率指串口通信的速率,表示每秒钟传送的码元数。数据帧格式需提前约定好,本研究设置帧格式1位起始位,1位停止位、8位数据位以及无校验位。串口通信常用协议包括RS-232[5]、RS-422和RS-485等。随着科技发展与商业技术更新,逐渐使用转串口取代RS-232串口。串口通信协议的组成如图2所示。

2 系统工作流程

首先用keil编译代码,运行无误后使用STlink将程序烧录到单片机,在此条件下开始基于表情识别的报警。流程图如图6所示。

3 硬件设计

硬件设计分为USART、USB转TTL串口模块和单片机报警模块三部分,硬件总体设计如图4。

3.1 USART

STM32中集成了许多用于通信的硬件外设,常见串行通信接口有USART(Universal synchronous asynchronous receiver transmitter,通用同步异步收发器)[6]、UART[7]、I2C、USB、CAN等。USART/UART都可以与外部设备进行全双工异步通信,本文采用USART的异步通信接口,其基本结构分为四部分:信号引脚,寄存器,控制器,时钟与波特率,如图5所示。

STM32F103RCT6单片机中有3个USART和2个UART,本实验选用USART1,查阅芯片数据手册知数据输入引脚RXD为PA10,数据发送引脚TXD为PA9。两设备通信时,TX和RX交叉连接。USART可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。

USART_DR是USART的数据寄存器,由发送数据寄存器TDR和接收数据寄存器RDR组成,共用同一地址。写操作将数据写入TDR,读操作从RDR读出数据。USART外设工作时,数据逐位从TDR转移到发送移位寄存器,TXE标志位置1表示可以写入新数据。发送移位寄存器在发送器控制的驱动下向右移位,把数据输出到TX引脚。移位完成后,新数据自动从TDR转移到发送移位寄存器,若移位未完成,TDR数据等待。接收端类似,区别在于RXNE标志位置1表示可以读取数据。TDR、RDR和移位寄存器的双重缓存确保连续发送接收数据时,数据帧间无空闲,提高效率。

波特率通过以下公式得出:

fck是给串口的时钟,USART1的时钟源为PCLK2,USARTDIV是一个无符号的定点数,存放在波特率寄存器(USART_BRR)的低15位,允许有余数,用四舍五入进行取整。

本研究USART1设置得到115200的波特率,fck=72MHz,代入公式得,整数;小数,USART_BRR寄存器赋值为0x271。

3.2 USB转TTL串口模块

单片机通信接口的电平逻辑一般为TTL电平,逻辑高电平为3.3V或5V,逻辑低电平为0V。而PC机通信接口的电平逻辑通常根据标准规范,如USB是差分信号传输,电平由USB控制器管理。电平逻辑不同,无法直接交换信息,需要使用USB转TTL串口模块来匹配它们的电平逻辑,CH340G芯片实现USB接口转串口功能。USB转TTL串口模块原理图如下:

3.3 单片机报警模块

除了用到STM32F103RCT6单片机已有硬件资源LED0、LED1,还在单片机上接入外设硬件,包括高电平触发蜂鸣器和插入5G移动电话卡的SIM900A短信发送模块。触发报警时,蜂鸣器鸣响,红绿灯LED闪烁,SIM900A向指定号码发送中英文短信。

单片机报警模块连接图如图7。

4 软件设计

软件设计程序包括两部分:上位机PC程序和下位机单片机程序。两部分程序相互关联,虽在不同终端设计运行,但要综合设计才能协同工作。

4.1 PC端(数据发送)研究选用Pycharm2023.1集成开发环境,语言为Python3.9,基于Windows10操作系统,导入pyserial库、numpy库、opencv库等进行编译。

要实现Python串口通信,首先需导入串口通信库pyserial。Serial是Python标准库中的一个模块,提供了串口通信的基本功能,pyserial是一个第三方库,对serial库进行了扩展,提供更多功能和选项。引入serial库代码为importserial。

其次打开串口并指定串口名称和波特率。代码如下:

接下来进行图像处理后,若检测到“sad”表情,则向串口发送数据“1”,编码格式为UTF-8。

4.2 单片机端(数据接收)

研究采用开发环境Keil uVision5 MDK,选用C语言和汇编语言,使用标准库编写代码,在Windows10操作系统下完成。在串口函数中配置USART,在硬件函数中配置报警模块,在主函数中编码对单片机功能和外设工作流程进行控制。

串口1配置步骤:

1)初始化结构体变量

2)串口时钟使能,GPIO时钟使能

3)GPIO端口模式设置

PA9、PA10不用作GPIO,而用做复用功能USART1的发送接收引脚,称为端口复用。配置过程依次为GPIO端口时钟使能、复用外设时钟使能、端口模式配置。将TXD(PA9)初始化为复用推挽输出,RXD(PA10)初始化为浮空输入。

4)串口参数初始化

usartInitStruct.USART_BaudRate = baud; //串口波特率

usartInitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控

usartInitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/ /收发模式

usartInitStruct.USART_Parity = USART_Parity_No; //无校验位

usartInitStruct.USART_StopBits = USART_StopBits_1; //1位停止位

usartInitStruct.USART_WordLength = USART_WordLength_8b; //8位数据位

USART_Init(USART1, &usartInitStruct); //初始化串口1

5)使能串口1

6)开启中断并初始化NVIC

NVIC(Nested vectored interrupt controller)即嵌套向量中断控制器,是内核的器件。配置过程:开启串口接收中断,配置USART1的中断,IRQ通道使能,设置抢占优先级0,子优先级2,然后根据指定的参数初始化NVIC寄存器。

7)编写中断处理函数int flag_0=0; //定义整型变量flag_0并初始化为0

void USART1_IRQHandler(void) //串口1中断服务程序

{

u8 com_data;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //串口传输状态获取

{

USART_ClearFlag(USART1, USART_FLAG_RXNE); //清除接收中断标志位

com_data = USART_ReceiveData(USART1);  //串口1接收数据

if (com_data == ‘1’)

{

flag_0=5;

}

}

}

5 结语

本文以建立上位机和下位机的串口通信为目的,通过阐述系统总体方案、软硬件设计,制定通信协议,介绍实现用串口进行PC端和单片机端的数据传输过程,从而实现表情检测后单片机声光和短信报警的功能。在现实场景中进行测试和验证,确保了系统的有效性与可靠性。

文中提出的串口通信方案有明显优势,但仍有缺陷,比如仅实现单向传输,时效性和准确性有待提高。可改进代码扩展功能,或更换通信方式,更新硬件系统。

参考文献:

[1]唐海晨. 基于STM32单片机家电控制及家居环境监测系统设计与实现[J]. 长江信息通信, 2022, 35 (09): 69-71.

[2]翟世欢, 谢立洁, 杜森. 一款基于国产单片机的电动汽车整车控制器CAN通讯发送串数问题的解决[J]. 汽车维修, 2023, (04): 19-22.

[3]王鹏. 基于CORTEX-M4单片机的医疗器械控制系统设计与研究[J]. 科学技术创新, 2023, (18): 193-196.

[4]张峰升. 单片机在电气自动化控制中的应用[J]. 现代制造技术与装备, 2023, 59 (05): 194-196.

[5]文灏, 雷守宁. RS232通信技术在单片机通信中的应用[J]. 信息通信, 2020, (02): 130-131.

[6]黄克亚, 余雷, 李晓旭. STM32与PC机USART通信教学实验设计[J]. 现代电子技术, 2022, 45 (10): 21-25.

[7]Universal Verification Methodology Based Verification of UART Protocol[J]. Journal of Physics: Conference Series, 2020, 1716 (1):

作者信息:

张星月,女(2004. 5-),汉族,河南驻马店人,本科生;研究方向:智能信号与信息处理;

董祺,女(2004. 1-),汉族,四川成都人,本科生;研究方向:智能信号与信息处理;

李乐乐,女(2002. 8-),汉族,甘肃陇南人,本科生;研究方向:智能信号与信息处理;

刘嘉豪,男(2002. 3-),汉族,广东茂名人,本科生;研究方向:智能信号与信息处理;

廖清江,女(2002. 6-),汉族,四川平昌人,本科生;研究方向:智能信号与信息处理;

刘婷,女(1981. 4-),汉族,山西运城人,博士,副教授;研究方向:智能信号与信息处理

基金项目:国家级大学生创新训练项目:“基于深度学习的视频人脸疼痛表情识别在医疗看护中的应用”(编号:202310069048)

*本文暂不支持打印功能

monitor