以字符串形式接收数字(uart)

2023-12-02

我正在尝试通过 uart 接收一个包装为字符串的数字。我发送数字 1000,所以我得到 4 个字节 + 空字符。但是,当我使用 atoi() 将数组转换为数字并将整数与 1000 进行比较时,我并不总是得到正确的数字。这是我用于接收号码的中断处理函数。可能出什么问题了?

void USART1_IRQHandler(void)
{
    if( USART_GetITStatus(USART1, USART_IT_RXNE) )
    {
        char t = USART1->RDR;
        if( (t != '\n' && t!='\0') && (cnt < 4) )
        {
            received_string[cnt] = t;
            cnt++;
        }
        else
        {
            cnt = 0;
        }

        t = 0;
        received_string[4] = 0;
    }

    if(cnt==4)
    {
        data = atoi(received_string);
    }
}

请尝试使用此代码。在这里,我检查接收的最大字节数,以避免缓冲区溢出(以及可能的硬件故障)。我创建了一个特定的函数来清除接收缓冲区。您还可以找到字符串长度的定义,因为代码更灵活。我还建议检查接收错误(读取传入字节后),因为如果出现错误,接收将被阻止。

//Define the max lenght for the string
#define MAX_LEN 5

//Received byte counter
unsigned char cnt=0;

//Clear reception buffer (you can use also memset)
void clearRXBuffer(void);

//Define the string with the max lenght
char received_string[MAX_LEN];

void USART1_IRQHandler(void)
{
    if( USART_GetITStatus(USART1, USART_IT_RXNE) )
    {
        //Read incoming data. This clear USART_IT_RXNE
        char t = USART1->RDR;

        //Normally here you should check serial error!
        //[...]

        //Put the received char in the buffer
        received_string[cnt++] = t;     

        //Check for buffer overflow : this is important to avoid
        //possible hardware fault!!!
        if(cnt > MAX_LEN)
        {
            //Clear received buffer and counter
            clearRXBuffer();                
            return;
        }

        //Check for string length (4 char + '\0')
        if(cnt == MAX_LEN)
        {
            //Check if the received string has the terminator in the correct position
            if(received_string[4]== '\0'){

                //Do something with your buffer
                int data = atoi(received_string);
            }

            //Clear received buffer and counter
            clearRXBuffer();                
        }
    }
}

