STM32CubeMX学习教程之十一:硬件I2C读取SHT20温湿度

发布者:静雅心灵最新更新时间:2019-06-15 来源: eefocus关键字:STM32CubeMX  硬件I2C  读取SHT20  温湿度 手机看文章 扫描二维码
随时随地手机看文章

上一篇教程我们使用I2C进行了EEPROM的读写操作,实际上I2C上面挂的所有器件我们都可以操作。


本文的目标就是使用STM32CubeMX的硬件I2C读取麒麟座连接在I2C2上的SHT20芯片温湿度信息。


软件版本:


STM32CubeMX V4.25.0  


 


System Workbench V2.4


固件库版本:


STM32Cube FW_F1 V1.6.1


硬件:OneNet 麒麟座V2.3


在STM32CubeMX中新建项目,选择正确的MCU型号(或者旧项目另存一下也可以)。



首先设置RCC和SYS,如下图



然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图



设置I2C2,麒麟座V2.3 的 SHT20是接在I2C2上的,I2C的设置不需要改,用默认的值就好(默认速率为100KHz)。



打开串口USART1,串口设置也不需要修改,默认115200波特率。



引脚设置如下:



 


Project - setting ,ToolChain/IDE选择 SW4STM32,注意项目名称这里不能有空格,最好不要用中文。


勾选这里


保存以后,点击任务栏的生成代码图标


生成完毕以后在弹出的对话框点击"Open Project", System Workbench自动打开Eclipse并导入和打开了项目,然后展开项目树,


 


双击Src文件夹下的i2c.c, 把I2C时钟初始化提前到GPIO初始化前面(照例我们需要修改那个bug):


void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)

{

 

  GPIO_InitTypeDef GPIO_InitStruct;

  if(i2cHandle->Instance==I2C2)

  {

  /* USER CODE BEGIN I2C2_MspInit 0 */

  __HAL_RCC_I2C2_CLK_ENABLE(); //默认情况下这句时钟初始化代码放在了GPIO初始化之后,需要调整到这里,即GPIO初始化前

  /* USER CODE END I2C2_MspInit 0 */

  

    /**I2C2 GPIO Configuration    

    PB10     ------> I2C2_SCL

    PB11     ------> I2C2_SDA 

    */

    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

 

    /* I2C2 clock enable */

//    __HAL_RCC_I2C2_CLK_ENABLE();//默认情况下这句时钟初始化代码放在了这里,这里需要注释掉

  /* USER CODE BEGIN I2C2_MspInit 1 */

 

  /* USER CODE END I2C2_MspInit 1 */

  }

}

然后编辑main.c,首先我们需要用printf输出一些信息并重定向到串口,参考前面的教程,我们做如下修改:


/* USER CODE BEGIN PFP */

 

/* Private function prototypes -----------------------------------------------*/

 

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

/* USER CODE END PFP */

 

/* USER CODE BEGIN 0 */

 

PUTCHAR_PROTOTYPE

{

    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);

    return ch;

}

/* USER CODE END 0 */

注意我们需要输出浮点数,所以还需要进行如下修改,右键点击项目,选择:


 


project properties > C/C++ Build > Settings > Tool Settings (TAB) > MCU GCC Linker > Miscellaneous > Linker flags


在把-specs=nosys.specs -specs=nano.specs 改为 -specs=nosys.specs -specs=nano.specs -u _printf_float


 


另外不要忘记把STM32Cube_FW_F1_V1.6.0ProjectsSTM3210C_EVALExamplesUARTUART_Printfsyscalls.c 文件复制到Src目录


 


继续编辑main.c


/* USER CODE BEGIN Includes */

#include "sht20.h"

/* USER CODE END Includes */

while (1) {

 

  /* USER CODE END WHILE */

 

  /* USER CODE BEGIN 3 */

SHT20_GetValue();

printf( "Temperature:%0.1fC,  Humidity:%0.1f%%rn", sht20_info.tempreture, sht20_info.humidity);

HAL_Delay(1000);

}

  /* USER CODE END 3 */

 

}

其中sht20.h和sht20.c是基于麒麟座官方的例程移植的,原作者是张继瑞。


