精华内容
下载资源
问答
  • 开始接触串口时,视乎有点懵懂,现在搞清楚了,希望对于现在懵懂的你有班助,一串数据你可以用FOR语句,想发送多少个都可以
  • openmv串口传输数字.zip

    2019-06-21 18:36:17
    在做串口传输的过程中遇到了串口传输数字的问题,因为字符传输数字的方式操作实现麻烦传输效率低下,因此参照相关资料写了这个把多个数字直接发送,接收后直接使用。
  • } } /* *@brief 设置串口数据位,停止位和效验位 *@param fd 类型 int 打开的串口文件句柄* *@param databits 类型 int 数据位 取值 为 7 或者8* *@param stopbits 类型 int 停止位 取值为 1 或者2* *@param parity...

    #include /*标准输入输出定义*/

    #include

    #include /*Unix标准函数定义*/

    #include /**/

    #include /**/

    #include /*文件控制定义*/

    #include /*PPSIX终端控制定义*/

    #include /*错误号定义*/

    #include

    #define FALSE 1

    #define TRUE 0

    typedef unsigned int __u32;

    struct serial_rs485 {

    __u32 flags;                    /* RS485 feature flags */

    #define SER_RS485_ENABLED            (1 << 0)

    #define SER_RS485_RTS_ON_SEND (1 << 1)

    #define SER_RS485_RTS_AFTER_SEND (1 << 2)

    __u32 delay_rts_before_send; /* Milliseconds */

    __u32 delay_rts_after_send; /* Milliseconds */

    __u32 padding[6];                /* Memory is cheap, new structs are a royal PITA .. */

    };

    #define TIOCGRS485 0x542E //T

    #define TIOCSRS485 0x542F     //R

    struct serial_rs485 rs485;

    char *recchr="We received:\"";

    int speed_arr[] = {

    B921600, B460800, B230400, B115200, B57600, B38400, B19200,

    B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600,

    B4800, B2400, B1200, B300,

    };

    int name_arr[] = {

    921600, 460800, 230400, 115200, 57600, 38400, 19200,

    9600, 4800, 2400, 1200, 300, 38400, 19200, 9600,

    4800, 2400, 1200, 300,

    };

    void set_speed(int fd, int speed)

    {

    int i;

    int status;

    struct termios Opt;

    tcgetattr(fd, &Opt);

    for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) {

    if (speed == name_arr[i])    {

    tcflush(fd, TCIOFLUSH);

    cfsetispeed(&Opt, speed_arr[i]);

    cfsetospeed(&Opt, speed_arr[i]);

    status = tcsetattr(fd, TCSANOW, &Opt);

    if (status != 0)

    perror("tcsetattr fd1");

    return;

    }

    tcflush(fd,TCIOFLUSH);

    }

    }

    /*

    *@brief 设置串口数据位,停止位和效验位

    *@param fd 类型 int 打开的串口文件句柄*

    *@param databits 类型 int 数据位 取值 为 7 或者8*

    *@param stopbits 类型 int 停止位 取值为 1 或者2*

    *@param parity 类型 int 效验类型 取值为N,E,O,,S

    */

    int set_Parity(int fd,int databits,int stopbits,int parity)

    {

    struct termios options;

    if ( tcgetattr( fd,&options) != 0) {

    perror("SetupSerial 1");

    return(FALSE);

    }

    options.c_cflag &= ~CSIZE ;

    switch (databits) /*设置数据位数*/ {

    case 7:

    options.c_cflag |= CS7;

    break;

    case 8:

    options.c_cflag |= CS8;

    break;

    default:

    fprintf(stderr,"Unsupported data size\n");

    return (FALSE);

    }

    switch (parity) {

    case 'n':

    case 'N':

    options.c_cflag &= ~PARENB; /* Clear parity enable */

    options.c_iflag &= ~INPCK; /* Enable parity checking */

    break;

    case 'o':

    case 'O':

    options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/

    options.c_iflag |= INPCK; /* Disnable parity checking */

    break;

    case 'e':

    case 'E':

    options.c_cflag |= PARENB; /* Enable parity */

    options.c_cflag &= ~PARODD; /* 转换为偶效验*/

    options.c_iflag |= INPCK; /* Disnable parity checking */

    break;

    case 'S':

    case 's': /*as no parity*/

    options.c_cflag &= ~PARENB;

    options.c_cflag &= ~CSTOPB;

    break;

    default:

    fprintf(stderr,"Unsupported parity\n");

    return (FALSE);

    }

    /* 设置停止位*/

    switch (stopbits) {

    case 1:

    options.c_cflag &= ~CSTOPB;

    break;

    case 2:

    options.c_cflag |= CSTOPB;

    break;

    default:

    fprintf(stderr,"Unsupported stop bits\n");

    return (FALSE);

    }

    /* Set input parity option */

    if (parity != 'n')

    options.c_iflag |= INPCK;

    options.c_cc[VTIME] = 150; // 15 seconds

    options.c_cc[VMIN] = 0;

    options.c_lflag &= ~(ECHO | ICANON);

    tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */

    if (tcsetattr(fd,TCSANOW,&options) != 0) {

    perror("SetupSerial 3");

    return (FALSE);

    }

    return (TRUE);

    }

    /**

    *@breif 打开串口

    */

    int OpenDev(char *Dev)

    {

    int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY

    if (-1 == fd) { /*设置数据位数*/

    perror("Can't Open Serial Port");

    return -1;

    } else

    return fd;

    }

    /* The name of this program */

    const char * program_name;

    /* Prints usage information for this program to STREAM (typically

    * stdout or stderr), and exit the program with EXIT_CODE. Does not

    * return.

    */

    void print_usage (FILE *stream, int exit_code)

    {

    fprintf(stream, "Usage: %s option [ dev... ] \n", program_name);

    fprintf(stream,

    "\t-h --help Display this usage information.\n"

    "\t-d --device The device ttyS[0-3] or ttyEXT[0-3]\n"

    "\t-s --string Write the device data\n");

    exit(exit_code);

    }

    /*

    *@breif main()

    */

    int main(int argc, char *argv[])

    {

    int fd, next_option, havearg = 0;

    char *device = "/dev/ttyS1"; /* Default device */

    int nread;            /* Read the counts of data */

    char buff[512];        /* Recvice data buffer */

    pid_t pid;

    char *xmit = "1234567890"; /* Default send data */

    const char *const short_options = "hd:s:";

    const struct option long_options[] = {

    { "help", 0, NULL, 'h'},

    { "device", 1, NULL, 'd'},

    { "string", 1, NULL, 's'},

    { NULL, 0, NULL, 0 }

    };

    program_name = argv[0];

    do {

    next_option = getopt_long (argc, argv, short_options, long_options, NULL);

    switch (next_option) {

    case 'h':

    print_usage (stdout, 0);

    case 'd':

    device = optarg;

    havearg = 1;

    break;

    case 's':

    xmit = optarg;

    havearg = 1;

    break;

    case -1:

    if (havearg) break;

    case '?':

    print_usage (stderr, 1);

    default:

    abort ();

    }

    }while(next_option != -1);

    sleep(1);

    fd = OpenDev(device);

    if (fd > 0) {

    set_speed(fd, 19200);

    } else {

    fprintf(stderr, "Error opening %s: %s\n", device, strerror(errno));

    exit(1);

    }

    if (set_Parity(fd,8,1,'N')== FALSE) {

    fprintf(stderr, "Set Parity Error\n");

    close(fd);

    exit(1);

    }

    unsigned char tMsg[256], rMsg[256];

    memset(tMsg, 0X00, 256);

    memset(rMsg, 0X00, 256);

    tMsg[0] = 0x02;

    tMsg[1] = 0x00;

    tMsg[2] = 0x00;

    tMsg[3] = 0x04;

    tMsg[4] = 0x15;

    tMsg[5] = 0x10;

    tMsg[6] = 0x03;

    tMsg[7] = 0x1C;

    tMsg[8] = 0x03;

    pid = fork();

    if (pid < 0) {

    fprintf(stderr, "Error in fork!\n");

    } else if (pid == 0){

    while(1) {

    printf("SEND: %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",

    tMsg[0],

    tMsg[1],

    tMsg[2],

    tMsg[3],

    tMsg[4],

    tMsg[5],

    tMsg[6],

    tMsg[7],

    tMsg[8]);

    write(fd, tMsg, 9);

    sleep(1);

    }

    exit(0);

    } else {

    while(1) {

    nread = read(fd, rMsg, 9);

    if (nread > 0) {

    printf("READ: %02X %02X %02X %02X %02X %02X %02X %02X %02X\n

    展开全文
  • STM32串口发送任意字符、字符以及数组,简单易懂,易于使用
  • 本代码使用C语言实现串口数据发送、接收,代码带详细注解,便于初学者理解,只需要编译就可直接使用。
  • 查找系统里存在着的串口资源并发送和接收16进制数字
  • timestamp=1563807838&req_id=201907222303570100230601438916BD5&group_id=67160264916892390441、这节课我们来实现串口的写入与接收,同样查看pyseri...

    https://m.toutiaocdn.com/group/6716026491689239044/?app=news_article&timestamp=1563807838&req_id=201907222303570100230601438916BD5&group_id=6716026491689239044

    1、这节课我们来实现串口的写入与接收,同样查看pyserial的在线文档,查看数据的写入与发送。

    2、Write方法,文档中表明,写的方法只能写bytes,所以我们在com.py,增加两个函数用来写数据:

    def comwritebytes(self,b):

    wlen=self.com.write(b)

    return wlen

    def comwritestring(self,b):

    wlen=self.com.write(b.encode('utf-8'))

    return wlen

    一个用来直接发送bytes数据,另一个将string数据转为bytes再发送,接着我们需要更新下主界面:

    增加一个line edite命名为txt_send,一个checkbox命名为cb_send,一个发送与接收按钮,分别命名为btn_send、btn_receive.

    我们串口发送的代码已经完成了,那么我们将功能增加到界面中来。

    1、在界面中发送string类型的数据,先更新最新的界面代码,在cmd中输入指令:pyuic5 -o uart.py uart.ui

    接着在uartform.py中增加代码:

    def WriteData(self):

    try:

    msg=self.new.txt_send.text()

    cbcheck=self.new.cb_send.checkState()

    if cbcheck:

    pass

    else:

    self.com.comwritestring(msg)

    except Exception as e:

    self.ShowBox(str(e))

    当cb_send没有被选中的时候,也就是默认发送string类型,如果我要发送hex数据,如:01 ff 00 12这类数据的时候呢?

    我们来实现一个将hex数据转为bytes的代码:

    def HexToBytes(self):

    bl=[]

    try:

    text=self.new.txt_send.text()

    slist=text.split(' ')

    for e in slist:

    b=int(e,16)

    bl.append(b)

    except Exception as e:

    self.ShowBox(str(e))

    return bl

    将发送代码更新为:

    def WriteData(self):

    try:

    slen=0

    msg=self.new.txt_send.text()

    cbcheck=self.new.cb_send.checkState()

    if cbcheck:

    bl=self.HexToBytes()

    slen=self.com.comwritebytes(bl)

    else:

    slen=self.com.comwritestring(msg)

    self.ShowMsg('发送数据长度'+str(slen))

    except Exception as e:

    self.ShowBox(str(e))

    将函数绑定到按钮:self.new.btn_send.clicked.connect(self.WriteData)

    运行一下,不打开串口发送,提示错误:

    打开串口发送string:

    勾选hex,发送:

    提示数据格式错误,接着我们更改数据格式后发送:

    到此为止,串口的数据发送我们已经完成,下一节课将实现串口接收数据。

    展开全文
  • 51单片机按键通过串口发送字符

    热门讨论 2011-05-15 11:56:04
    本程序将51单片机的按键与串口发送很好的联系在一起,众所周知,如果处理不好的话可能会次按键后,单片机不停的重复发送,且程序中应用了很好的去抖动部分,本程序在郭天祥实验板上验证过,可放心使用。
  • 1.串口发送一个字节数据 /************************************************* 函数:USART1_TX_Byte 功能:串口发送一个字节 入口:一个字节 *************************************************/ void USART1_TX_...

    STM32——HAL版——串口发送字符串函数

    1.串口发送一个字节数据

    /*************************************************
    函数:USART1_TX_Byte
    功能:串口发送一个字节
    入口:一个字节
    *************************************************/
    void USART1_TX_Byte(unsigned char data)
    {
    	USART1->TDR = data;
    	while((USART1->ISR & 0x40) == 0);
    }
    

    2.串口发送一个字符串

    /*************************************************
    函数:USART1_TX_String
    功能:串口发送一个字符串
    入口:字符数组
    *************************************************/
    void USART1_TX_String(unsigned char *str)
    {
    	while(*str!='\0')
    	{
    		USART1_TX_Byte(*str++);
    	}
    }
    

    3.串口发送指定长度的数组

    /*************************************************
    函数:USART1_Tx_Array
    功能:串口发送指定长度的数组
    入口:字符数组
    *************************************************/
    void USART1_Tx_Array(unsigned char *str,uint8_t length)
    {
    	int i;
    	int n = 0;
    	n = length;
    	for(i = 0; i < n;i++)
    	{
    		USART1_TX_Byte(str[i]);
    	}
    }
    
    展开全文
  • 51串口发送数据

    千次阅读 2021-01-20 15:33:45
    串口通信为串行通信方式,即每次只能发送一位,且为单工,一端固定为发送端,另一端为接收端。 51单片机的串口需要配置的寄存器可以直接通过STC-ISP这个软件配置,选择好晶振的频率和波特率直接生成就可以了 下面...

    串口通信

    需要知道几个基础知识点。
    波特率 起始位 停止位 校验位,具体的可以去查书。
    串口通信为串行通信方式,即每次只能发送一位,且为单工,一端固定为发送端,另一端为接收端。
    51单片机的串口需要配置的寄存器可以直接通过STC-ISP这个软件配置,选择好晶振的频率和波特率直接生成就可以了
    在这里插入图片描述下面直接贴代码

    bit uart1_busy=0;
    
    void UartInit(void) //115200bps@12.000MHz
    {
        SCON = 0x50;  //8位数据,可变波特率
        AUXR |= 0x01; //串口1选择定时器2为波特率发生器
        AUXR |= 0x04; //定时器2时钟为Fosc,即1T
        T2L = 0xE6;   //设定定时初值
        T2H = 0xFF;   //设定定时初值
        AUXR |= 0x10; //启动定时器2
    }
    
    void uart1_sendByte(char byte)	//串口发送一个字节
    {
        while (uart1_busy);
        uart1_busy = 1;
        SBUF = byte;
        TI = 0;
    }
    
    void uart1_sendstring(char* str)	//串口发送字符串
    {
        while(*str)
        {
            uart1_sendByte(*str++);
        }
    }
    
    char putchar(char c)		//	用于printf函数
    {
        uart1_sendByte(c);
        return c;
    }
    
    void UART1_IRQ_Handle(void) interrupt 4 using 1
    {
        if (TI)
        {
            TI = 0;
            uart1_busy = 0;
        }
        if (RI)
        {
            RI = 0;
        }
    }
    
    void Delay100ms()		//@12.000MHz
    {
    	unsigned char i, j, k;
    
    	_nop_();
    	_nop_();
    	i = 5;
    	j = 144;
    	k = 71;
    	do
    	{
    		do
    		{
    			while (--k);
    		} while (--j);
    	} while (--i);
    }
    
    
    void main()
    {
        UartInit(); //初始化串口
        EA = 1;     //开总中断
        ES=1;		//打开串口中断
        while (1)
        {
            uart1_sendstring("Hellow World!\n");
            Delay100ms();
            printf("Hello World!\n"); //串口打印结果
        }
    }
    

    51单片机用SBUF来储存发送和接收的到的数据,所以可以直接将需要发送的值赋值给SBUF。另外如果想要使用printf函数,需要重定义一下putchar函数才行。

    展开全文
  • python串口发送16进制数

    千次阅读 2021-01-12 03:13:09
    1.数据采用python中str()函数,转换为字符格式,再串口接受端对字符进行解码例如python通过串口发送0x08数据至串口接受器,此时可以通过将0x08转换为str格式发送,再通过串口接收器解析代码将str转化为1...
  • 使用串口助手发送16进制数控制相应的led灯的亮灭
  • 数字,如果为空其后数据不发送。同行中数据依次发送,遇到单 元格为空时为止。 使用技巧:发送Excel中的数据提供发送范围选择、循环发送或 设定发送次数、设定发送间隔功能,在发送过程中以上选项都可实时 动态...
  • 这个是十六进制的数据,怎么来构建这种数据来发送呢55 AA 01 00 01 00 01首先和硬件通信,我们一般是通过输入输出流来发送或者接收个byte[]数组;首先我们得构建这个byte数组String拼接简单的命令可以先拼接字符...
  • 51单片机 串口发送数据(只是发送)用于调试。 #include <reg51.h> #define uchar unsigned char #define uint unsigned int #define XTAL 11059200 // CUP 晶振频率 #define baudrate 9600 // 通信波特...
  • 本程序是通过Quartus ii 编程实现与PC机的串口进行通信,可通过串口精灵进行调试。当FPGA实验板上电后,打开串口,就会接收到字符”welcome"。
  • #include "stm32f10x.h" #include &lt;stdio.h&gt; //下面strlen函数需要此头文件 #include "USART.h"...** 功能描述: 将个32位的变量dat转为字符,比如把1234...
  • STM32-串口一收,串口二发配置引脚时钟配置时钟树串口配置代码 配置引脚 时钟配置 时钟树 这是我的MCU是STM32F401cc,所以频率最高是84Mhz 串口配置 代码 在初始化完串口之后。我们就使能串口中断接收数据,存入...
  • 标准库函数对每个外设都建立了个初始化结构体,比如USART_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如USART_Init()调用,这些设定参数将会设置外设相应的寄存器,达到配置外设...
  • 你可能会发现,串口发送帧中数据位只能为5、6、7、8 位,也就是次最多发送8bit的数据。 最近在做个项目,需要将图像数据保存到本地。想法是先将到来的图像数据写入RAM中,然后再读出来并用串口发送出去,...
  • Arduino通讯串口

    2020-12-19 11:59:45
    串口是Arduino与其它设备进行通信的接口所有的Arduino控制板有至少串口(又称作为UART或USART)。它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机进行通信。因此,如果你使用这些功能的同时...
  • STM32串口发送接收数据

    千次阅读 热门讨论 2021-07-14 18:56:39
    目录串口通信串口的结构体如何配置串口发送通过串口向电脑发送ok字符 串口通信 我用的32是stm32f10x最小系统没有UART4和UART5 USART : 通用同步异步收发器 UART : 通用异步收发器 nRTS : 请求发送 nCTS : 请求...
  • 嵌入式应用中经常需要通过键盘操作来产生中断,现在讨论如何用python3向串口发送按键指令python3操作串口需要调用pyserial库import serial串口的打开指令ser=serial.Serial(COM4)ser.baudrate=115200ser.timeout=0.5...
  • 我尝试了好几种网上推荐的方法...最后我选择转化一个,发送一个,方法可行。 代码如下: SBUF = num/1000+‘0’; while(!TI); TI=0; SBUF = num%1000/100+‘0’; while(!TI); TI=0; SBUF = num%100/10+‘0’; while...
  • 串口发送和接收int值我遇到的问题是当我尝试发送一个int值到串口并在Arduino程序中提取它。我在窗口的程序中使用WriteFile()发送int,并使用Serial.parseInt()在Arduino中进行拾取。当我发送char值时,我可以毫无...
  • FPGA串口发送16位数

    千次阅读 2019-05-08 20:49:17
    近期调试FPGA,用到串口模块,之前没写过串口发送16位数的实验,最近调试通了,上来分享一下。 主要思想其实和正常的串口发送模块差不多,就是多定义几个状态变量,设置好时序就行。本模块实现的功能是:时钟来之后...
  • STC15 串口一 接收 发送 基本程序

    万次阅读 热门讨论 2019-02-09 16:35:25
    使用串口一方便通过串口助手测试某些功能 //textUart1.c #include &lt;STC15F2Kxx.H&gt; #include "textUart1.h" char UAR[20],temp,rec_flag=0; static void Uart1_Init(void) //@11.0592...
  • 【LabVIEW串口编程】 02 串口发送

    千次阅读 多人点赞 2020-10-28 21:13:38
    串口发送一次数据过程的可以分为三个步骤:打开串口-->发送数据-->关闭串口。分别对应Confugure Port,Write,Close这三个函数。用这三个函数在LabVIEW中搭建如下程序 一个最简单的串口发送程序已经编写...
  • /// /// 建立串口设备控制块 /// /// 设备控制字符 /// 设备控制块 [DllImport("kernel32.dll")] private static extern bool BuildCommDCB(string lpDef, ref DCB lpDCB); /// /// 设置串口状态 /// /// 通信...
  • 串口发送接收浮点型数据

    万次阅读 2018-09-13 15:25:49
    转自:... ... 在做下位机通信时往往会用到串口,包括下位机将数据传输给上位机,或者是下位机与下位机之间进行数据传输,这时候就会遇到发送数据的问题,单片机通过串口发送数据时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,270
精华内容 7,708
关键字:

串口发送一串数字