win 10环境 python与stm32通讯

1 安装pyserial

pip install pyserial

2 python 控制代码

import serial #导入串口通信库
from time import sleep

ser = serial.Serial()

def port_open_recv():#对串口的参数进行配置
    ser.port='COM8'
    ser.baudrate=115200
    ser.bytesize=8
    ser.stopbits=1
    ser.parity="N"#奇偶校验位
    ser.timeout = 1
    ser.open()
    if(ser.isOpen()):
        print("串口打开成功!")
    else:
        print("串口打开失败!")
#isOpen()函数来查看串口的开闭状态



def port_close():
    ser.close()
    if(ser.isOpen()):
        print("串口关闭失败!")
    else:
        print("串口关闭成功!")

def send(send_data):
    if(ser.isOpen()):
        ser.write(send_data.encode('utf-8'))#编码
        print("发送成功",send_data)
    else:
        print("发送失败!")

if __name__ == '__main__':
    port_open_recv()
    while True:
        a=input("输入要发送的数据:")
        send(a)
        sleep(0.5)#起到一个延时的效果,这里如果不加上一个while True,程序执行一次就自动跳出了

2.1 port ‘com8’: PermissionError(13, ‘拒绝访问。’, None, 5) 可能问题

1 以管理员权限运行pycharm
2 串口被占用

3 STM 32 程序

3.1 主程序

/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   ´®¿ÚÖжϽÓÊÕ²âÊÔ
  ******************************************************************************
  * @attention
  *
  * ʵÑéƽ̨:Ò°»ð F103-Ö¸ÄÏÕß STM32 ¿ª·¢°å 
  * ÂÛ̳    :http://www.firebbs.cn
  * ÌÔ±¦    :https://fire-stm32.taobao.com
  *
  ******************************************************************************
  */ 
 
 
#include "stm32f10x.h"
#include "./led/bsp_led.h" 
#include "./usart/bsp_usart.h" 
//#include "./breath/bsp_breathing" 

static void Show_Message(void);
  
/**
  * @brief  Ö÷º¯Êý
  * @param  ÎÞ
  * @retval ÎÞ
  */
int main(void)
{	
  char ch;
  
  /* ³õʼ»¯RGB²ÊµÆ */
  LED_GPIO_Config();
  
  /* ³õʼ»¯USART ÅäÖÃģʽΪ 115200 8-N-1 */
  USART_Config();
	
  /* ´òÓ¡Ö¸ÁîÊäÈëÌáʾÐÅÏ¢ */
  Show_Message();
  while(1)
	{	
    /* »ñÈ¡×Ö·ûÖ¸Áî */
    ch=getchar();
    printf("½ÓÊÕµ½×Ö·û£º%c\n",ch);
    
    /* ¸ù¾Ý×Ö·ûÖ¸Áî¿ØÖÆRGB²ÊµÆÑÕÉ« */
    switch(ch)
    {
      case '1':
        LED_RED;
      break;
      case '2':
        LED_GREEN;
      break;
      case '3':
        LED_BLUE;
      break;
      case '4':
        LED_YELLOW;
      break;
      case '5':
        LED_PURPLE;
      break;
      case '6':
        LED_CYAN;
      break;
      case '7':
        LED_WHITE;
      break;
      case '8':
        LED_RGBOFF;
      break;
      default:
        /* Èç¹û²»ÊÇÖ¸¶¨Ö¸Áî×Ö·û£¬´òÓ¡ÌáʾÐÅÏ¢ */
        Show_Message();
        break;      
    }   
	}	
}


/**
  * @brief  ´òÓ¡Ö¸ÁîÊäÈëÌáʾÐÅÏ¢
  * @param  ÎÞ
  * @retval ÎÞ
  */
static void Show_Message(void)
{
  printf("\r\n   ÕâÊÇÒ»¸öͨ¹ý´®¿ÚͨÐÅÖ¸Áî¿ØÖÆRGB²ÊµÆʵÑé \n");
  printf("ʹÓà  USART  ²ÎÊýΪ£º%d 8-N-1 \n",DEBUG_USART_BAUDRATE);
  printf("¿ª·¢°å½Óµ½Ö¸Áîºó¿ØÖÆRGB²ÊµÆÑÕÉ«£¬Ö¸Áî¶ÔÓ¦ÈçÏ£º\n");
  printf("   Ö¸Áî   ------ ²ÊµÆÑÕÉ« \n");
  printf("     1    ------    ºì \n");
  printf("     2    ------    ÂÌ \n");
  printf("     3    ------    ˦ \n");
  printf("     4    ------    Ȯ \n");
  printf("     5    ------    ×Ï \n");
  printf("     6    ------    Çà \n");
  printf("     7    ------    °× \n");
  printf("     8    ------    Ãð \n");  
}