//Clear reception buffer (you can use also memset)
void clearRXBuffer(void){
    int i;
    for(i=0;i<MAX_LEN;i++) received_string[i]=0;
    cnt=0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以字符串形式接收数字(uart) 的相关文章

  • 在 Ruby 中,如何生成一长串重复文本?

    在 ruby 中快速生成长字符串的最佳方法是什么 这有效 但速度非常慢 str length 100000 1 length each i str 0 我还注意到 创建一个适当长度的字符串 然后将其附加到现有字符串直至所需的长度 速度会更快
  • 如何通过j2me api解析包含负数的字符串?

    我有一个带有数字的字符串 我必须解析这个字符串并将这些数字存储在 int float 等中 相应地 String str 100 2 0 100 19 99 0 我可以这样做Integer parseInt and Float parseF
  • 如何将大型 XML 字符串插入 Oracle 表中?

    我想将一个大的 XML 字符串插入到我的表中 我的表是 test id xml column XMLType 当我插入值时 它返回 字符串文字太长 错误 我上网查了一下 大家都说把数据类型改成CLOB 但我想存储相同的数据类型 XMLTyp
  • Java 字符串的细微差别

    class Test public static void main String s1 null null shows compile time error String s1 null String s2 s1 null runs fi
  • C# 中从一个字符到另一个字符的子字符串

    如何获取从一个特定字符到另一个特定字符的子字符串 例如 如果我有这种格式 string someString 1 7 2015 05 21T09 18 58 我只想得到这部分 2015 05 21T09 18 58 我如何使用子字符串 字符
  • 根据多个分隔符拆分字符串

    我试图通过引用根据多个分隔符分割字符串jquery中如何用多个字符串作为分隔符分割一个字符串 https stackoverflow com questions 13867182 how split a string in jquery w
  • 串行端口轮询和数据处理

    我正在尝试通过微控制器从传感器的多个串行端口读取数据 每个串口将接收超过2000个测量值 每个测量值7个字节 全部为十六进制 而且他们同时开火 现在我正在从 4 个串行端口进行轮询 另外 我将每个测量值转换为字符串并将其附加到字符串构建器
  • 使用文本文件中的 var

    我的问题是 我想使用由从文本文件中在 carac 中接收的关键字启动的函数 并在该函数中使用 carac 之后的字符串 该函数位于包含的其他文件中 但我不知道该怎么做 for std string carac fichier gt gt c
  • 将字符串拆分为单词和标点符号,而不使用任何导入

    我见过与我的问题类似的问题 但它们都使用了正则表达式 我想做的是接受诸如 哇 这真的很有帮助 之类的输入 然后返回到 哇 这真的很有帮助 所以我想将标点符号从单词中分离出来 我已经尝试过这个 但它根本不起作用 sentence input
  • s60 的 python 希伯来语字符串

    我在 S60 上使用 python 我想使用希伯来语字符串 在 GUI 上表示它们并以短信形式发送它们 看来 PythonScriptShell 不接受这样的表达式 例如 u 我能做些什么 谢谢 事态发展 我添加了这一行 coding ut
  • Perl 字符串替换:匹配但不替换正则表达式的一部分

    假设我在 Perl 中有一个字符串 我正在尝试匹配并替换为以下内容 string s a zA Z find a zA Z replace g 如图所示 我想替换两侧被非字母字符包围的所有内容 但是 当我替换字符串时 我不想也替换这些字符
  • 如何验证字符串仅包含字母、数字、下划线和破折号? [复制]

    这个问题在这里已经有答案了 如果我迭代字符串中的所有字符 我知道如何做到这一点 但我正在寻找一种更优雅的方法 正则表达式只需很少的代码即可实现这一目的 import re if re match A Za z0 9 my little st
  • PHP 中字符串中的类常量

    我的阅读手册 http www php net manual en language types string php language types string parsing 标题 字符串访问和按字符修改 之前的部分 是 您可以在字符串
  • PostScript:“cvs”是否终止字符串缓冲区?

    使用时的一个想法cvs是通过重用字符串缓冲区来帮助垃圾收集器 例如 s 5 string def s 2 cvs s 66 cvs 然而 当在循环中执行此类操作时 实际在缓冲区中找到的字符串是 40 0 30 0 20 0 10 0 0 0
  • 将 h1 元素的内容复制到剪贴板?

    所以 我做了一个翻译器 但效果不是很好 但无论如何 它正在工作 我想尝试添加一些可以复制结果的内容 有没有办法做到这一点 以下是我的代码 提前致谢 我知道有一种方法可以通过输入来完成此操作 但我不确定是否可以通过标题来完成 var myTe
  • Java 支持多行字符串吗?

    来自 Perl 我肯定缺少在源代码中创建多行字符串的 here document 方法 string lt lt EOF create a three line string text text text EOF 在 Java 中 当我从头
  • Swift - 对数组中每个字符串中的字符进行排序

    所以这个问题是这个问题的后续问题 允许相同字符串的快速字符串排列 https stackoverflow com questions 48976065 swift string permutations allowing the same
  • 添加反斜杠而不转义[重复]

    这个问题在这里已经有答案了 我需要逃离 字符串中的 字符 问题是每当我string string replace 结果是 添加额外的反斜杠来转义原始反斜杠 如何删除这个多余的反斜杠 结果 仅显示 实际上字符串是 gt gt gt str g
  • 使用 string.whitespace 删除 Python 中的空格

    Python 的 string whitespace 很棒 gt gt gt string whitespace t n x0b x0c r 如何在不手动输入 t n 等正则表达式的情况下将其与字符串一起使用 例如 它应该能够转动 请不要伤
  • 如何将整个流读入 std::string ?

    我正在尝试将整个流 多行 读入字符串中 我正在使用这段代码 它有效 但它冒犯了我的风格感 当然有更简单的方法吗 也许使用字符串流 void Obj loadFromStream std istream stream std string s

随机推荐

  • 解释 Ruby on Rails 中的迭代器语法

    我开始学习 Ruby on Rails 发现自己对语法感到困惑 所以我必须阅读一些 Ruby 语法 我从中学到了语法http www cs auckland ac nz references ruby doc bundle Manual m
  • PyQt QThread 多线程不起作用

    I have 2 QListWidget lists List2 is being filled when some item has been selected from List1 问题是 在填充 List2 之前 我必须执行很多任务
  • 清除页面中的所有单选按钮

    我的应用程序中有很多动态生成的单选按钮Windows 窗体项目 可以根据数据库中的值来检查它们 我想通过单击按钮清除所有单选按钮 我怎样才能做到这一点 检查一下 private void button1 Click object sende
  • Visual Studio“任何 CPU”目标是什么意思?

    我对 Visual Studio 2008 中的 NET 平台构建选项有一些困惑 什么是 Any CPU 编译目标 它会生成什么类型 的文件 我检查了这个 任何 CPU 构建的输出可执行文件 发现它们是 x86 可执行文件 谁不会看到这一点
  • 通过需要考虑多种成本的矩阵的最佳路径

    例如给出以下矩阵 0 8 0 3 0 8 8 0 3 0 0 5 0 1 0 6 0 0 对于每个元组 第一个数字是食物 第二个数字是水 我需要从右下角到左上角 并且只能向上或向左移动 我需要收集尽可能多的食物和水 这样我才能活得尽可能长
  • XML 元素不会触发 TextBox ConvertBack 事件

    ValueFormattingConverter Convert被称为XmlElement ConvertBack从未被调用过 为什么 是否有义务将具有约束力的指令向下传递 文本框的使用是否会覆盖其自身的绑定设置 可以做什么 我的文本框
  • System.gc()什么时候做某事?

    我知道Java中垃圾收集是自动的 但我明白如果你打电话System gc 在您的代码中 JVM 可能会也可能不会决定在此时执行垃圾收集 这具体是如何运作的 当 JVM 看到时 它到底根据什么基础 参数决定执行 或不执行 GCSystem g
  • Python Instagram 使用请求登录

    我正在尝试使用 python 登录 Instagram 我能够获得 csrf 令牌 但是requests Session post 似乎没有正确地将登录数据发布到网站 我总是得到class no js not logged in clien
  • 如何获取错误输出并将其存储在变量或文件中

    我在弄清楚如何获取错误输出并将其存储在 ksh 的变量或文件中时遇到了一些麻烦 所以在我的脚本中我有cp p source file destination里面一个while loop 当我收到以下错误时 cp source file Th
  • 使用 : 在列表或 numpy 数组中进行多重切片

    我在尝试弄清楚如何提取列表中间隔一些索引的多个值时遇到一些困难 例如 给定一个列表l 0 1 2 3 4 5 6 7 8 9 10 我只想提取值 1 2 3 and 6 7 8 9 我可以l 1 4 l 6 1 但是有没有办法这样写l 1
  • 使用 Jersey 进行多线程处理

    这是两个似乎相互矛盾的链接 我宁愿相信文档 Link 1 服务器上的请求处理默认以同步处理模式进行 Link 2 它已经是多线程的了 我的问题 哪个是对的 它可以同时是同步和多线程吗 为什么文档这么说 如果已知资源方法执行需要很长时间才能计
  • [__NSCFDictionary objectAtIndex:]:发送到实例的无法识别的选择器

    我正在尝试将 Json 文件解析到表视图中 但收到此错误 NSCFDictionary objectAtIndex 发送到实例的无法识别的选择器 并且应用程序正在崩溃 请帮助我 我是 iOS 开发新手 My Code implementat
  • 为什么MKMapView中的clusterAnnotationForMemberAnnotations没有被调用?

    我有一个简单的地图视图 IBOutlet private var mapView MKMapView 然后我一一添加注释 mapView addAnnotation Annotation user user 并向他们展示全部 mapView
  • 如何获取GPU信息?

    我有一个任务是用 C 收集有关 Windows 中 GPU 的信息 但我不知道从哪里开始 任何想法 更新 我想要名称 vram dac 制造商 版本 时钟 update2 如果我使用 win32 videocontroller 类 我只是获
  • 如何在 Python 中多次训练 sklearn 中的 SVM 分类器?

    我想知道是否可以在 for 循环中多次从 Python 中的 sklearn 训练 SVM 分类器 我的想法如下 for i in range 0 10 data np load somedata labels np load somela
  • android webview 导致空指针

    我的布局中有这个
  • Qt 创建者错误

    启动项目调试 然后 Running build steps for project Text Editor Starting c qt 2010 05 qt bin qmake exe C Qt 2010 05 Text Editor Te
  • iOS 8.3 中的 UIDatePicker 内存泄漏

    当在运行 IOS 8 3 的 iPad 上的弹出窗口中使用 UIDatePicker 时 我发现内存泄漏 每次弹出日期选择器然后关闭时 我都会在多次内存泄漏中得到大约 5K 的信息 泄漏的对象是 NSDateComponents 负责的框架
  • Boost:反序列化通过 ZeroMQ 拉套接字传递的自定义 C++ 对象

    我在这里写的文字是我之前在另一个线程中打开的后续问题Boost 序列化 反序列化通过 ZeroMQ 拉套接字传递的自定义 C 对象 早期线程中的编译问题已通过使用文本存档类型而不是二进制存档解决 但现在我在反序列化时遇到运行时问题 为了您的
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函