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);
}