python 串口接收不定长数据_【F769IDISCOVERY评测】串口接收超时中断和字符匹配中断...

本文介绍了STM32F7系列芯片串口的两个实用功能:接收超时中断和字符匹配中断。利用接收超时中断配合DMA,可以方便地接收不定长数据;字符匹配中断则能在检测到特定字符时触发中断,实现特殊字符串的接收。文中通过实例展示了这两个功能的工作原理和应用,并提到了串口的其他增强特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在如今这个需要快速开发设计出产品的时代,模块化的东西越来越方便快捷,在各种模块使用的接口里面串口应该是比较常见和常用的,串口蓝牙模块,串口WIFI模块等等,除此之外串口还常用于和客户产品进行通信中也比较方便,因此一个接收发送数据等功能完善的串口对项目开发来说非常重要。(STM32官网)

在ST发布比较新的系列的ARM芯片中,串口已经非常强大,下面我们就简单测试几个比较常用的功能。

1、接收超时中断+DMA接收不定长数据

如果我们想要用串口接收一段长度不确定的数据,比较常见的做法是空闲中断配合DMA或者自己使用定时器进行一个超时判断来确定一帧长度数据接收完成,除此之外在STM32F7系列中串口有一个Receiver timeout 中断,使用这个接收超时中断配合DMA可以很方便的接收不定长数据。

接收超时中断用于串口在接收到最后一个字符后,在设置的超时时间内没有接收到新的数据便会触发。

uartouttime.png (142.28 KB, 下载次数: 24)

2016-12-10 17:02 上传

接收超时中断的设置超时时间是以串口接收一个bit的持续的时间为单位,这个时间和波特率有关系实际使用中可以根据具体情况进行调整,然后设置超时多少个这样的持续时间才会触发中断。

RTO.png (80.8 KB, 下载次数: 17)

2016-12-10 17:14 上传

接收超时设置和中断回调函数如下

//打开或者关闭串口接收超时

void USART_ReceiverTimeOutCmd(USART_TypeDef* USARTx, FunctionalState NewState)

{

if (NewState != DISABLE)

{

USARTx->CR2 |= USART_CR2_RTOEN;

}

else

{

USARTx->CR2 &= (uint32_t)~((uint32_t)USART_CR2_RTOEN);

}

}

//设置串口接收超时时间

void USART_SetReceiverTimeOut(USART_TypeDef* U

### 如何用Python实现串口接收信号 为了利用 `pyserial` 库来实现 Python串口接收功能,可以按照如下方式编写代码: ```python import serial import time # 初始化串口对象并设置参数 ser = serial.Serial( port='/dev/ttyS1', # Linux下的串口号,在Windows下可能是'COM3' baudrate=9600, # 波特率 timeout=0.5 # 超时时间(秒) ) def read_from_serial(): try: while True: if ser.in_waiting > 0: # 如果有数据可读取 data = ser.read(ser.in_waiting).decode('utf-8') # 解码接收到的数据 print(f"Received Data: {data}") # 打印接收到的信息 time.sleep(0.1) # 防止CPU占用过高 except KeyboardInterrupt: print("Program Stopped Manually!") finally: ser.close() # 确保关闭串口连接 print("Serial Port Closed.") if __name__ == '__main__': read_from_serial() ``` 上述程序创建了一个名为 `read_from_serial()` 函数用于持续监听来自指定串口数据流。当检测到新输入时,则尝试将其解码为 UTF-8 编码字符串形式,并打印出来[^1]。 需要注意的是,对于不同的操作系统平台而言,所使用的端口名称会有所不同;另外还需要确保目标设备确实已经正确配置好相应的波特率等其他必要的通信属性[^2]。 #### 处理异常情况 如果遇到 PySerial 无法正常工作的情况,比如不能正确接收到来自 Arduino 设备的消息等问题,可能是因为硬件连接不稳定或者是软件层面存在冲突所致。此时建议先检查物理连线是否牢固可靠,再确认双方设定的一致性,最后排查是否有第三方应用程序占用了相同的资源[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值