stm32 实现串口中断接收浮点型、整型数据

发布者:来来去去来来最新更新时间:2019-10-08 来源: eefocus关键字:stm32  串口中断  接收浮点型  整型数据 手机看文章 扫描二维码
随时随地手机看文章

之前已经实现了在stm32中移植printf函数和scanf函数,相信很多网友也已经熟练掌握这个技能了。最近在项目中遇到了问题,需要在串口助手中向下位机stm32写整型或者浮点型数据。这个时候只能使用串口中断接收函数。


void USART1_IRQHandler(void)


{


       uint8_t  ch;


       while(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)


      {


           ch=USART_ReceiveData(USART1);


       }


}


但是很快发现程序这样写过于简陋,只能接收单个字符,不符合我的要求,然后参考网上例程又将串口接收中断函数进行改动。改为如下形式:


#define RxBufferSize   100     //接收数组定义尽量大点


uint8_t RxBuffer1[RxBufferSize  ];


__IO uint8_t RxCounter= 0x00;    //接收计数


uint8_t  NbrOfDataToRead = RxBufferSize  ;  


/***************以上变量均为全局变量******************/




void USART1_IRQHandler(void)

{

      while(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

     {


           RxBuffer1[RxCounter++] = USART_ReceiveData(USART1);


           if(RxCounter1 == NbrOfDataToRead1)     //如果达到最大计数,则不进行接收,中断关闭

           {

                USART_ITConfig(USARTy, USART_IT_RXNE, DISABLE);

           }

    }

}


上面的方面实现了将串口中断接收到的字符保存在数组中,可是问题还是来了,就是保存在数组中的数据是单个字符,并不能是我需要的整型或者浮点型数据,不能直接使用。感觉又白忙活了一天。


又在网上找资料,有人提了头文件#include "stdio.h"中的    sscanf函数,其函数原型为:


#pragma __scanf_args

extern _ARMABI int sscanf(const char * __restrict /*s*/,

                    const char * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2)));

   /*

    * is equivalent to fscanf except that the argument s specifies a string

    * from which the input is to be obtained, rather than from a stream.

    * Reaching the end of the string is equivalent to encountering end-of-file

    * for the fscanf function.

    * Returns: the value of the macro EOF if an input failure occurs before any

    *          conversion. Otherwise, the scanf function returns the number of

    *          input items assigned, which can be fewer than provided for, or

    *          even zero, in the event of an early matching failure.


看到了这里终于找到出路了,sscanf()函数的作用很强大,这里不再赘述,感兴趣的网友可以自己百度下,介绍的很详细,我在这里只提及它的一个功能,就是可以把字符数组转换成字符串,大家想想,只要能够得到字符串,那么剩下的就简单多了。话不多说,直接来干货,下面给出如何将串口中断函数接收到的字符数组转换成字符串:


void USART1_IRQHandler(void)

{

    static __IO uint8_t i=0;

    char str1[100];

    if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)

    {     

        ch[i++] = USART_ReceiveData(USART1);

        if(ch[i-1] == '*')    

        {

            sscanf(ch,"%[^*]",str1);  //利用sscanf函数把字符数组转换成字符串,"%[^*]"表示取数据到*为止

            convalue=atof(str1);            //利用atof函数把字符串转换成浮点型数据

            i=0;

        }

    }

}


上面的程序就是终极程序了,我来大概说明下:同理我先把接收的数据放到字符数组ch[]里面,我的结束标志‘*’,当判断接收到‘*'时,表示接收完毕,然后进入if语句,利用sscanf函数,把字符数组转换成字符串str1,然后我用函数atof()把字符串str1转换成浮点型数据并赋值给全局变量convalue,以便随时调用。


这样我就可以在串口上发送数据,通过串口中断接收函数,得到数据。

关键字:stm32  串口中断  接收浮点型  整型数据 引用地址:stm32 实现串口中断接收浮点型、整型数据

上一篇:STM32中的一些小坑-ADC通道设置-写FLASH
下一篇:STM32F1XX系列 HAL库 CAN大量收发数据

推荐阅读最新更新时间:2024-11-09 11:35

基于STM32的智能加油系统设计方案
毕设介绍 针对当前汽车加油需求的日益增多,基于STM32开发技术和传感器技术开发一款智能加油系统。 题目要求 智能加油系统应具备油量控制、根据油费计价、加油环境检测的功能。该系统能模拟汽车加油的全过程,并具备远程控制功能。 题目分析 本次毕业设计是智能加油系统的设计与实现,设计所包含的模块主要有oled显示电路、电磁阀驱动电路、可燃气体传感器模块、ds18b20数字温度传感器、蜂鸣器报警模块、WIFI模块、按键电路模块及电源模块。 通过模块之间的配合实现智能加油系统,一旦有温度异常或可燃气体浓度超标将会通过wifi模块对管理人员发出警告。 stm32f103c8t6实时采集ds18b20温度传感器获取温度,如果温度
[单片机]
基于<font color='red'>STM32</font>的智能加油系统设计方案
stm32必须要移植系统吗
STM32是意法半导体(STMicroelectronics)推出的一系列32位ARM Cortex-M微控制器(MCU),其采用了先进的嵌入式技术,广泛应用于各种领域,如消费电子、工业控制、汽车电子等。在使用STM32进行开发时,是否需要进行系统移植是一个常见的问题。 系统移植是指将操作系统或者驱动程序从一个硬件平台移植到另一个硬件平台的过程。由于不同的硬件平台可能存在差异,例如处理器架构、外设接口等,因此需要对原有的系统进行适配和修改,使其能够在目标硬件上运行。 对于STM32来说,系统移植不是必须的。STM32系列芯片本身具备了强大的硬件支持和完善的开发工具链,可以直接在裸机环境下进行开发和调试。裸机开发是指在没有操
[单片机]
STM32中的独立看门狗和窗口看门狗是什么
一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立看门狗和窗口看门狗。 独立看门狗 :使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示程序是正常的,这点和窗口看门狗是有区别的。另外独立看门狗是独立于整个系统之外的,这也是独立看门狗名字的由来,他有自己独立的时钟,不受整个系统的影响,所以独立看门狗主要用来监控硬件上的错误。 窗口看门狗 :使用芯片内部时钟。喂狗的时间既有上限又有下限,即喂狗太早或者太晚都不行,比如我要求你在0.8s到0.9s内
[单片机]
<font color='red'>STM32</font>中的独立看门狗和窗口看门狗是什么
求一种STM32单片机玩转TFTLCD彩屏设计方案
一、功能简介 本项目使用Proteus8.12仿真STM32单片机控制器,使用ST7735R彩屏模块等。 主要功能如下: (1)汉字字符显示; (2)2D图形显示; (3)图片显示; 二、软件设计 //显示界面1--汉字字符显示 void _show_demo1(void) { FRONT_COLOR=WHITE; LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12, Hai XiaoYi ); FRONT_COLOR=RED; LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16, Hai
[单片机]
求一种<font color='red'>STM32</font>单片机玩转TFTLCD彩屏设计方案
STM32 ILI9341驱动TFTLCD屏(一)
TFTLCD是薄膜晶体管液晶显示器。TFTLCD具有亮度好,对比度高,层次感强,颜色鲜艳等优点,是目前最主流的LCD显示器 ,广泛用于电视,手机,电脑,平板等各种的电子产品。 LCD原理图 LCD_CS为芯片选择输入引脚(“低”启用)。 RS用于在并行接口中选择“数据或命令”,当RS为1时,数据被选中;当RS为0时,命令被选中。 WR作为写信号,上升沿写入数据。 RD作为读取信号,上升沿读取数据。 RST为硬复位LCD信号。 D0-D15为16位双向数据线。 BL为背光灯控制信号。 MISO/MOSI/T_PEN/T_CS/CLK为触摸屏接口信号,本节暂不做介绍。 引脚分配为: LCD_CS:PG12、RS:PF12、WR
[单片机]
<font color='red'>STM32</font> ILI9341驱动TFTLCD屏(一)
STM32中断机制 stm32中断方式有几种
STM32的中断机制stm32中断方式有几种 中断机制在单片机中是很重要的环节,中断代码默认地从上往下执行,遇到特定条件或特定语句,将按照指定的程序跳转。而STM32单片机的中断是有两层控制器分别控制的,若采用中断机制,必须同时配置内核和芯片。 在STM32单片机中执行中断机制主要有三个函数,分别是: 1.配置NVIC_Config()函数 2.配置EXTI_Config()函数 3.自行编写中断服务函数 NVIC是嵌套向量中断控制器,主要控制整个单片机芯片中断相关的功能,跟内核紧密耦合。配置NVIC_Config()函数是为单片机提供选择中断源的优先级及打开中断通道,主要由配置NVIC初始化结构体NVIC_InitStr
[单片机]
STM32系列之LCD驱动接口与驱动程序介绍
STM32F103系列是没有内置LCD控制器接口的,如果要驱动LCD,需要一颗LCD图形驱动IC。STM32和LCD驱动IC的接口在STM32端是FSMC,FSMC接口提供各种存储器驱动信号也提供了驱动LCD驱动IC的各种信号。 一、FSMC简介 FSMC概览 如下图可以看到FSMC支持的存储器类型及提供的各种读写控制信号。 图1 2.FSMC 框图 图2 3.FSMC 内存地址空间分配 图3 二、LCD 接口 1.8080和6800接口 这两种接口类型是典型的LCD并行接口。接口信号分为:数据信号和控制信号。 数据信号支持8,9,16,18,24位等。 控制信号用来区分读、写及区分是向LCD寻址命令寄存器还是写L
[单片机]
<font color='red'>STM32</font>系列之LCD驱动接口与驱动程序介绍
STM32 GPIO工作原理详解
1.STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以STM32F103ZET6芯片为例子,该芯片共有144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在STM32端口复用和重映射(AFIO辅
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved