
Python与STM32F103串口通讯
初始化GPIO和USART 配置中断 LED指示 收到数据后进入循环 使用经过验证的硬件配置 严格按照接线图和规程进行连接 做到充分的ittesting 及时查阅相关文档和资料
发布日期:2021-05-14 10:09:41
浏览次数:18
分类:精选文章
本文共 3863 字,大约阅读时间需要 12 分钟。
安装Pyserial库与Python上位机开发
在进行硬件开发时,串口通信是常用的方法。本文将详细介绍如何安装Pyserial库以及Pyserial库的使用方法,同时提供一个简单的Python上位机代码框架供参考。
安装Pyserial库
安装Pyserial库是实现Python与串口通信的核心步骤。可以通过以下命令安装:
pip install pyserial
安装完成后,Pyserial库就可以在Python程序中使用,从而实现对各种串口设备的读写操作。
Pyserial库的应用开发
Pyserial库为开发者提供了丰富的接口,可以用来实现串口的开放、数据的发送和接收等功能。下面是一个简单的Pyserial库使用示例代码:
import serialdef open_ser(): global ser port = 'com5' # 更新实际的串口号 baudrate = 9600 # 根据实际波特率调整 try: ser = serial.Serial(port, baudrate, timeout=2) if ser.isOpen(): print("串口已打开") except Exception as e: print(f"串口打开失败:{e}")def send_msg(): try: send_datas = input("请输入要发送的数据:") if not send_datas: print("请先输入要发送的数据") else: ser.write(send_datas.encode('gbk')) print(f"已发送数据:{send_datas}") except Exception as e: print(f"数据发送失败:{e}")def read_msg(): try: print("正在等待接收数据...") while ser.in_waiting() > 0: try: data = ser.read(ser.in_waiting).decode('gbk') if data: print(f"接收到的数据:{data}") except Exception as e: print(f"接收数据失败:{e}") except Exception as e: print(f"读取数据失败:{e}")def close_ser(): try: if ser: ser.close() if not ser: print("串口已关闭") else: print("串口未能正确关闭") except Exception as e: print(f"关闭串口失败:{e}")
上述代码是一个简单的串口通信例子,主要实现了串口的打开、数据的发送和接收以及串口的关闭功能。这些功能可以根据实际需求进行扩展和优化。
STM32作为一个常用的嵌入式开发平台,在工业控制领域得到了广泛应用。本节将介绍一个简单的STM32程序,该程序主要用于接收并反馈数据。
STM32下位机程序设计
在STM32编程中,开发一个简单的串口程序非常有用。例如,可以设计一个接收数据并反馈的程序。以下是一个导引型程序的示例:
#include#include void USART1_Init(u32 baudrate) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // 启用相关时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 配置GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // RX GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置USART USART_InitStructure.USART_BaudRate = baudrate; USART_WordLength = USART_WordLength_8b; USART_StopBits = USART_StopBits_1; USART_Parity = USART_Parity_No; USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ClearFlag(USART1, USART_Flag_TC); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 配置中断 NVIC_InitStructure.NVIC_IRQChannel =USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_Init(&NVIC_InitStructure);}int main(void) { SysTick_Init(72); // LED 初始化 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_Speed = GPIO_Speed_50MHz; GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Pin = GPIO_Pin_13; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC, GPIO_Pin_13); // 初始化串口并进入主循环 USART1_Init(9600); // 替换为实际的波特率 while(1) { // 模拟处理接收到的数据 // 您可以在这里添加实际的数据处理逻辑 delay_ms(1000); }}
以上代码是一个简单的STM32串口程序,主要包括以下功能:
在实际开发中,可以根据具体需求添加更多的功能,比如:
- 数据的 crc 刷除和验证
- 投水闸方式的数据发送
- 多线程接收和发送
- 进程管理功能
这个程序可以用来验证串口通信是否正常工作。接收到的数据将会被原封不动地发送回,符合要求。
总之,从安装Pyserial库到编写Python上位机代码,再到实现STM32下位机程序,这些都是硬件开发中常用的步骤。在开发过程中,建议做到以下几点:
通过不断的实践和优化,能够快速提升自身硬件开发的效率。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月19日 14时09分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
推荐系统资料
2019-03-11
文件系统的层次结构
2019-03-11
减少磁盘延迟时间的方法
2019-03-11
磁盘的管理
2019-03-11
FCFS、SJF、HRRN调度算法
2019-03-11
vue(渐进式前端框架)
2019-03-11
权值初始化和与损失函数
2019-03-11
案例讨论
2019-03-11
传输层基本功能
2019-03-11
Maven基本概念
2019-03-11
设计评审检查表
2019-03-11
最长公共子序列
2019-03-11
分治算法的一般描述和分析方法
2019-03-11
问题的计算复杂度:排序问题
2019-03-11