源码下载地址:https://github.com/simonliu009/STM32CubeMX-I2C-SHT20


右键点击项目,选择Properties, Run-Debug Settings, 点击右侧的New,在弹出对话框中选择Ac6 STM32 Debugging。



然后任务栏上点击Run图,当然会报错的,原因请查看另一篇我的博客(https://blog.csdn.net/toopoo/article/details/79680323),所以需要右键点击  项目名Run.cfg ,给它改个名字,



然后右键点击项目树里面的项目名称,选择“Propeties”,然后在Run/Debug Settings-选择项目名-Edit-Main-C/C++Application那里点击“Search Project”,然后选择出现的默认的elf文件:



然后在Debugger-User Defined-Browse 那里选择你自己改名的配置文件:



然后右键点击那个新的cfg文件,选择"Open With - Text Editor", 进行如下更改:


source [find interface/stlink.cfg] 更改为 source [find interface/stlink-v2.cfg]


reset_config srst_only srst_nogate connect_assert_srst 这一行改为 reset_config none 


然后再Run一下,就可以了。


关键字:STM32CubeMX  硬件I2C  读取SHT20  温湿度 引用地址:STM32CubeMX学习教程之十一:硬件I2C读取SHT20温湿度

上一篇:STM32CubeMX学习教程之十二:硬件I2C2读取SHT20温湿度并显示在LCD
下一篇:STM32CubeMX学习教程之九:串口与DMA

推荐阅读最新更新时间:2024-11-05 12:51

PIC16F73单片机构成的环境温湿度实时测控装置设计
环境条件中的温湿度指标是许多工作场合的重要参数,不论是仓库管理、图书保存还是工业测量与计量检定,都需要符合操作规定的温湿度环境条件。而温湿度也是最不易保障的指标,针对这一情况,研制可靠且实用的温湿度控制器显得非常重要。本文介绍的温湿度实时控制装置可在0~50℃和20%~98%RH(相对湿度)的范围内任意设定温湿度值,其附加的通信接口可方便地实现与计算机的实时通信,而且便于功能的扩展,可保证温度、湿度满足设计指标。此外,该装置还可自动控制多个设备的多点时间控制电路,因而具有更广泛的应用前景。该装置可实现的功能如下: ●在0~50℃和20%~98%RH间可任意设定温湿度控制点; ●可以实时监测环境温湿度的
[单片机]
PIC16F73单片机构成的环境<font color='red'>温湿度</font>实时测控装置设计
STM32CubeMX开发环境的搭建
1、安装包下载 由于STM32CubeMX软件是基于JAVA环境运行的,所以需要安装JRE才能使用,JRE、STM32CubeMX工具和库可以到官网下载。TM32CubeMX要求JRE最低版本是1.7.0_45,如果你电脑已安装JRE版本大于1.7.0_45,则可以不用再下载安装。 1.1 Oracle官方下载JRE http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html 接受许可,根据自己电脑系统选择下载,如下图: 1.2 ST官方下载STM32CubeMX工具、库 官网可以下载最新版本的软件,STM32C
[单片机]
<font color='red'>STM32CubeMX</font>开发环境的搭建
STM32F10x_硬件I2C主从通信(轮询发送,中断接收)
Ⅰ、写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件、硬件)I2C主机控制从机EEPROM的例子。在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信。但在实际项目中作为I2C从机的应用相对要少的多,本文主要讲述关于【STM32F10x_硬件I2C主从通信】中STM32作为从机的例子。 在学习本问内容之前,如果对I2C协议还不太了解的朋友请先去了解一下I2C协议,或看我之前关于I2C通信的文章(我微信公众号和博客都有)。 关于STM32硬件I2C作为从机的文章网上很少(我在写本文之前也在百度、谷歌等网站上搜索了解过),我猜测大概的原因主要是两点:1.使用该功能的人比较少; 2.说
[单片机]
基于嵌入式的温湿度模糊控制系统的实现
  1 引言   大多数工业环境温湿度控制系统都是基于有线网络的,监控程序运行于PC机上,监控人员需要在固定的监控室内进行温湿度等参数的监控.这样的应用模式存在如下问题,一是监控节点位置固定,可移动性差;二是布线受环境限制,通信故障查找困难.这在一定程度上给温湿度的实时监控带来了不小的麻烦.因此,有必要利用嵌入式技术在PDA上实现温湿度模糊控制系统,这样就可以做到随时随地进行温湿度参数的监控了.另外,目前的工业环境温湿度控制系统大都不支持带有模糊控制条件的参数设置,如湿度“大约在50度左右”或“高温状态”.因此,PDA端的温湿度模糊控制系统需要能接收和处理类似于这样的模糊控制条件.文章对温湿度模糊控制系统的系统构成、模糊控制条
