还未设置个性签名
成为VIP会员 享9项特权: 开通会员

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

GD32F310开发板串口的数据接收与数字自动转换

冬至配饺子 来源:兆易创新GD32 MCU 作者:卡文迪许怪 2022-09-22 16:43 次阅读

串口的功能网上有很多,但是处理串口的数据需要一些小手段,但是str的函数有点才长,不适用长的数据接收,所以给310搞一个接收数据的轻量级API的小玩意。

开发环境

Keil-MDK 5.34

Windows10

固件库-GD32F3x0_Firmware_Library_V2.2.0

新建工程就不赘述,看这个

启动串口

void uart_init(void)
{
    //使能时钟
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_USART0);
    
    //Tx PA9 复用推挽输出
    gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_9);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
    //Rx    PA10
    gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_10);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ, GPIO_PIN_10);
    nvic_irq_enable(USART0_IRQn,0,0);
    gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_9|GPIO_PIN_10);
    /*USART 设置*/
    usart_deinit(USART0);
    usart_baudrate_set(USART0,115200);
    usart_word_length_set(USART0,USART_WL_8BIT);
    usart_stop_bit_set(USART0,USART_STB_1BIT);
    usart_parity_config(USART0,USART_PM_NONE);
    usart_hardware_flow_rts_config(USART0,USART_RTS_DISABLE);
    usart_hardware_flow_cts_config(USART0,USART_CTS_DISABLE);
    usart_receive_config(USART0,USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);
    usart_enable(USART0);
    usart_interrupt_enable(USART0,USART_INT_RBNE);
    usart_interrupt_enable(USART0, USART_INT_IDLE);         /* 使能USART0空闲中断 */
}
//串口中断配置
uint16_t t=0;
void USART0_IRQHandler(void)
{
    if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_RBNE))
    {
        gd_led_toggle();
        t=usart_data_receive(USART0);//接收数据
        usart_data_transmit(USART0,USART_RX[t]);
        usart_interrupt_disable(USART0,USART_INT_RBNE);
        usart_data_transmit(USART0,t);
    }else if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_IDLE))
    {
        usart_interrupt_disable(USART0,USART_INT_IDLE);
    }
}

数据处理API

struct _Chang_Num
{
    char *Source;
    char Sign[8];
    float NUM[8];
    char flag;
};

char Data_Chang_NUM (struct _Chang_Num *Item)
{
    char Data_Array[12] = {0};                  //数字的str数
    char str[36];                               //装source数据到这个缓存区,这个缓存区是要变的
    char Data;
    char n,m = 0;
    char i,flag = 1;                            //i是当前找的是 第几个 Sign
    char Find_Time = strlen(Item->Sign);        //要找多少个
    char Length = strlen(Item->Source);         //源的长度
    strcpy(str,Item->Source);
    if(Length > 36)
        Length = 36;
    for (i = 0; i < Find_Time; i++)
    {
        flag = 0;
        for(n = 0;n < Length;n++)
        {
            Data = str[n];
            if(str[n] == Item->Sign[i])           //找到标志
            {
                str[n] = 0;
                flag = 1;                       //开始识别str
                m = 0;
            }
            if(flag)
            {
                if((str[n] <= '9' && str[n] >= '0') || str[n] == '.' || str[n] == '-')
                {
                    Data_Array[m] = str[n];               //把数字相关str的装起来
                    m++;                                //m是数字在str的长度
                }
                else
                {
                    if(m > 0)                            //数字部分结束
                    {
                        if(Data_Array[m-1] == '.' || Data_Array[m-1] == '-')    //不让最后一位为 '.' and '-'
                            Data_Array[m-1] = '\0';
                        else
                            Data_Array[m] = '\0';
                            
                        break;
                    }
                }
            }
        
        }
        Item->NUM[i] = atof(Data_Array);
        // Data_Replace ("123",Data_Array,0,sizeof(Data_Array));
    }
    return Item->flag;
}

