Python与STM32F103串口通讯
发布日期: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 serial
def 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串口程序,主要包括以下功能:

  • 初始化GPIO和USART
  • 配置中断
  • LED指示
  • 收到数据后进入循环
  • 在实际开发中,可以根据具体需求添加更多的功能,比如:

    • 数据的 crc 刷除和验证
    • 投水闸方式的数据发送
    • 多线程接收和发送
    • 进程管理功能

    这个程序可以用来验证串口通信是否正常工作。接收到的数据将会被原封不动地发送回,符合要求。

    总之,从安装Pyserial库到编写Python上位机代码,再到实现STM32下位机程序,这些都是硬件开发中常用的步骤。在开发过程中,建议做到以下几点:

  • 使用经过验证的硬件配置
  • 严格按照接线图和规程进行连接
  • 做到充分的ittesting
  • 及时查阅相关文档和资料
  • 通过不断的实践和优化,能够快速提升自身硬件开发的效率。

    上一篇:keras-tensorflow yolo v3 如何实时输出loss、acc曲线
    下一篇:疲劳检测代码

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月19日 14时09分25秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章