国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

瑞薩e2studio----RA2L1通過傳感器檢測溫濕度

RA生態工作室 ? 2022-01-04 14:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.概述

本篇文章主要介紹如何使用芯片型號R7FA2L1AB2DFL的開發板外接溫濕度傳感器進行溫濕度檢測,并通過串口顯示溫濕度。

2.硬件準備

這里我們準備的是芯片型號R7FA2L1AB2DFL的開發板,DHT11溫濕度傳感器模塊。

5e16e074-6b23-11ec-ad3b-dac502259ad0.png

3.溫濕度傳感器參數

5e85e758-6b23-11ec-ad3b-dac502259ad0.png

供電電壓:3.3V~5.5V DC
輸出:單總線數字信號

測量范圍:濕度 20~90%RH,溫度 0~50℃

測量精度:濕度±5%RH,溫度±2%℃

分辨率:濕度1%RH,溫度1℃

長期穩定性:<±1%RH/年

4.新建工程

5e950e0e-6b23-11ec-ad3b-dac502259ad0.png

5.工程模板

5ecf24ea-6b23-11ec-ad3b-dac502259ad0.png


6.保存工程路徑

5ee049dc-6b23-11ec-ad3b-dac502259ad0.png

7.芯片配置

5eedd2e6-6b23-11ec-ad3b-dac502259ad0.png

8.工程模板選擇

5f1fa8f2-6b23-11ec-ad3b-dac502259ad0.png


9.UART配置

點擊Stacks->NewStack->Driver->Connectivity -> UART Driver on r_sci_uart。

5f2e986c-6b23-11ec-ad3b-dac502259ad0.png


10.UART屬性配置

5f4116cc-6b23-11ec-ad3b-dac502259ad0.png

11.設置e2studio堆棧

5f53f1e8-6b23-11ec-ad3b-dac502259ad0.png

12.e2studio的重定向printf設置

5fb8bf92-6b23-11ec-ad3b-dac502259ad0.png

C++ 構建->設置->GNU ARM Cross CLinker->Miscellaneous去掉Other linker flags中的 “--specs=rdimon.specs”

5fccdfea-6b23-11ec-ad3b-dac502259ad0.png

13.printf輸出重定向到串口

打印最常用的方法是printf,所以要解決的問題是將printf的輸出重定向到串口,然后通過串口將數據發送出去。

注意一定要加上頭文件#include

#ifdef __GNUC__                                 //串口重定向
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
        if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}

int _write(int fd,char *pBuffer,int size)
{
    for(int i=0;i;i++)>


14.DHT11鏈接圖

由下圖我們可以得知,我們將DATA接在了P208引腳上。

5fddc012-6b23-11ec-ad3b-dac502259ad0.png

15.IO配置

可以給P208命名,并將P208引腳設置為輸入模式。

5fecea7e-6b23-11ec-ad3b-dac502259ad0.png


16.DHT11數據傳輸

DHT11數字濕溫度傳感器采用單總線數據格式,單個數據引腳端口完成輸入輸出雙向傳輸。數據分小數部分和整數部分,一次完整的數據傳輸為40bit,高位先出。

數據格式為:8bit濕度整數數據+8bit濕度小數數據+8bit溫度整數數據+8bit溫度小數數據+8bit校驗和。

5ffe7e10-6b23-11ec-ad3b-dac502259ad0.png

數據傳送正確,則byte4+byte3+byte2+byte1=byte0。

17.數據發送時序

首先主機發送開始信號,主機變為輸出模式拉低數據線,保持至少18ms時間,再拉高數據線20~40us時間,然后主機變為輸入模式讀取DHT11的響應。DHT11接收到主機發送的開始信號,DHT11會拉低數據線,保持80us時間,作為響應信號,然后DHT11拉高數據線,保持80us時間后,開始輸出數據。待40bit數據傳輸結束后,上拉電阻拉高總線。

600ab00e-6b23-11ec-ad3b-dac502259ad0.png

18.數據0&數據1

數據1時序圖:

601b162e-6b23-11ec-ad3b-dac502259ad0.png

數據0時序圖:

602c985e-6b23-11ec-ad3b-dac502259ad0.png

通過對比時序圖可知,要判斷數據0或數據1,只要判斷拉高電平時間即可。例如,在電平被拉高的40us判斷高低電平,若此時為低電平,則為數據0。若此時為高電平,則為數據1。

19.R_IOPORT_PortDirectionSet()函數原型

603910c0-6b23-11ec-ad3b-dac502259ad0.png

故可以通過R_IOPORT_PortDirectionSet()函數設置端口IO方向,設置方法如下所示。


//設置P208為輸入
R_IOPORT_PortDirectionSet(&g_ioport_ctrl, BSP_IO_PORT_02, 0<<8, 1<<8);

//設置P208為輸出
R_IOPORT_PortDirectionSet(&g_ioport_ctrl, BSP_IO_PORT_02, 1<<8, 1<<8);


20.dht11.c& dht11.h

添加2個文件,dht11.c是驅動文件,dht11.h是頭文件。

604c3fa6-6b23-11ec-ad3b-dac502259ad0.png

dht11.c 代碼:

#include "hal_data.h"
#include 
#include "dht11.h"

uint8_t Temp;
uint8_t Humi;
uint8_t flag=0;
uint8_t retry=0;
bsp_io_level_t p_port_value_dht11;

void DHT11_Rst()
{
    DHT11_IO_OUT();//SET OUTPUT
    DHT11_DQ_LOW;//拉低DQ
    R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);//拉低至少18ms
    DHT11_DQ_HIGH;//DQ=1
    R_BSP_SoftwareDelay(20, BSP_DELAY_UNITS_MICROSECONDS);//主機拉高20~40us
}

