精华内容
下载资源
问答
  • stm32读取传感器数据
    千次阅读
    2021-09-04 12:54:10

    stm32中通过485协议读取传感器数据,再用TCP协议发送数据到上位机接收

    硬件

    硬石开发板:YS-F4Pro
    一个9600波特率485通信的温度传感器

    485串口参数

    波特率:9600
    数据位:8
    校 验:noparity
    停止位:1

    实施思路

    从485串口读取温度传感器的原始数据,再从原始数据中读取温度数据,再将温度数据通过TCP串口发给上位机。
    485配置: 参考https://blog.csdn.net/LW_12345/article/details/119982181

    TCP中:
    以硬石提供的《YSF4_HAL_Modbus_004. YSF4_HAL_ETH-008. TCP Server(自由发送数据)》(下载链接:http://www.ing10bbs.com/forum.php?mod=viewthread&tid=1458)历程为例:
    将温度数据赋给TCP,发出去
    real_time_data = Sensor_data.Obj_temp;

    完整代码: https://gitee.com/Luweizhiyuan2020/orbitalrobot.git(OrbitalrobotLowerTCP_485v1.1)

    更多相关内容
  • 采集光照强度数据数据通过串口传输到上位机,微控制器采用的STM32F103VET6单片机
  • stm32中485通信读取传感器数据

    千次阅读 2021-08-29 16:39:39
    stm32中切换波特率读取多个485通信的传感器数据硬件频率切换参考 硬件 硬石开发板:YS-F4Pro 多个9600/4800波特率485通信的传感器 频率切换 思路:先读9600波特率传感器数据,关闭串口,再以4800波特率打开串口,读取...

    stm32中485通信

    硬件

    硬石开发板:YS-F4Pro
    一个9600波特率485通信的温度传感器

    串口参数

    波特率:9600
    数据位:8
    校 验:noparity
    停止位:1

    解决

    以硬石提供的《YSF4_HAL_Modbus_004. 基于Modbus主从机的温湿度数据获取》(下载链接:http://www.ing10bbs.com/forum.php?mod=viewthread&tid=1458)历程为例,改动配置

    
    #define RS485_USARTx_BAUDRATE                        9600  // 38400
    
    husartx_rs485.Init.WordLength = UART_WORDLENGTH_8B;//UART_WORDLENGTH_9B
     
    husartx_rs485.Init.Parity = UART_PARITY_NONE;//UART_PARITY_EVEN
    

    计算机向表头发送: 02 03 00 00 00 02

    源码下载:
    https://gitee.com/Luweizhiyuan2020/orbitalrobot.git
    (OrbitalrobotLowermachine485)

    展开全文
  • stm32 实现对传感器数据采集 上传到上位机 ,算法采用四元数算法 +互补滤波算法 ,卡尔曼滤波算法也已经实现
  • 基于STM32F103 RS485传感器的自编文档,内有对485通讯方式的介绍,及主要函数的介绍和理解。适合想要学习485通讯方式的同学下载,若需要下载例程可看其他上传的文档。
  • STM32 单片机 读取 DHT11 温湿度传感器

    千次阅读 2022-05-10 13:54:15
    DHT11是种单总线数字温湿度传感器,可通过单片机的一个IO改变输入输出方向来读取数字温湿度。...STM32读取DHT11温湿度传感器时首先将DATA脚设为输出并发送开始信号,开始信号为DATA脚输出18ms以上的低

    DHT11是种单总线数字温湿度传感器,可通过单片机的一个IO改变输入输出方向来读取数字温湿度。相对湿度测量范围20-90%RH,相对湿度测量精度为正负%5RH,温度测量范围0-50℃,温度测量精度为正负2℃,相对来说测量精度较低。

    市场上常见的DHT11模块是在DHT11芯片基础上加了4.7K上拉电阻,如下图所示,这样只需三条线就可以和STM32进行通信,DATA脚用于读取温湿度。

    DHT11温湿度传感器封装信息及管脚:

     

    注:使用STM32和DHT11通信时VDD采用3.3V

    STM32读取DHT11温湿度传感器时首先将DATA脚设为输出并发送开始信号,开始信号为DATA脚输出18ms以上的低电平然后再输出20-40us高电平,STM32开始信号输出结束后将DATA脚设为输入并等待DHT11响应。DHT11接收到STM32发送的开始信号后先发送80us低电平再发送80us高电平,然后开始传送数据。

    DHT11每一bit数据都是以50us低电平开始,高电平长短决定数据位是0还是1,当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。

    数字0表示方法:

    数字1表示方法:

    使用STM32读取一字节示例代码:

    DHT11一次完整的数据传输为40bit,高位在前,数据格式为8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。校验和为前4个字节之和取低8bit。

    使用STM32读取DHT11温湿度示例代码:

    注:温湿度结果校验OK后才可使用。

    展开全文
  • 使用的开发板为STM32F103ZET6,通讯方式为IIC,例程可用,可实现最简单的数据读取。内附图片
  • 附件内容分享的是基于STM32开发板读取温湿度传感器DHT11源码,里面还NRF905的程序。 同时附上基于STM32的SHT21程序。 如截图: 这是在线仿真读到的数据,如截图:
  • stm32cubemx ds18b20温度读取串口打印输出

    概述

    本文要做的所有工作标题基本都包括了,读取温度传感器的温度数值,再通过串口打印到串口助手;
    好多博主大神的教程我按步骤做了之后总是出现程序不报错并且检测不到传感器的情况,后来找到原因并且修改后调试正常。

    我用的是普中科技的实验板,主控芯片为STM32103C8T6,只要是stm32的板子,在STM32CubeMX的配置上都是大同小异的。

    DS18B20介绍

    虽然不看这一节依然能顺利的做出实验来,但是还是有必要看看的,知道一下ds18b20.c为什么那么写;
    这位博主这部分写的细致一点,做完实验想细究的可以看看:

    https://blog.csdn.net/liuyy_2000/article/details/113754150

    配置STM32CubeMX生成工程

    1. 打开STM32CubeMX,选择对应MCU:
      在这里插入图片描述
      在这里插入图片描述

    2.配置时钟:
    普中的板子上是有晶振的,这里我使用的是外部时钟;
    在这里插入图片描述

    时钟树配置(因为ds18b20要用到us级的延时,所以要使用到定时器,定时器和配置时钟是关联的):

    在这里插入图片描述

    调试方式配置:
    在这里插入图片描述

    配置与ds18b20连接GPIO引脚(这里我用的PB8):
    在这里插入图片描述

    配置串口通信USART1

    (普中科技的板子硬件设计上只有这个和外部联机):
    在这里插入图片描述

    定时器配置

    在这里插入图片描述

    生成工程配置:
    在这里插入图片描述在这里插入图片描述

    然后点击GENERATE CODE生成代码;

    代码编写部分

    找到工程打开先编译;

    编写us延迟函数

    首在tim.h中声明一下delay_us函数

    /* USER CODE BEGIN Includes */
    void delay_us(uint16_t us);
    /* USER CODE END Includes */
    

    然后在tim.c文件里写入代码

    /* USER CODE BEGIN 1 */
    void delay_us(uint16_t us)
    {
    	uint16_t differ=0xffff-us-5;   //设定定时器计数器起始值 
    
    	
    	HAL_TIM_Base_Start(&htim1);           //启动定时器
    	__HAL_TIM_SetCounter(&htim1,differ); 
    	while(differ < 0xffff-5)                     //补偿,判断            
    	{ 
    		differ = __HAL_TIM_GetCounter(&htim1);   //查询计数器的计数值 
    	} 
    	HAL_TIM_Base_Stop(&htim1);
     
    }
    /* USER CODE END 1 */
    

    重定向printf函数

    先在usart.h中包含输入输出头文件和定义变量;

    /* USER CODE BEGIN Includes */
    #include <stdio.h>
    /* USER CODE END Includes */
    

    然后在usart.c中添加printf重定向函数;

    /* USER CODE BEGIN 0 */
    int fputc(int ch, FILE *fp)
    {
      HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
      return ch;
    }
     
    int fgetc(FILE *fp)
    {
      uint8_t ch = 0;
      HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
      return ch;
    }
    /* USER CODE END 0 */
    

    ds18b20.c和ds18b20.h文件

    ds18b20.h

    #ifndef __DS18B20_H
    #define __DS18B20_H 
    
    #include "main.h"
    
    #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
    #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
    #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
    
    #define GPIOA_ODR_Addr    (GPIOA_BASE+12)
    #define GPIOB_ODR_Addr    (GPIOB_BASE+12)
    #define GPIOC_ODR_Addr    (GPIOC_BASE+12)
    #define GPIOD_ODR_Addr    (GPIOD_BASE+12)
    #define GPIOE_ODR_Addr    (GPIOE_BASE+12)
    #define GPIOF_ODR_Addr    (GPIOF_BASE+12)
    #define GPIOG_ODR_Addr    (GPIOG_BASE+12)
    
    #define GPIOA_IDR_Addr    (GPIOA_BASE+8)
    #define GPIOB_IDR_Addr    (GPIOB_BASE+8)
    #define GPIOC_IDR_Addr    (GPIOC_BASE+8)
    #define GPIOD_IDR_Addr    (GPIOD_BASE+8)
    #define GPIOE_IDR_Addr    (GPIOE_BASE+8)
    #define GPIOF_IDR_Addr    (GPIOF_BASE+8)
    #define GPIOG_IDR_Addr    (GPIOG_BASE+8)
    
    #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)
    #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)
    
    #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)
    #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)
    
    #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)
    #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)
    
    #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)
    #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)
    
    #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)
    #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)
    
    #define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)
    #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)
    
    #define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)
    #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)
    
    //IO操作函数
    #define	DS18B20_DQ_OUT PBout(8) //数据端口
    #define	DS18B20_DQ_IN  PBin(8)  //数据端口
       	
    uint8_t DS18B20_Init(void);			//初始化DS18B20
    short DS18B20_Get_Temp(void);		//获取温度
    void DS18B20_Start(void);			//开始温度转换
    void DS18B20_Write_Byte(uint8_t dat);//写入一个字节
    uint8_t DS18B20_Read_Byte(void);	//读出一个字节
    uint8_t DS18B20_Read_Bit(void);		//读出一个位
    uint8_t DS18B20_Check(void);		//检测是否存在DS18B20
    void DS18B20_Rst(void);				//复位DS18B20
    #endif
    

    ds18b20.c

    #include "ds18b20.h"
    #include "tim.h"
    
    
    //IO方向设置
    void DS18B20_IO_IN(void){
    	GPIO_InitTypeDef GPIO_InitStructure;
    	GPIO_InitStructure.Pin = GPIO_PIN_8;
    	GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
    	HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
    }
    
    void DS18B20_IO_OUT(void){
    	GPIO_InitTypeDef GPIO_InitStructure;
    	GPIO_InitStructure.Pin = GPIO_PIN_8;
    	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    	HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
    }
    
    
    //复位DS18B20
    void DS18B20_Rst(void)	   
    {                 
    	DS18B20_IO_OUT(); //SET PA0 OUTPUT
        DS18B20_DQ_OUT=0; //拉低DQ
        delay_us(750);    //拉低750us
        DS18B20_DQ_OUT=1; //DQ=1 
    	delay_us(15);     //15US
    }
    //等待DS18B20的回应
    //返回1:未检测到DS18B20的存在
    //返回0:存在
    uint8_t DS18B20_Check(void)
    {   
    	uint8_t retry=0;
    	DS18B20_IO_IN();//SET PA0 INPUT	 
        while (DS18B20_DQ_IN&&retry<200)
    	{
    		retry++;
    		delay_us(1);
    	};	 
    	if(retry>=200)return 1;
    	else retry=0;
        while (!DS18B20_DQ_IN&&retry<240)
    	{
    		retry++;
    		delay_us(1);
    	};
    	if(retry>=240)return 1;	    
    	return 0;
    }
    //从DS18B20读取一个位
    //返回值:1/0
    uint8_t DS18B20_Read_Bit(void) 			 // read one bit
    {
        uint8_t data;
    	DS18B20_IO_OUT();//SET PA0 OUTPUT
        DS18B20_DQ_OUT=0; 
    	delay_us(2);
        DS18B20_DQ_OUT=1; 
    	DS18B20_IO_IN();//SET PA0 INPUT
    	delay_us(12);
    	if(DS18B20_DQ_IN)data=1;
        else data=0;	 
        delay_us(50);           
        return data;
    }
    //从DS18B20读取一个字节
    //返回值:读到的数据
    uint8_t DS18B20_Read_Byte(void) 
    {        
        uint8_t i,j,dat;
        dat=0;
    	for (i=1;i<=8;i++) 
    	{
            j=DS18B20_Read_Bit();
            dat=(j<<7)|(dat>>1);
        }						    
        return dat;
    }
    //写一个字节到DS18B20
    //dat:要写入的字节
    void DS18B20_Write_Byte(uint8_t dat)
     {             
        uint8_t j;
        uint8_t testb;
    	DS18B20_IO_OUT();
        for (j=1;j<=8;j++) 
    	{
            testb=dat&0x01;
            dat=dat>>1;
            if (testb) 
            {
                DS18B20_DQ_OUT=0;
                delay_us(2);                            
                DS18B20_DQ_OUT=1;
                delay_us(60);             
            }
            else 
            {
                DS18B20_DQ_OUT=0; 
                delay_us(60);             
                DS18B20_DQ_OUT=1;
                delay_us(2);                          
            }
        }
    }
    //开始温度转换
    void DS18B20_Start(void)// ds1820 start convert
    {   						               
        DS18B20_Rst();	   
    	DS18B20_Check();	 
        DS18B20_Write_Byte(0xcc);
        DS18B20_Write_Byte(0x44);
    } 
    //初始化DS18B20的IO口 DQ 同时检测DS的存在
    //返回1:不存在
    //返回0:存在    	 
    uint8_t DS18B20_Init(void)
    {
    	DS18B20_Rst();
    	return DS18B20_Check();
    }  
    //从ds18b20得到温度值
    //精度:0.1C
    //返回值:温度值 (-550~1250) 
    short DS18B20_Get_Temp(void)
    {
        uint8_t temp;
        uint8_t TL,TH;
    	short tem;
        DS18B20_Start ();                   
        DS18B20_Rst();
        DS18B20_Check();	 
        DS18B20_Write_Byte(0xcc);// skip rom
        DS18B20_Write_Byte(0xbe);// convert	    
        TL=DS18B20_Read_Byte(); // LSB   
        TH=DS18B20_Read_Byte(); // MSB  
    	    	  
        if(TH>7)
        {
            TH=~TH;
            TL=~TL; 
            temp=0;//温度为负  
        }else temp=1;//温度为正	  	  
        tem=TH; //获得高八位
        tem<<=8;    
        tem+=TL;//获得底八位
        tem=(float)tem*0.625;//转换     
    	if(temp)return tem; //返回温度值
    	else return -tem;    
    } 
     
    

    以上是ds18b20.c和ds18b20.h文件的内容;
    保存后要将其添加进工程;

    将ds18b20.c和ds18b20.h文件添加工程


    首先添加.c文件
    在这里插入图片描述

    在这里插入图片描述

    然后添加.h文件的路径

    在这里插入图片描述

    功能实现

    在main.c里

    包含ds18b20.h

    /* USER CODE BEGIN Includes */
    #include "ds18b20.h"
    /* USER CODE END Includes */
    

    添加变量

    /* USER CODE BEGIN PV */
    short temperature;
    /* USER CODE END PV */
    

    判断硬件电路是否含有传感器

    /* USER CODE BEGIN 2 */
      while(DS18B20_Init()){
      	printf("DS18B20 checked failed!!!\r\n");
    	  HAL_Delay(500);
      }
        printf("DS18B20 checked success!!!\r\n");
      /* USER CODE END 2 */
    

    在主循环里每隔500ms向串口发送一次温度数值

     while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
    		temperature = DS18B20_Get_Temp();
    		if(temperature < 0)
    			printf("现在温度是 -%d ℃\r\n",temperature/10);
    		else
    			printf("现在温度是 %d ℃\r\n",temperature/10);
    		HAL_Delay(500);
    
    
      }
      /* USER CODE END 3 */
    

    编译并验证

    在这里插入图片描述

    展开全文
  • STM32,ADC读取光敏传感器,配置看门狗中断
  • 通过stm32用输入捕获方法实现读取超声波数据通过串口输出数据
  • FSR薄膜压力传感器STM32源代码,读取DO数据
  • 基于STM32开发板实现传感数据采集

    千次阅读 2021-06-14 20:22:14
    传感器将采集到的数据传输到STM32(MCU)主控进行数据处理,最后通过串口打印出来。 软硬件环境: 硬件:stm32开发板、DHT11温湿度传感器 软件:keil5、stm32固体库以及软件包 实验步骤: 1、BS
  • stm32f103c8t6的环境下通过软件模拟单总线协议同时读取多个ds18b20温度传感器。代码自动在总线上搜寻设备并显示设备唯一ID。后通过ID值读出对应传感器的温度数据进行串口回显。
  • STM32读取TCS230的频率数据通过串口打印出来
  • 适合对STM32F1系列(芯片为stm32f103c8t6)对ADC,DMA的初学者使用,对理解代码结构以及外设的读取有更深入的了解,工程文件已调试完成,可以直接下载使用
  • STM32F103读取ds18b20温度传感器,通过串口回显数据方便观察。代码注释明确易读懂,方便开发者拿来直接使用。
  • STM32 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。该温度传感器在内部和 ADCx_IN16 输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是 17.1μs。 STM32 ...
  • 通过stm32f103读取ADXL345加速度传感器的值,用模拟IIC通信协议,最后用串口换算成角度输出,亲自测试可用
  • STM32F103C8T6 DHT11温湿度传感器读取程序,串口打印输出,亲测可用
  • stm32f103通过使用RS485方式读取盐度,PH,温度等水体数据并打印到显示屏上进行实时显示
  • 这是一个基于STM32的霍尔传感器测速程序,控制器为STM32F1,串口输出显示
  • 使用STM32F407VGT6读取ADS1262数据(外部压力传感器+内部温度传感器),读取压力传感器数据后做均值+低通软件滤波(没有经过软件滤波的码值跳动范围在4000左右,经过软件滤波的码值跳动在1500左右)。读取五次压力...
  • STM32F103去读取激光传感器数据

    千次阅读 2020-07-23 18:02:13
    硬件设备:激光测距VL53L1模块、六合一、USB-TTL、杜邦线、STM32F103C8T6单片机。给大家看下图片。 VL53L1 ![在这里插入图片描述]...
  • 适合stm32f103c8t6初学者对ADC,DMA方式的处理以及内部温度的获取,工程文件已调试完成通过串口1输出结果,希望能提供良好的帮助
  • STM32F1单片机编程读取热敏传感器上位机显示源代码 C#串口上位机编程源代码 STM32HAL库编程实现 源代码调试
  • STM32F1单片机编程读取光敏传感器上位机显示源代码 C#串口上位机编程源代码 STM32HAL库编程实现 源代码调试
  • STM32F1单片机编程读取光敏传感器上位机显示源代码 光敏传感器信号编程控制LED显示 C#串口上位机编程源代码 STM32HAL库编程实现 源代码调试
  • 1、使用STM32F103C8T6的PB6/PB7脚,软件模拟IIC协议,读取AHT10温湿度值。 2、代码使用KEIL开发,当前在STM32F103C8T6运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、...
  • STM32F407ZE使用温湿度传感器 (广州奥松) ,读取温湿度数据并显示到PC端串口助手实例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,221
精华内容 2,488
关键字:

stm32读取传感器数据