stm32f103ve+BH1750使用教程+oled(HAL库)
1.硬件:BH1750模块+oled
2.代码:BH1750是标准的iic协议的外设,我这里单独有iic的文件,之后想要实现多个设备共用一个iic。
BH1750.c
1 #include "BH1750.h"
2 #include "delay.h"
3 #include "iic.h"
4 void bh_data_send(u8 command)
5 {
6 do{
7 iic_start();
8 iic_byte_write(BHAddWrite);
9 }while(iic_wait_ack());
10 iic_byte_write(command);
11 iic_wait_ack();
12 iic_stop();
13 }
14
15 u16 bh_data_read(void)
16 {
17 u16 buf;
18 iic_start();
19 iic_byte_write(BHAddRead);
20 iic_wait_ack();
21 buf=iic_byte_read(1);
22 buf=buf<<8;
23 buf+=0x00ff&iic_byte_read(0);
24 iic_stop();
25 return buf;
26 }
BH1750.h
#ifndef __BH1750_H
#define __BH1750_H #include "main.h" /*************************************************************/ #define BHAddWrite 0x46 //从机地址+最后写方向位
#define BHAddRead 0x47 //从机地址+最后读方向位
#define BHPowDown 0x00 //关闭模块
#define BHPowOn 0x01 //打开模块等待测量指令
#define BHReset 0x07 //重置数据寄存器值在PowerOn模式下有效
#define BHModeH1 0x10 //高分辨率 单位1lx 测量时间120ms
#define BHModeH2 0x11 //高分辨率模式2 单位0.5lx 测量时间120ms
#define BHModeL 0x13 //低分辨率 单位4lx 测量时间16ms
#define BHSigModeH 0x20 //一次高分辨率 测量 测量后模块转到 PowerDown模式
#define BHSigModeH2 0x21 //同上类似
#define BHSigModeL 0x23 // 上类似
/*************************************************************/
void bh_data_send(u8 command);
u16 bh_data_read(void); #endif
iic.c
#include "iic.h"
#include "delay.h" void iic_init(void)
{
IIC2_SCL = 1;
IIC2_SDA = 1;
}
/*
函数名:iic_start
功 能:启动iic,启动方式,在SCL高电平期间将SDA由高置低
参 数:无
返回值:无
*/
void iic_start(void)
{
SDA2_OUT();
IIC2_SDA=1;
IIC2_SCL=1;
delay_us(1);
IIC2_SDA=0;
delay_us(1);
IIC2_SCL=0;
}
/*
函数名:iic_stop
功 能:停止传输数据,实现方式在SCL高电平期间将SDA由低置高
参 数:无
返回值:无
*/
void iic_stop(void)
{
IIC2_SCL=0;
SDA2_OUT();
IIC2_SDA=0;
delay_us(1);
IIC2_SCL=1;
IIC2_SDA=1;
delay_us(1);
}
/*
函数名:iic_ack
功 能:接收从机应答信号,释放掉总线读取SDA置看是否有负脉冲,
当一段时间无应答默认接收完毕
参 数:无
返回值:无
*/
u8 iic_wait_ack(void)
{
u8 i=0;
SDA2_IN();
IIC2_SDA=1;delay_us(1);
IIC2_SCL=1;delay_us(1);
while(READ2_SDA)
{
i++;
if(i>250)
{
iic_stop(); //如果i>255则产生非应答信号,iic停止
return 1;
} }
IIC2_SCL=0;//时钟输出0
return 0;
}
/*
函数名:iic_nask
功 能:产生非应答信号
参 数:无
返 回:无
*/
void iic_nack(void)
{
IIC2_SCL=0;
SDA2_OUT();
IIC2_SDA=1;
delay_us(1);
IIC2_SCL=1;
delay_us(1);
IIC2_SCL=0;
}
/*
函数名:iic_ask
功 能:产生ask应答
参 数:无
返 回:无
*/
void iic_ack(void)
{
IIC2_SCL=0;
SDA2_OUT();
IIC2_SDA=0;
delay_us(1);
IIC2_SCL=1;
delay_us(1);
IIC2_SCL=0;
}
/*
函数名:iic_bit_write
功 能:传送一个字节
参 数:u8
返回值:无
*/
void iic_byte_write(u8 buf)
{
u8 i;
SDA2_OUT();
IIC2_SCL=0;
for(i=1;i<=8;i++)
{
IIC2_SDA=(buf>>(8-i))&0x01;
delay_us(1);
IIC2_SCL=1;
delay_us(1);
IIC2_SCL=0;
delay_us(1);
}
}
/*
函数名:iic_bit_read
功 能:主机读取一个字节
参 数:ask
返回值:
*/
u8 iic_byte_read(unsigned char ask)
{
unsigned char i,buf=0;
SDA2_IN();
for(i=0;i<8;i++)
{
IIC2_SCL=0;
delay_us(1);
IIC2_SCL=1;
buf <<=1;
if(READ2_SDA)
buf++;
delay_us(1);
}
if(!ask)
iic_nack();
else
iic_ack();
return buf;
}
iic.h
#ifndef __IIC_H
#define __IIC_H #include "main.h" #define SDA2_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)8<<4;}
#define SDA2_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)3<<4;} #define IIC2_SCL PBout(8) //SCL
#define IIC2_SDA PBout(9) //SDA
#define READ2_SDA HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9) void iic_init(void);
void iic_start(void);
void iic_stop(void);
u8 iic_wait_ack(void);
void iic_byte_write(u8 buf);
u8 iic_byte_read(unsigned char ask); #endif
mian.c
int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
OLED_Clear();
LEDG_OFF();
OLED_Init();
iic_init();
bh_data_send(BHPowOn); //==使能BH1750模块
bh_data_send(BHReset); //==复位BH1750模块
bh_data_send(BHModeH2);//==配置BH1750工作模式
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
datalx =bh_data_read()/1.2;
sprintf(string,"Light= %.1f",datalx);
OLED_ShowString(0,0,string,16);
OLED_ShowString(88,0,"lux",16);
OLED_Refresh();
} /* USER CODE END 3 */
}
stm32f103ve+BH1750使用教程+oled(HAL库)的更多相关文章
- 【STM32H7教程】第47章 STM32H7的FMC总线基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第47章 STM32H7的FMC总线基础知识和HA ...
- 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章 STM32H7的HAL库框架设计学 ...
- 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章 STM32H7的TIM定时器基础知识和H ...
- 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章 STM32H7的USART串口基础知识和 ...
- 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章 STM32H7之GPIO的HAL库API ...
- 【STM32H7教程】第16章 STM32H7必备的HAL库API(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第16章 STM32H7必备的HAL库API(重要 ...
- 【STM32H7教程】第61章 STM32H7的MDMA基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第61章 STM32H7的MDMA基础知识和HAL ...
- 【STM32H7教程】第59章 STM32H7的DAC基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第59章 STM32H7的DAC基础知识和HAL库 ...
- 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章 STM32H7硬件JPEG编解码基础知识 ...
随机推荐
- JavaScript实现带正则表达式的表单校验(校验成功后跳转)
运行结果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- python2.7安装pyinstaller
python2.7直接安装pyinstaller会报错,版本4与python2不兼容,所以我们安装时需指定兼容的pyinstaller版本号.安装命令如下: pip2 install pyinstal ...
- Java报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.sirifeng.babytun.dao.GoodsDAO.findById
前言 最近学vue学得差不多了,想来搭个项目实战一下,结果刚开始搭建SSM框架的时候就来到了我们最喜欢的debug环节 org.apache.ibatis.binding.BindingExcepti ...
- C++---条件结构和循环结构
条件结构 if结构 #include <iostream> using namespace std; int main() { //判断用户输入的字符是否是合法的硬盘盘符A-Z char ...
- Linux centos7系统列出systemd下所有正在运行的服务
Linux系统提供各种系统服务(如进程管理.登录.syslog.cron等)和网络服务.Linux支持不同的方法来管理服务(启动.停止.重启.在系统启动时的自动启动等),通常通过流程或服务管理器. 大 ...
- echarts饼图禁止鼠标悬浮区块突出
禁止悬浮突出,在series内添加hoverAnimation:false即可 代码如下: option = { color:['#3498db','#EEEEEE'], series: [ { na ...
- TCP/IP 协议标准简单描述
TCP/IP 协议标准简单描述 说明 分为三部分:中文名称.缩写.说明. 应用层 DNS 域名服务 (DNS) 功能: 将域名转化为IP地址 BOOTP 引导程序协议 (BOOTP) 功能: 允许无盘 ...
- Selenium3自动化测试【27】Frame的操作
本篇文章内容摘要 " 讲解Python3+Selenium3如何处理Frame窗体" 同步视频知识与系列知识内容,可关注:[公众号]:柒哥测试:[WX]:Lee-890;[视频号] ...
- 00. 初次使用(系统安装+ssh连接)
效率教程,配置不需要插显示器,一步到位 一.装系统 1. sd卡用读卡器插上电脑,打开软件SD Formatter 4.0,按默认配置,直接格式化. 软件下载链接:https://pan.baidu. ...
- XCTF练习题---MISC---再见李华
XCTF练习题---MISC---再见李华 flag:Stay hungry, Stay foolish. 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是一张图片,其中有MD5,破解一下没有 ...