void DHT11_Check()
{
    DHT11_IO_IN();//SET INPUT
    retry=0;
    R_IOPORT_PinRead(&g_ioport_ctrl, DHT11, &p_port_value_dht11);
    while(p_port_value_dht11&&retry<100)
    {
          R_IOPORT_PinRead(&g_ioport_ctrl, DHT11, &p_port_value_dht11);
          retry++;
          R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MICROSECONDS);
    }
    if(retry>=100)flag=1;
    else retry=0;
    while(!p_port_value_dht11&&retry<100)
    {
          R_IOPORT_PinRead(&g_ioport_ctrl, DHT11, &p_port_value_dht11);
          retry++;
          R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MICROSECONDS);
    }
    if(retry>=100)flag=1;
    if(flag==1)
    {
        printf("No dht11\n");
        R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
    }
}

void DHT11_Read_Data()
{
        uint8_t buf[5];
        uint8_t i;
        flag=0;

        DHT11_Rst();
        DHT11_Check();
        if(flag==0)
        {
               for(i=0;i<5;i++)//讀取40位數據
               {
                     buf[i]=DHT11_Read_Byte();
               }
               if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])//校驗讀的溫濕度結果是否正確
               {
                     Humi=buf[0];
                     Temp=buf[2];
                     printf("Humi=%d\n",Humi);
                     printf("Temp=%d\n",Temp);
               }
               else printf("Receive error\n");
        }
        R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_SECONDS);

}
//從DHT11讀取一個位   返回值:1/0
uint8_t DHT11_Read_Bit(void)
{
      retry=0;

      while(p_port_value_dht11&&retry<100)//等待變為低電平
      {
             R_IOPORT_PinRead(&g_ioport_ctrl, DHT11, &p_port_value_dht11);
             retry++;
             R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MICROSECONDS);
      }

      retry=0;

      while(!p_port_value_dht11&&retry<100)//等待變為高電平
      {
             R_IOPORT_PinRead(&g_ioport_ctrl, DHT11, &p_port_value_dht11);
             retry++;
             R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MICROSECONDS);
      }

      R_BSP_SoftwareDelay(30, BSP_DELAY_UNITS_MICROSECONDS);
      R_IOPORT_PinRead(&g_ioport_ctrl, DHT11, &p_port_value_dht11);
      if(p_port_value_dht11)return 1;
      else return 0;
}
//從DHT11讀取一個字節   //返回值:讀到的數據
uint8_t DHT11_Read_Byte(void)
{
    uint8_t i,dat;
    dat=0;
   for (i=0;i<8;i++)
  {
      dat<<=1;
      dat|=DHT11_Read_Bit();
    }
    return dat;
}

dht11.h 代碼:


#ifndef _DHT11_H_
#define _DHT11_H_

//IO方向設置
#define DHT11_IO_IN()  R_IOPORT_PortDirectionSet(&g_ioport_ctrl, BSP_IO_PORT_02, 0<<8, 1<<8)
#define DHT11_IO_OUT() R_IOPORT_PortDirectionSet(&g_ioport_ctrl, BSP_IO_PORT_02, 1<<8, 1<<8)
//IO操作
#define DHT11_DQ_LOW   R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_08, BSP_IO_LEVEL_LOW) //數據端口   PA0
#define DHT11_DQ_HIGH  R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_08, BSP_IO_LEVEL_HIGH)  //數據端口   PA0

void DHT11_Rst(void);
void DHT11_Check(void);
void DHT11_Read_Data(void);
uint8_t DHT11_Read_Bit(void);
uint8_t DHT11_Read_Byte(void);

#endif

21.hal_entry.c

hal_entry.c代碼:


#include "hal_data.h"
#include 
#include "dht11.h"

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER

fsp_err_t err = FSP_SUCCESS;
unsigned char send_buff[100];
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
    if(p_args->event == UART_EVENT_TX_COMPLETE)
    {
        uart_send_complete_flag = true;
    }
}

#ifdef __GNUC__                                 //串口重定向
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
        if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}

