python与stm32f103c8串口通信
时间: 2025-02-05 09:21:14 浏览: 42
### 实现Python与STM32F103C8之间串口通信
为了实现Python与STM32F103C8之间的串口通信,需要配置STM32端的UART外设并编写相应的中断处理程序来接收数据。同时,在PC端使用Python脚本来发送和接收数据。
#### 配置STM32 UART外设
在`stm32f1xx_it.c`文件中定义了一个名为`USART1_ReceiveIDLE`的函数[^1]。此函数将在接收到完整的字符串后被调用。对于初始化部分,则需利用`USART_Cmd()`命令开启串口,并通过`USART_ITConfig()`设置所需的中断类型[^2]。
```c
// stm32f1xx_it.c 文件中的部分内容
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET){
// 调用接收完成后的回调函数
USART1_ReceiveIDLE();
// 清除标志位
USART_ClearFlag(USART1, USART_FLAG_IDLE);
}
}
```
接着是在主程序里启动串口:
```c
// main.c 中的部分内容
int main(void)
{
/* 初始化系统 */
// 开启USART1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// 设置波特率、字长等参数...
USART_InitTypeDef usart_init_struct;
usart_init_struct.USART_BaudRate = 115200; // 波特率为115200bps
usart_init_struct.USART_WordLength = USART_WordLength_8b;
usart_init_struct.USART_StopBits = USART_StopBits_1;
usart_init_struct.USART_Parity = USART_Parity_No ;
usart_init_struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
usart_init_struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1,&usart_init_struct); // 应用上述配置
// 启动相应中断
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
// 打开USART1
USART_Cmd(USART1, ENABLE); // 使用USART_Cmd()使能串口
while (1){/* 主循环 */}
}
```
#### 编写Python客户端代码
接下来展示一段简单的Python脚本作为上位机软件的一部分,它能够向单片机发送消息以及读取返回的数据包。
```python
import serial
from time import sleep
ser = serial.Serial('COM3', baudrate=115200, timeout=1)
try:
ser.write(b'Hello from PC!\r\n') # 发送测试信息给MCU
response = ser.readline().decode('utf-8').strip()
print(f"Received message: {response}") # 显示来自MCU的信息
finally:
ser.close()
```
这段Python代码尝试打开指定编号的串行端口(这里假设为`COM3`),设定相同的波特率以便于匹配硬件上的设置;之后执行一次性的写入操作并向控制台打印任何已接收到的内容。
阅读全文
相关推荐




