配置好你想要的参数在结构体中,然后将串口的缓冲区放入这个函数即可。

将printf函数映射到串口,看这里

struct _Chang_Num Item_n = {
    .Source = "a:3.14......,b:3322..,c:-9.0..-",
    .Sign = {':',':',':'},
};
int main (void)
{
    printf("sign :%s",Item_n.Sign);
    Data_Chang_NUM (&Item_n);
    for (char i = 0; i < 3; i++)
    {
        printf("num %d :%.2f \n",i,Item_n.NUM[i]);
    }
    while(1);
}

API效果

poYBAGMsH3aAMsOaAAAy5BJW6YI852.png




审核编辑:刘清

  • API
    API
    +关注

    关注

    0

    文章

    851

    浏览量

    57925
  • 数据接收
    +关注

    关注

    0

    文章

    10

    浏览量

    7442
  • GD32F3
    +关注

    关注

    0

    文章

    6

    浏览量

    3476
收藏 人收藏

    评论

    相关推荐

    关于API接口相关知识 API的权限与安全问题

    API 写出来后会被调用,但由于计算机 & 网络系统的局限性,我们的 API 接口是不可以被无限制调....
    的头像 科技大小事 发表于 10-06 12:56 104次 阅读

    API、SDK是什么?SDK和API的区别

    SDK 就是 Software Development Kit 的缩写,翻译过来——软件开发工具包。....
    的头像 算法与数据结构 发表于 10-04 15:35 160次 阅读

    急,在线等,请问有没有现成的华为watch3定位调用api服务?

    发表于 09-29 20:51 668次 阅读

    FreeRTOS参考手册

    本文件提供了主要FreeRTOS API1和FreeRTOS内核配置选项。假设读者已经熟悉编写多任务....
    发表于 09-28 15:52 7次 阅读

    Workers框架入门知识详解

    Peter Scarfe, Creator of Workers™ for LabVIEW, 在VI....
    的头像 工程师邓生 发表于 09-27 09:40 93次 阅读

    常用的Linux应用API轮子

    这个项目其实在很早之前就开始了,最初的目的是为它(Future3D)而准备的,因此最近一段时间利用晚....
    发表于 09-27 09:21 76次 阅读

    Nacos服务地址动态感知原理

    Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig....
    的头像 工程师邓生 发表于 09-26 10:40 138次 阅读

    FreeRTOS任务挂起恢复与使用中断遇到的坑

    任务挂起简单点理解就是现在不需要执行这个任务,让它先暂停,就是挂起。恢复就是从刚才挂起的状态下继续运....
    的头像 码农爱学习 发表于 09-26 09:01 313次 阅读
    FreeRTOS任务挂起恢复与使用中断遇到的坑

    在GD32F310G-START开发板上读取三轴加速度计

    该软件主要使用了GD32开发板的硬件iic,外部中断以及串口,这三部分功能,串口的配置在其他文章的当....
    的头像 冬至配饺子 发表于 09-23 17:58 1439次 阅读
    在GD32F310G-START开发板上读取三轴加速度计

    ESP8266 Non OS SDK API参考

    电子发烧友网站提供《ESP8266 Non OS SDK API参考.pdf》资料免费下载
    发表于 09-23 11:49 16次 阅读
    ESP8266 Non OS SDK API参考

    了解此API、以生命周期感知方式收集数据流的理由

    默认情况下,collectAsStateWithLifecycle 使用 Lifecycle.Sta....
    的头像 谷歌开发者 发表于 09-23 10:46 72次 阅读

    在GD32F310开发板上进行MultiTimer移植与分析

    首先要在裸机上实现基于离散傅里叶变换的特征信号识别,因为采样点是864不是基4的,没法用快速傅里叶变....
    的头像 冬至配饺子 发表于 09-23 10:19 634次 阅读
    在GD32F310开发板上进行MultiTimer移植与分析

    ESP8266 RTOS SDK API参考(仅针对旧版SDK V2.X及之前版本)

    电子发烧友网站提供《ESP8266 RTOS SDK API参考(仅针对旧版SDK V2.X及之前版....
    发表于 09-23 10:10 14次 阅读
    ESP8266 RTOS SDK API参考(仅针对旧版SDK V2.X及之前版本)

    基于Cortex M0微型操作系统架构及API

    电子发烧友网站提供《基于Cortex M0微型操作系统架构及API.pdf》资料免费下载
    发表于 09-22 09:36 24次 阅读
    基于Cortex M0微型操作系统架构及API

    科大讯飞人脸比对方案 demo python3语言API文档

    接口说明 基于科大讯飞自研的人脸算法,可实现对比两张照片中的人脸信息,判断是否是同一个人并返回相似度....
    的头像 汽车电子技术 发表于 09-21 17:40 927次 阅读

    ASN1CASN.1编译器概述

    ASN1CASN.1编译器将ASN.1和/或XMLschema(XSD)源规范转换成C、C++、C#....
    的头像 工程师邓生 发表于 09-21 10:03 77次 阅读

    Lansweeper推出新的订阅计划

    Lansweeper推出了新的订阅计划,捆绑了最近发布的全新功能。与以前的“一刀切”方法不同,新软件....
    的头像 工程师邓生 发表于 09-20 17:26 127次 阅读

    Taskflow API之三大特性

    文档级输入:支持文档级输入,解决预训练模型对输入文本的长度限制问题,大大节省用户输入长文本时的代码开....
    的头像 深度学习自然语言处理 发表于 09-20 16:36 148次 阅读

    一次对API响应时间的优化探索

    在这普通的一天,我们用着普通的 API,突然发现响应速度过慢的警报意外亮起。
    的头像 我快闭嘴 发表于 09-20 11:50 182次 阅读

    记录一下小python脚本的挖掘过程

    目录下有url这个文件,他存放着一些我们的url,可以是平时的子域名,也可以是上面的逆向出来的一些u....
    的头像 工程师邓生 发表于 09-19 11:13 94次 阅读
    记录一下小python脚本的挖掘过程

    可扩展性需求和ArangoDB

    ArangoDB为图形、文档和键/值做好了集群准备。ArangoDB适用于推荐引擎、个性化、知识图或....
    的头像 倩倩 发表于 09-19 09:50 72次 阅读

    ArangoDB与Neo4j相比更具有竞争力的性能

    多模型:Neo4j是一个单模型图形数据库。它不支持任何其他数据模型。如果应用程序需要文档或键/值存储....
    的头像 工程师邓生 发表于 09-19 09:46 160次 阅读

    在api中如何挂载两个分区呢

    想使用dfs挂载elm文件系统,flash已经分好了两个区,但是在api中没有看到如何挂载两个分区,现在只能挂载一个分区。 ...
    发表于 09-15 14:25 685次 阅读

    FreeRTOS流式缓冲区是指什么

    流式缓冲区是在队列的基础上,针对单一生产者和消费者场景,与队列类似,也是一个任务负责产生数据,另一个....
    的头像 工程师邓生 发表于 09-15 11:51 115次 阅读

    FreeRTOS任务的优先级示例

    任务的优先级:0~24之间。数字越大,任务优先等级越高。高优先级的任务优先执行。
    的头像 工程师邓生 发表于 09-15 11:13 124次 阅读

    一文解读FreeRTOS任务内存设置的大小

    uxTaskGetStackHighWaterMark(任务句柄);//FreeRTOS使用此函数,....
    的头像 工程师邓生 发表于 09-14 15:47 127次 阅读

    NacosServiceRegistry的实现

    Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服....
    的头像 Android编程精选 发表于 09-13 10:51 178次 阅读

    metaverse会是什么

    Metaverse可能是一个持续的发展,永远不会完全定义或变得固定。就像生活中的许多其他事情一样,它....
    的头像 工程师邓生 发表于 09-13 09:29 282次 阅读

    Android 游戏性能调优的一些技巧

    在 Android 游戏开发工具大升级中,我们介绍了 Android 游戏开发套件的丰富功能和多项 ....
    的头像 谷歌开发者 发表于 09-08 11:16 165次 阅读

    WOLFRAM应用服务器的优势与主要特征有哪些呢

    WolframApplication Server 将Wolfram引擎的计算能力与当今可用的强大云....
    的头像 工程师邓生 发表于 09-08 10:57 220次 阅读

    主要讨论ADO.NET和ASP.NET之间的关键区别

    当我们计划使用.NETFramework 开发任何基于Web的应用程序时,我们需要使用ASP.NET....
    的头像 工程师邓生 发表于 09-08 09:37 137次 阅读

    航天宏图新一代数字孪生地球平台发布

    在地球科学领域,构建“数字孪生地球”,实现真实物理空间与虚拟世界的精准映射、虚实交互、智能决策和虚实....
    的头像 航天宏图 发表于 09-07 16:57 201次 阅读

    用一张AP Autosar的图来说明什么是Automotive OS

    对于Automotive的上层是运行的应用程序与功能,下层就是硬件平台及硬件相关的驱动等,中间部分基....
    的头像 工程师邓生 发表于 09-05 10:05 129次 阅读

    请问CH579如何使用BondManager?

    #define GAPBOND_ERASE_SINGLEBOND 0x417 //!< Erase a single bonded device. Write only. Must prov...
    发表于 09-02 07:02 165次 阅读

    c#语言中怎么使用HTTP代理

    c#语言中怎么使用HTTP代理。
    的头像 华益云HTTP爬虫IP 发表于 09-01 14:46 217次 阅读

    e易语言中怎么使用HTTP代理

    e易语言中怎么使用HTTP代理。
    的头像 华益云HTTP爬虫IP 发表于 09-01 14:42 264次 阅读

    如何通过ApiFox来构建 API 场景测试

    这里需要注意的一点是,在 Postman 中我们可以直接在 Request 上进行编辑 pre-re....
    的头像 Android编程精选 发表于 09-01 10:49 218次 阅读

    如何通过ApiFox来构建API场景测试

    在开发前后台分离项目并且通过不同团队来实现的时候,如何将后台设计的 API 准确的传达到前台,是一个....
    的头像 Android编程精选 发表于 09-01 10:48 209次 阅读

    CH479从机调用什么函数主动断开连接?

    请问一下,CH479从机调用什么函数主动断开连接。在API文档里面没有找到   ...
    发表于 09-01 07:03 321次 阅读

    Netty如何实现消息推送

    Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API ....
    的头像 Android编程精选 发表于 08-30 09:42 269次 阅读

    高性能对象存储MinIO的基本概念和环境部署

    MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Am....
    发表于 08-29 10:54 409次 阅读

    介绍一种在云中运行ArangoDB的简单方法

    我们创建了Oasis,因此您不必担心任何问题,只需将您的时间和精力集中在构建优秀的应用程序上!
    的头像 工程师邓生 发表于 08-29 10:33 117次 阅读

    超越RTOS的IDS/IPS和应用层保护

      数据防篡改检测——这是使用静态配置数据的安全散列来实现的,这让系统可以检测到何时进行了未经授权的....
    发表于 08-28 11:09 168次 阅读
    超越RTOS的IDS/IPS和应用层保护

    NVIDIA Omniverse ACE的实际应用和主要优势

    在 SIGGRAPH 2022 上,我们宣布推出 NVIDIA Omniverse Avatar C....
    的头像 NVIDIA英伟达企业解决方案 发表于 08-24 15:29 1208次 阅读

    Android 13应用迁移的两个阶段

    随着 Android 13 正式发布至 AOSP,用户们会开始使用这个新的平台,并会在新平台上体验您....
    的头像 谷歌开发者 发表于 08-24 10:10 172次 阅读

    Linux系统调用与API基本概念解析

    我们在很多书籍上、博客上都学过或者听说过系统调用与API这两个概念,那么这两个概念究竟是什么意思,它....
    发表于 08-24 09:55 161次 阅读

    如何开发不带Flash API的Bootloader实现在线升级

    在实际应用中,越来越多的产品有在线升级的需求,比如升级功能或者更新软件来解决已知软件 bug,因此....
    发表于 08-23 10:05 21次 阅读

    CH573有没有产生随机数的方法,或者可以直接调用的API?

    CH573有没有产生随机数的方法,或者可以直接调用的API   ...
    发表于 08-23 06:51 449次 阅读

    AUTOSAR软件架构与开发方法

    中间层RTE主要是给应用层提供通信手段,这里的通信是一种广义的通信,可以理解成接口。应用层与其他软件....
    的头像 倩倩 发表于 08-22 16:15 335次 阅读

    怎样使创建和操作Word文件成为一项简单的任务

    包括一个带注释的示例应用程序,该应用程序通过创建或修改Word文档文件来演示每个功能。
    的头像 工程师邓生 发表于 08-20 17:08 266次 阅读

    Excel中的一些概念

    tealeg提供了傻瓜式API,主要流程为创建一个Sheet,在Sheet中添加Row,然后在Row....
    的头像 马哥Linux运维 发表于 08-19 09:12 156次 阅读

    开放式加速标准如何推动安全关键型发展

      嵌入式产品中越来越多地使用计算、视觉和推理加速的集成带来了重大的新商机,Khronos 正在开发....
    的头像 星星科技指导员 发表于 08-17 09:21 161次 阅读
    开放式加速标准如何推动安全关键型发展

    MobPush iOS端SDK API推送配置方法

    MobPush是MobTech推出的一款免费的推送服务工具,集成方便简单快捷,且提供完整的可视化数据....
    的头像 MobTech科技派 发表于 08-16 12:17 214次 阅读
    MobPush iOS端SDK API推送配置方法

    使用MineDojo构建具有一般能力的人工智能代理

      该关联分数可以作为奖励信号提供,以指导强化学习代理完成任务。对于示例任务“剪一只羊以获得羊毛”,....
    的头像 星星科技指导员 发表于 08-15 17:10 215次 阅读

    使用NVIDIA Merlin库构建基于会话的建议

      推荐系统可以帮助您发现新产品并做出明智的决策。然而,在许多依赖于推荐的领域,如电子商务、新闻和流....
    的头像 星星科技指导员 发表于 08-15 16:33 236次 阅读
    使用NVIDIA Merlin库构建基于会话的建议

    CH582M函数api原型在哪里?

    如题,extern UINT32 FLASH_EEPROM_CMD( UINT8 cmd, UINT32 StartAddr, PVOID Buffer, UIN...
    发表于 08-15 06:03 118次 阅读

    求助,请问CH573有没有API可以直接读取当前蓝牙的连接状态?

    请问CH573有没有API可以直接读取当前蓝牙的连接状态?就是判断出当前蓝牙是处于连接状态还是处于非连接状态   ...
    发表于 08-12 07:30 189次 阅读

    CH573做主机的示例程序,是否可以将从机广播名字也扫描出来 ?

    CH573做主机的示例程序,我们扫描从机时可以将从机扫描到的mac地址打印出来 是否可以将 从机广播名字也扫描出来 是否有示例...
    发表于 08-11 07:20 67次 阅读

    请教一下ch573f central例程是否有请求mtu的api?

    如题 做主机 是否提供API主动修改mtu大小,  没有找到。谢谢。    ...
    发表于 08-11 07:18 107次 阅读

    CC2541工程移植过程中出现一些api找不到对应替代API要怎么处理?

    osal_snv_write( BLE_NVID_USER_ID_START,sizeof(Device_Info),&Device_Info) tmos_snv_read( BLE_N...
    发表于 08-05 07:23 85次 阅读