精华内容
下载资源
问答
  • 本文主要讲了单片机串口接收字符串的相关知识,下面一起来学习下
  • 51单片机串口接收字符串比较
  • 本文主要讲了单片机串口接收字符串出错解决方法,下面一起来学习下
  • 51单片机串口接收字符串

    热门讨论 2010-04-12 16:41:11
    实际有两个程序 一个是接收以某一特定字符开头的字符串 并不接收此特定字符 这个字符只起个标志的作用。 另一个是单纯接收字符串。 所接受的字符串存在一个数组中,程序简洁命了。 所用单片机:STC89C52
  • 最近接了个项目,需要用到单片机接收字符串,第一时间去百度查看相关代码,但是翻来翻去代码都是一样的,要么极度麻烦,要么不能用,于是自己写了一个相关代码工程,在这里写一下如何使用,并且提供源工程代码(无需...

    写在前面

    最近接了个项目,需要用到单片机接收字符串,第一时间去百度查看相关代码,但是翻来翻去代码都是一样的,要么极度麻烦,要么不能用,于是自己写了一个相关代码工程,在这里写一下如何使用,并且提供源工程代码(无需积分,关注我即可下载),点击这里去下载

    工程测试环境

    WIN10

    STC-ISP串口助手

    STC12C5A60S2单片机

    最小单片机系统套件

    晶振是11.0592MHz

    测试结果

    在双机通信情况下,每两次消息间隔最低为50ms,即可正常识别,测试结果如图(未丢失任何数据)。

    代码工程结构

    模块化程度极高,任何一个文件都可以拿出即用。

    写在最后

    希望大家转载注明出处。如果觉得可以的话,来一波关注吧哈哈哈哈。

    展开全文
  • 串口接收字符串

    2013-07-04 15:52:01
    这是一个串口接收字符串并发送到串口助手的程序源码 希望对你有用
  • 串口接收字符串.zip

    2021-01-27 10:43:55
    串口接收字符串工程,亲自编写,亲测能用,上手即用。模块化完整。下载不要积分,关注我即可下载
  • STM32串口接收字符串

    2021-02-06 00:00:41
    该程序实现了串口1中断接收字符串(必须有换行符结尾,即勾选上串口调试助手上的“换行符”再发送)。方式完毕后,通过按键(GPIO)的方式再将接收的字符串发送出来。每次接收都会更新发送。字符串缓冲区设为20(可...
  • 通过STM32 串口1 接收字符串实现LED控制,程序通过判断\n识别字符串是否发送完成,所以串口调试助手上需勾选发送新行,发送LED1+ON点亮LED1,发送LED1+OFF关闭LED1,发送其他字符串翻转LED2
  • 用惯Arduino串口传输的朋友都知道,Arduino的Serial.read()每次只能读一个字节,但是有时想进行字符串通讯,就很麻烦了。废话少讲,直接上完整例子:编译只要一块Arduino,不需要任何外置元件。用Arduino编译器的...

    用惯Arduino串口传输的朋友都知道,Arduino的Serial.read()每次只能读一个字节,但是有时想进行字符串通讯,就很麻烦了。

    废话少讲,直接上完整例子:

    编译只要一块Arduino,不需要任何外置元件。

    用Arduino编译器的串口监视器即可看到结果,我们打什么文字进去,下面就会返回什么文字。

    String comdata = "";

    void setup()

    {

    Serial.begin(9600);

    }

    void loop()

    {

    while (Serial.available() > 0)

    {

    comdata += char(Serial.read());

    delay(2);

    }

    if (comdata.length() > 0)

    {

    Serial.println(comdata);

    comdata = "";

    }

    }

    代码很简单,comdata是一个字符串类型变量。Serial.available()是当前串口缓冲池的数据量。Serial.read()是读缓冲池的语句,每次只能读一个字节。

    用了String类型变量,很简单的实现了字符到字符串的加入,还有字符串输出,赋值等麻烦问题,所以很简单的代码就能处理串口数据。

    特别留意的是读串口时的delay(2)不能删掉,否则串口缓冲区不够时间接受数据。即使调小延时也会出错。具体数值也可以实验决定。

    再提醒一个:comdata说是一个字符串,也是一个数组,引用每个字的话可以用comdata[0],comdata[1]。。。comdata[n]。如果我们要每个字节取出的话,可以每个引用。

    效果:输入什么字符串,输出就是什么。

    输入:

    按send之后:

    再附送一个例子,在串口输入1011101..的话,就会令Arduino的D2~Dx引脚产生高/低电平,当然,一次发送的数据视Arduino引脚数而定,比如Arduino

    UNO/nano之类的,只有D2~D13十二个引脚。我们打12个数字就好。比如101101011010,如果中间有非0和1的字符,则自动跳过该位设置:比如122202221222这样。因为2不是允许范围内,就只设置D2/D6/D10的值了:

    String comdata = "";

    void setup()

    {

    Serial.begin(9600);

    for(int i = 2; i <= 13; i++) pinMode(i,

    OUTPUT);

    }

    void loop()

    {

    while (Serial.available() > 0)

    {

    comdata += int(Serial.read()) - '0';

    delay(2);

    }

    if(comdata.length() > 0)

    {

    for(int i = 0; i < comdata.length(); i++)

    {

    if(comdata[i]=='0'

    comdata[i]=='1')

    {

    digitalWrite(i + 2, comdata[i] - '0');

    Serial.print("Pin ");

    Serial.print(i + 2);

    Serial.print(" is ");

    Serial.println(comdata[i]);

    }

    }

    comdata = "";

    }

    }

    再来一个:进阶版(有待测试)

    输入六个逗号分隔数比如:50,20,5,255,20,20

    就能令Arduino的PWM引脚(3,5,6,9,10,11):按照PWM值发光。所以逗号分割数必须是0~255

    String comdata = "";

    int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark =

    0;

    void setup()

    {

    for(int i = 0; i < 6; i++) pinMode(PWMPin[i],

    OUTPUT);

    Serial.begin(9600);

    }

    void loop()

    {

    int j = 0;

    while (Serial.available() > 0)

    {

    comdata += char(Serial.read());

    delay(2);

    mark = 1;

    }

    if(mark == 1)

    {

    Serial.println(comdata);

    Serial.println(comdata.length());

    for(int i = 0; i < comdata.length() ; i++)

    {

    if(comdata[i] == ',')

    {

    j++;

    }

    else

    {

    numdata[j] = numdata[j] * 10 + (comdata[i] - '0');

    }

    }

    comdata = String("");

    for(int i = 0; i < 6; i++)

    {

    Serial.print("Pin ");

    Serial.print(PWMPin[i]);

    Serial.print(" = ");

    Serial.println(numdata[i]);

    analogWrite(PWMPin[i], numdata[i]);

    numdata[i] = 0;

    }

    mark = 0;

    }

    }

    展开全文
  • Arduino串口接收字符串

    万次阅读 多人点赞 2017-05-19 22:40:37
    Arduino串口接收字符串 用惯Arduino串口传输的朋友都知道,Arduino的Serial.read()每次只能读一个字节,但是有时想进行字符串通讯,就很麻烦了。  废话少讲,直接上完整例子:  编译只要一块Arduino,不...
    

       
     

    Arduino串口接收字符串


    用惯Arduino串口传输的朋友都知道,Arduino的Serial.read()每次只能读一个字节,但是有时想进行字符串通讯,就很麻烦了。 
    废话少讲,直接上完整例子: 

    编译只要一块Arduino,不需要任何外置元件。 
    用Arduino编译器的串口监视器即可看到结果,我们打什么文字进去,下面就会返回什么文字。 

    String comdata = "";

    void setup()
    {
        
    Serial.begin(9600);
    }

    void loop()
    {
        
    while (Serial.available() > 0)  
        {
            
    comdata += char(Serial.read());
            
    delay(2);
        }
        
    if (comdata.length() > 0)
        {
            
    Serial.println(comdata);
            
    comdata = "";
        }
    }

    代码很简单,comdata是一个字符串类型变量。Serial.available()是当前串口缓冲池的数据量。Serial.read()是读缓冲池的语句,每次只能读一个字节。 
    用了String类型变量,很简单的实现了字符到字符串的加入,还有字符串输出,赋值等麻烦问题,所以很简单的代码就能处理串口数据。 
    特别留意的是读串口时的delay(2)不能删掉,否则串口缓冲区不够时间接受数据。即使调小延时也会出错。具体数值也可以实验决定。 

    再提醒一个:comdata说是一个字符串,也是一个数组,引用每个字的话可以用comdata[0],comdata[1]。。。comdata[n]。如果我们要每个字节取出的话,可以每个引用。 


    效果:输入什么字符串,输出就是什么。 
    输入: 
     
    按send之后: 
     



    再附送一个例子,在串口输入1011101..的话,就会令Arduino的D2~Dx引脚产生高/低电平,当然,一次发送的数据视Arduino引脚数而定,比如Arduino UNO/nano之类的,只有D2~D13十二个引脚。我们打12个数字就好。比如101101011010,如果中间有非0和1的字符,则自动跳过该位设置:比如122202221222这样。因为2不是允许范围内,就只设置D2/D6/D10的值了:


    String comdata = "";
    void setup()
    {
      
    Serial.begin(9600);
      
    for(int i = 2; i <= 13; i++) pinMode(i, OUTPUT);
    }

    void loop()
    {
      
    while (Serial.available() > 0)
      {
        
    comdata += int(Serial.read()) - '0';
        
    delay(2);
      }
      
    if(comdata.length() > 0)
      {
        
    for(int i = 0; i < comdata.length(); i++)
        {
          
    if(comdata[i]=='0'||comdata[i]=='1')
          {
            
    digitalWrite(i + 2, comdata[i] - '0');
            
    Serial.print("Pin ");
            
    Serial.print(i + 2);
            
    Serial.print(" is ");
            
    Serial.println(comdata[i]);
          }
        }
        
    comdata = "";
      }
    }





     

     


    再来一个:进阶版(有待测试)
    输入六个逗号分隔数比如:50,20,5,255,20,20
    就能令Arduino的PWM引脚(3,5,6,9,10,11):按照PWM值发光。所以逗号分割数必须是0~255



    String comdata = "";
    int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;
    void setup()
    {
      
    for(int i = 0; i < 6; i++) pinMode(PWMPin[i], OUTPUT);
      
    Serial.begin(9600);
    }

    void loop()
    {
      
    int j = 0;
      
    while (Serial.available() > 0)
      {
        
    comdata += char(Serial.read());
        
    delay(2);
        
    mark = 1;
      }

      
    if(mark == 1)
      {
        
    Serial.println(comdata);
        
    Serial.println(comdata.length());
        
    for(int i = 0; i < comdata.length() ; i++)
        {
          
    if(comdata[i] == ',')
          {
            
    j++;
          }
          
    else
          
    {
            
    numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
          }
        }
        
    comdata = String("");


        
    for(int i = 0; i < 6; i++)
        {
          
    Serial.print("Pin ");
          
    Serial.print(PWMPin[i]);
          
    Serial.print(" = ");
          
    Serial.println(numdata[i]);
          
    analogWrite(PWMPin[i], numdata[i]);
          
    numdata[i] = 0;
        }
        
    mark = 0;
      }
    }
    展开全文
  • /*****************************************************************************函数功能:单片机接收电脑串口发送的字符串,已验证正常,最大可接收100个字符最近一直在研究这个串口接收字符串问题,也看了网上很多...

    /*****************************************************************************

    函数功能:单片机接收电脑串口发送的字符串

    ,

    已验证正常

    ,

    最大可接收

    100

    个字符

    最近一直在研究这个串口接收字符串问题

    ,

    也看了网上很多例子都不能实现

    ,

    现在

    终于将此程序调试成功

    .

    设计者

    :

    空心菜

    联系

    qq:190719416

    修改时间

    2016/07/15

    下午

    15:22

    ****************************************************************************/

    #include

    #define uint unsigned int

    #define uchar unsigned char

    #define Fclk 11059200UL

    //

    晶体频率

    #define BitRate 9600UL

    //

    波特率

    uchar

    st[100];

    //

    保存串口数据的缓冲区数组

    ,

    如果想接收更多的字符可创建多

    个数组

    volatile uchar Sending;

    static uchar i=0;

    uchar flag;

    /****************************************************

    函数功能:串口初始化

    入口参数:无

    回:无

    注:无

    *****************************************************/

    void InitUART(void)

    {

    EA=0;

    //

    暂时关闭中断

    TMOD&=0x0F;

    //

    定时器

    1

    模式控制在高

    4

    TMOD=0x20;

    //

    定时器

    1

    工作在模式

    2

    ,自动重装模式

    ,

    定时器

    0

    工作在模式

    1,16

    位定时

    SCON=0x50;

    //

    串口工作在模式

    1

    TH1=256-Fclk/(BitRate*12*16);

    //

    给定时器装初值

    TL1=256-Fclk/(BitRate*12*16);

    PCON|=0x80;

    //

    串口波特率加倍

    ES=1;

    //

    串行中断允许

    TR1=1;

    //

    启动定时器

    1

    REN=1;

    //

    允许接收

    EA=1;

    //

    允许中断

    }

    /*****************************************************

    函数功能:串口中断处理

    入口参数:无

    回:无

    注:无

    展开全文
  • FPGA串口收发字符串串口接收模块,有需要的同学可以下载!
  • STM32串口接收字符串并控制LED

    万次阅读 多人点赞 2018-08-05 11:32:50
    通过STM32 串口1 接收字符串实现LED控制,程序通过判断\n识别字符串是否发送完成,所以串口调试助手上需勾选发送新行,发送LED1+ON点亮LED1,发送LED1+OFF关闭LED1,发送其他字符串翻转LED2
  • 串口接收中断函数一次只能接收一个字,接收一个字符串并存下常用方法: ①设置标志位:如在末尾加入标志位’\r’,’\n’;前缀+数据+后缀 ②定时判断接收数据的长度,如果在规定时间内,长度没有什么变化,证明已经...
  • STM8 串口接收字符串问题

    千次阅读 2017-09-30 17:42:56
    STM8串口接收中断和接收延时
  • N76E003 串口接收字符串,完整输出

    千次阅读 2019-12-06 14:57:14
    问题是比如:N76E003串口,接收连续数据不完整怎么解决,N76E003串口接收不定长的字符串怎么解决? 这里提供一个方案解决这个问题,采用中断方式完成串口接收,波特率 9600到115200 都没有问题: 参考官方案例为基础...
  • 在基础实验成功的基础上,对串口的调试方法进行实践。硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中。b) 初始化函数定义:void USART_Configuration(void); //定义串口...
  • c#串口接收字符串

    2016-06-11 20:03:13
    我在单片机上每10s发送4个字符到上位机 波特率9600 上位机接收事件里面将接收到的字符和时间记录日志,代码如下: private void serialPort1_DataReceived(object sender, System.IO.Ports....
  • Arduino串口接收字符串(转载)

    千次阅读 2019-04-15 14:22:42
    用惯Arduino串口传输的朋友都知道,Arduino的Serial.read()每次只能读一个字节,但是有时想进行字符串通讯,就很麻烦了。 废话少讲,直接上完整例子: 编译只要一块Arduino,不需要任何外置元件。 用Arduino编译器的...
  • 发送或接收可按 “字符串 ASCII"或"HEX十六进制” 方式.3.自动断帧功能,自动在两次数据包之间插入换行,以方便观测。4.波形显示功能。可将按协议发送的数据显示成波形。并支持波形回看功能和截图功能。5.支持 JS...
  • //定义一个comdata字符串变量,赋初值为空值String comdata = "";//numdata是分拆之后的数字数组int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;void setup(){//定义0~6脚是输出for(int i = 0; ...
  • 在上一篇文章中,我们利用proteus中自带的虚拟终端实现了单片机通过串口向主机发送字符串的功能。这次实例我们加入串口接收字符的功能。
  • //全局变量,最终收到的字符串放入 char USART2_IT_string_buf[400]; //全局变量,接收字符串的缓存 void USART2_IRQHandler(void){//接收字符串的中断处理函数 //u8 char_buf;//改为了全局变量 if(SET == USART_...
  • STM32使用串口中断接收字符串,可重复接收,使用\r\n作为接收结束的标志,可以根据需要自定义结束的标志
  • MSP430F149串口中断接收字符串并回显屏幕
  • stm32的串口接收字符串以十六进制数

    千次阅读 2016-11-10 22:51:00
    原子的串口就给出了字符串的历程,但是用这个历程的时候结尾必须要是0d 0a结尾的也就是空格和回车。 在这了给出一个自己定义的头和尾的串口程序。  串口接收字符串的原理和接收单字符的差不多,只是在接收...
  • STC15F104单片机模拟串口 接收 比较字符串

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,454
精华内容 581
关键字:

串口收字符串