/*********************************************END OF FILE**********************/

3.2 串口中断

/**
  ******************************************************************************
  * @file    bsp_usart.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   Öض¨Ïòc¿âprintfº¯Êýµ½usart¶Ë¿Ú
  ******************************************************************************
  * @attention
  *
  * ʵÑéƽ̨:Ò°»ðSTM32 F103-Ö¸ÄÏÕß ¿ª·¢°å  
  * ÂÛ̳    :http://www.firebbs.cn
  * ÌÔ±¦    :https://fire-stm32.taobao.com
  *
  ******************************************************************************
  */ 
	
#include "bsp_usart.h"

 /**
  * @brief  USART GPIO ÅäÖÃ,¹¤×÷²ÎÊýÅäÖÃ
  * @param  ÎÞ
  * @retval ÎÞ
  */
void USART_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;

	// ´ò¿ª´®¿ÚGPIOµÄʱÖÓ
	DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
	
	// ´ò¿ª´®¿ÚÍâÉèµÄʱÖÓ
	DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

	// ½«USART TxµÄGPIOÅäÖÃΪÍÆÍ츴ÓÃģʽ
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  // ½«USART RxµÄGPIOÅäÖÃΪ¸¡¿ÕÊäÈëģʽ
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
	
	// ÅäÖô®¿ÚµÄ¹¤×÷²ÎÊý
	// ÅäÖò¨ÌØÂÊ
	USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
	// ÅäÖà ÕëÊý¾Ý×Ö³¤
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	// ÅäÖÃֹͣλ
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	// ÅäÖÃУÑéλ
	USART_InitStructure.USART_Parity = USART_Parity_No ;
	// ÅäÖÃÓ²¼þÁ÷¿ØÖÆ
	USART_InitStructure.USART_HardwareFlowControl = 
	USART_HardwareFlowControl_None;
	// ÅäÖù¤×÷ģʽ£¬ÊÕ·¢Ò»Æð
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	// Íê³É´®¿ÚµÄ³õʼ»¯ÅäÖÃ
	USART_Init(DEBUG_USARTx, &USART_InitStructure);	
	
	// ʹÄÜ´®¿Ú
	USART_Cmd(DEBUG_USARTx, ENABLE);	    
}

/*****************  ·¢ËÍÒ»¸ö×Ö·û **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
	/* ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ýµ½USART */
	USART_SendData(pUSARTx,ch);
		
	/* µÈ´ý·¢ËÍÊý¾Ý¼Ä´æÆ÷Ϊ¿Õ */
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	
}

/*****************  ·¢ËÍ×Ö·û´® **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
	unsigned int k=0;
  do 
  {
      Usart_SendByte( pUSARTx, *(str + k) );
      k++;
  } while(*(str + k)!='\0');
  
  /* µÈ´ý·¢ËÍÍê³É */
  while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
  {}
}

/*****************  ·¢ËÍÒ»¸ö16λÊý **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{
	uint8_t temp_h, temp_l;
	
	/* È¡³ö¸ß°Ëλ */
	temp_h = (ch&0XFF00)>>8;
	/* È¡³öµÍ°Ëλ */
	temp_l = ch&0XFF;
	
	/* ·¢Ë͸߰Ëλ */
	USART_SendData(pUSARTx,temp_h);	
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
	
	/* ·¢Ë͵ͰËλ */
	USART_SendData(pUSARTx,temp_l);	
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	
}

///Öض¨Ïòc¿âº¯Êýprintfµ½´®¿Ú£¬Öض¨Ïòºó¿ÉʹÓÃprintfº¯Êý
int fputc(int ch, FILE *f)
{
		/* ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ýµ½´®¿Ú */
		USART_SendData(DEBUG_USARTx, (uint8_t) ch);
		
		/* µÈ´ý·¢ËÍÍê±Ï */
		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);		
	
		return (ch);
}

///Öض¨Ïòc¿âº¯Êýscanfµ½´®¿Ú£¬ÖØдÏòºó¿ÉʹÓÃscanf¡¢getcharµÈº¯Êý
int fgetc(FILE *f)
{
		/* µÈ´ý´®¿ÚÊäÈëÊý¾Ý */
		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);

		return (int)USART_ReceiveData(DEBUG_USARTx);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值