[嵌入式]
使用Stm32Cubemx配置定时器正交编码模式详解
这篇文章也是本人做完一个项目后抱着想记录点东西巩固下知识同时又想给后来的技术同伴一点参考的想法写下来的,和本人之前有关中颖芯片的博文意图是一致的。看完本篇文章可以了解stm32芯片如何配置定时器正交编码模式的同时对cubemx也会有一定的了解。这款工具很好用,很方便,希望所有用st芯片的伙伴们都能掌握它的用法,使用一种工具很快能上手,主要是大家要了解标准库和HAL库之间的一些微小机制区别就很容易了,这篇文章不打算讲这些,要不跑题了,有空的话专门写一篇文章,不过大家也可以在网上找到很多资料,废话不多说了下一段进入主题。 这里假设大家都下了cubemx软件,对软件具有一定的熟悉度。用stm32f030系列来为例吧。
[单片机]
使用<font color='red'>Stm32Cubemx</font>配置定时器正交编码模式详解
STM32CubeMx定时器编码器模式基本使用方法
前言: 增量式编码器在实际应用中还是很常见。 stm32的定时器带的也有编码器模式。 所用的编码器是有ABZ三相,其中ab相是用来计数,z相输出零点信号。 AB相根据旋转的方向不同,输出的波形如下图所示: 第一步:具体配置如下图: 重点说明: 一、如果编码模式设置为 Encoder Mode TI1 and TI2 则会默认检测AB相的上升沿与下降沿; 每一个上升沿和下降沿都触发计数,所以每转一格计数器就会+4;那么上图计数周期设置为400; 也就是编码器转100格,计数器就会置零,重新开始计数! 二、关于Polarity参数:这个参数的意思是在检测到上升沿的时候就触发encoder捕获AB相的值,而并不是这里设置的是上
[单片机]
<font color='red'>STM32CubeMx</font>定时器编码器模式基本使用方法
STM32CubeMX学习笔记1:GPIO输出LED流水灯
MCU:STM32F103ZET6 IDE: MDK-ARM V5 +STM32CubeMX5.0.0 一. 在 Pinout&Configuration---System Core中: 1. 首先设置时钟RCC的HSE(外部高速时钟)为晶振模式:Crystal/ceramic Resonator 2. 设置系统SYS的Debug为Serial Wire: 3. 设置GPIO中的LED管脚。 根据MCU的硬件原理图可以看出LED均是低电平触发,且对应的端口为PC0-PC7,因此在使能是应开启GPIOC端口。 在MCU管脚图中找到PC0-PC7管脚,右键将管脚设置为GPIO_Output输出模式。
[单片机]
<font color='red'>STM32CubeMX</font>学习笔记1:GPIO输出LED流水灯
STM32CubeMX系列教程04_STM32CubeMX各窗口界面描述
一、写在前面 上一篇文章让你入门STM32CubeMX,你可能还是会觉得心里摸不到底。本文就从另外一个角度带你了解STM32CubeMX。 本文讲述STM32CubeMX各主要界面内容,让你对STM32CubeMX这个工具有一个比较直观的认识。 二、主界面 打开STM32CubeMX,呈现的界面大致如下图,界面比较简洁。我把它划分为六大板块。 1.菜单 STM32CubexMX V4版本(前面老版本)有很多功能做在菜单里面,但V5版本优化(删减)菜单,把一些常用功能做在相应界面里面了。 菜单内容后面会单独详细讲述。 2.社交链接 facebook(脸书)、youtube、twitter(推特)以及ST社区、官
[单片机]
<font color='red'>STM32CubeMX</font>系列教程04_STM32CubeMX各窗口界面描述
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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