int _write(int fd,char *pBuffer,int size)
{
    for(int i=0;i;i++)>

22.結果演示

605f5406-6b23-11ec-ad3b-dac502259ad0.png

上圖是我們測出來的溫濕度,下圖是當地溫濕度。可以看出還是在誤差范圍內的。

60a4f402-6b23-11ec-ad3b-dac502259ad0.png

當我們沒有接上DHT11時:

60b0acd4-6b23-11ec-ad3b-dac502259ad0.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18924

    瀏覽量

    398000
  • ARM
    ARM
    +關注

    關注

    135

    文章

    9552

    瀏覽量

    391825
  • 開發板
    +關注

    關注

    26

    文章

    6289

    瀏覽量

    118041
  • 瑞薩電子
    +關注

    關注

    39

    文章

    2973

    瀏覽量

    74359
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FPB-RA6E2試用】【FPB-RA6E2】Zephyr-驅動-DHT11-溫濕度傳感器及設備樹理解

    FPB-RA6E2】Zephyr-驅動-DHT11-溫濕度傳感器及設備樹理解 0、視頻教程 視頻教程地址: https://www.b
    發表于 01-13 14:54

    RA6E2地奇星開發板試用】DHT11 測量溫濕度

    使用 RA6E2 微控制,實現 DHT11 溫濕度傳感器的數據采集,并
    發表于 12-19 18:50

    RA6E2地奇星開發板試用】SHT30傳感器串口調試學習和驗證

    v2.3 https://gitcode.com/Universal-Tool/131ce 總結 本文介紹了【 RA6E2 地奇星開發板】驅動 SHT30 傳感器實現串口打印環境
    發表于 12-11 14:49

    RA2L1 MCU e2 studio和FSP的使用指南

    本期“RA MCU眾測寶典” 繼續聚焦 “環境搭建” 專題,帶大家走進【RA-Eco-RA2L1-48PIN-V1.0】的世界,查看e2 studio和FSP的下載、安裝及使用指南從零
    的頭像 發表于 08-04 13:45 ?2879次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA2L1</b> MCU <b class='flag-5'>e</b>2 <b class='flag-5'>studio</b>和FSP的使用指南

    常見的溫濕度傳感器類型?

    ),溫度精度為±0.2℃(典型)。濕度和溫度數據可以通過MCU、藍牙芯片或SoC芯片通過數字接口直接讀取。它與SMBus、I2C接口兼容。非常適合用于暖通空調、環境監測等。 在選擇
    發表于 06-24 09:24

    RA4L1-SENSOR】RA4L1-SENSOR開發版開箱評測+e2studio軟件安裝

    RA4L1-SENSOR開發板。如下圖所示 拿出里面的開發板,可以看到3件套,接上USB線, 二、e2studio軟件安裝 e2 studio (簡稱為
    發表于 06-12 23:23

    RA單片機在e2 studio環境下printf編譯出錯的問題解析

    最近看到有一些網友在討論關于:RA單片機在e2 studio環境下printf編譯出錯的問題。
    的頭像 發表于 05-24 15:51 ?1578次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b>單片機在<b class='flag-5'>e2</b> <b class='flag-5'>studio</b>環境下printf編譯出錯的問題解析

    RA-Eco-RA4M2開發板評測】RT-Thread上驅動I2C溫濕度傳感器

    I2C Bus0 uart9 Character Device2 pinPin Device0 msh /> 最后用RT-Thread sensor框架自帶的測試cmd測試下溫濕度
    發表于 05-08 22:42

    RA-Eco-RA4M2開發板評測】RA-Eco-RA4M2 溫濕度傳感器HS3003

    (%)和溫度(℃)數據通過以下公式進行計算。 相對濕度: 溫度轉換: 2 實驗詳解 2.1 實驗目的 1) 通過實驗掌握I
    發表于 05-03 22:57

    RA2L1入門學習】+e2_studio軟件安裝及使用

    一、e2_studio軟件安裝及使用 注冊e2 studio | Renesas 電子 下載軟件 安裝 4.創建工程 更改工程位置 新
    發表于 03-27 13:25

    **RA2L1入門學習】+**UART測試實驗

    RA2L1入門學習】+UART測試實驗 本篇文章主要介紹如何使用e2studio單片
    發表于 03-09 15:45

    RA2L1入門學習】02. 串口打印 ADC 檢測電壓

    )即模數轉換,則是將模擬信號轉換為數字信號的模塊,在通信、數據采集等領域發揮著重要作用。例如激光雷達、溫濕度傳感器等,這些傳感器通常是模擬信號,計算機是無法識別模擬信號的,所以得
    發表于 03-07 11:52

    RA2L1入門學習】RA2L1開發環境搭建

    e2 studio 和 FSP 的下載、安裝及使用指南 1. 什么是 e2 studio 和 FSP?
    發表于 03-07 11:33

    RA2L1入門學習】初識RA-Eco-RA2L1-48PIN-V1.0

    RA-Eco-RA2L1-48PIN-V1.0 是電子推出的一款基于 Arm Cortex-M23 內核的超低功耗開發板,專為嵌入式系統和物聯網應用設計。以下從多個維度對其展開詳細介紹:
    發表于 03-07 11:14

    RA2L1入門學習】00. 開箱 + 點燈

    常用到的。 【點燈】 開發MCU是要用到E2 Studio的(簡稱e2s)來開發以及編譯程序。通過
    發表于 03-07 11:07