发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[STM32F4]

【f446re开发板试用】+温湿度采集并显示

[复制链接]
1657|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
294479435|  楼主 | 2015-10-15 23:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直用446驱动一个2.2寸液晶屏程序,今天实现了温湿度采集并显示在液晶屏上;期间遇到很多问题:
1.首先发现一个问题

引脚中没有PB11,由于我的液晶驱动程序中用到了PB11,所以刚开始一直驱动不了,浪费了很多时间;
2.446的时钟配置,以前用过F411有时钟配置工具,而446还没有时钟配置工具,所以只能用库中的配置
Supported STM32F446xx devices
  *-----------------------------------------------------------------------------
  *        System Clock source                    | PLL (HSE)
  *-----------------------------------------------------------------------------
  *        SYSCLK(Hz)                             | 180000000
  *-----------------------------------------------------------------------------
  *        HCLK(Hz)                               | 180000000
  *-----------------------------------------------------------------------------
  *        AHB Prescaler                          | 1
  *-----------------------------------------------------------------------------
  *        APB1 Prescaler                         | 4
  *-----------------------------------------------------------------------------
  *        APB2 Prescaler                         | 2
  *-----------------------------------------------------------------------------
  *        HSE Frequency(Hz)                      | 8000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 8
  *-----------------------------------------------------------------------------
  *        PLL_N                                  | 360
  *-----------------------------------------------------------------------------
  *        PLL_P                                  | 2
  *-----------------------------------------------------------------------------
  *        PLL_Q                                  | 7
  *-----------------------------------------------------------------------------
  *        PLL_R                                  | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_M                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_N                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_P                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_Q                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_R                               | NA
  *-----------------------------------------------------------------------------
  *        I2S input clock                        | NA
  *-----------------------------------------------------------------------------
  *        VDD(V)                                 | 3.3
  *-----------------------------------------------------------------------------
  *        Main regulator output voltage          | Scale1 mode
  *-----------------------------------------------------------------------------
  *        Flash Latency(WS)                      | 5
  *-----------------------------------------------------------------------------
  *        Prefetch Buffer                        | ON
  *-----------------------------------------------------------------------------
  *        Instruction cache                      | ON
  *-----------------------------------------------------------------------------
  *        Data cache                             | ON
  *-----------------------------------------------------------------------------
  *        Require 48MHz for USB OTG FS,          | Disabled
  *        SDIO and RNG clock                     |

因为温湿度传感器的时序很重要,如果时序有一点差别就读不到数据,所以刚开始也出现了问题;
不过最后终于还是弄出来了;

以后在这个基础上添加功能,初步想法是显示可以显示时钟,外接蓝牙可以手机控制一些家中的开关。。。。其他在想到哪儿在加上。

打赏榜单

21ic小喇叭 打赏了 5.00 元 2015-10-20

沙发
294479435|  楼主 | 2015-10-15 23:14 | 只看该作者
附上程序:

2.2TFT.rar

531.18 KB

使用特权

评论回复
板凳
皈依| | 2015-10-16 08:01 | 只看该作者
不错 支持一下

使用特权

评论回复
地板
玛尼玛尼哄| | 2015-10-17 10:23 | 只看该作者
#include "wsd.h"
#include "delay.h"

GPIO_InitTypeDef GPIO_InitStructure;

void io_in(void)
{
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
}

void io_out(void)
{
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
}
uint8_t wsd_init(void)
{
       
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed =GPIO_High_Speed;
    GPIO_Init(GPIOC,&GPIO_InitStructure);
    GPIO_SetBits(GPIOC,GPIO_Pin_2);
    start();
    return check();
       
}
uint8_t check(void)
{
    uint8_t retry=0;
    while((!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))&&retry<100)
    {
        retry++;
        delay_us(1);
    }
    if(retry>=100)
        return 1;
    else
        retry=0;
    while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)&&retry<100)
    {
        retry++;
        delay_us(1);
    }
    if(retry>=100)
        return 1;
    else
        return 0;
}

uint8_t read_bit(void)
{
    uint8_t retry=0;
    while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)&&retry<100)
    {
        retry++;
        delay_us(1);
    }
    retry=0;
    while((!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))&&retry<100)
    {
        retry++;
        delay_us(1);
    }
    delay_us(40);
    if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))
        return 1;
    else
        return 0;

}

uint8_t read_byte(void)
{
    uint8_t i,dat;
    dat=0;
    for(i=0;i<8;i++)
    {
        dat<<=1;
        dat|=read_bit();

    }
    return dat;
}
uint8_t read_data(uint8_t *temp,uint8_t *shidu)
{
    uint8_t buf[5];
    uint8_t i;
    start();
    if(check()==0)
    {
        for(i=0;i<5;i++)
        {
            buf[i]=read_byte();
        }
        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
        {
            *shidu=buf[0];
            *temp=buf[2];
        }

    }
    else
        return 1;
    return 0;
}

void start(void)
{
       

        io_out();
        GPIO_SetBits(GPIOC,GPIO_Pin_2);
        delay_us(100);
        GPIO_ResetBits(GPIOC,GPIO_Pin_2);
        delay_ms(20);
        GPIO_SetBits(GPIOC,GPIO_Pin_2);
        delay_us(30);
        io_in();
       
}


----------------------
这个是干啥的。?

使用特权

评论回复
5
294479435|  楼主 | 2015-10-17 16:20 | 只看该作者
玛尼玛尼哄 发表于 2015-10-17 10:23
#include "wsd.h"
#include "delay.h"

就是温湿度传感器模块的函数啊

使用特权

评论回复
6
可可球| | 2015-10-18 21:11 | 只看该作者
引脚PB11干什么用的

使用特权

评论回复
7
294479435|  楼主 | 2015-10-18 22:08 | 只看该作者
可可球 发表于 2015-10-18 21:11
引脚PB11干什么用的

PB11只是PB端口的一个引脚,只是引脚里面没有

使用特权

评论回复
8
351327851| | 2015-12-16 16:23 | 只看该作者
温湿度传感器,手势识别传感器,UV传感器,低功耗MCU 代理商   QQ  351327851

使用特权

评论回复
9
yklstudent| | 2015-12-16 16:49 | 只看该作者
楼主的屏什么借口,工作电压多少伏?

使用特权

评论回复
10
294479435|  楼主 | 2015-12-16 19:09 | 只看该作者
yklstudent 发表于 2015-12-16 16:49
楼主的屏什么借口,工作电压多少伏?

就淘宝上买的SPI屏,电压3.3V

使用特权

评论回复
11
张凤武| | 2015-12-18 18:04 | 只看该作者
不错!学习下

使用特权

评论回复
12
ji7411| | 2015-12-18 18:10 | 只看该作者
支持下,最近玩板子的人真多。

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

110

帖子

4

粉丝