0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【南京中科微CSM32RV20开发板试用体验】模拟IIC和硬件IIC的使用点亮0.96OLED屏幕+温湿度读取显示

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-30 10:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:少年阿炳, 帖子地址:https://bbs.elecfans.com/jishu_2246563_1_1.html

本次内容包括
1.使用模拟IIC点亮OLED屏幕,并读取DHT11的温湿度显示在OLED屏上
2.硬件IIC非中断的使用

首先是模拟IIC的使用
模拟IIC就是使用单片机控制IO口输出高低电平模拟实际IIC开始,结束,数据发送等的相应规则达到点亮OLED的目的。所以最重要的就是如何配置IO口已经输出高低电平。
将需要的IO口配置成输出模式


  1. GPIO_PULL_Init(GPIOA,PIN7,GPIO_PULLUP);
  2. GPIO_MODE_Init(GPIOA,PIN7,GPIO_MODE_OUTPUT); //SDAGPIO 模式
  3. GPIO_MODE_Init(GPIOA,PIN5,GPIO_MODE_OUTPUT); // SCL GPIO 模式
  4. GPIO_PULL_Init(GPIOA,PIN5,GPIO_PULLUP);
复制代码

使用GPIO_Write()函数输出高/低电平


  1. //#define OLED_SCLK_Set() GPIO_Write(GPIOA,PIN5,GPIO_SET)//PA5(SCL)输出高
  2. //#define OLED_SCLK_Clr() GPIO_Write(GPIOA,PIN5,GPIO_RESET) //PA5(SCL)输出低
  3. //#define OLED_SDIN_Set() GPIO_Write(GPIOA,PIN7,GPIO_SET) //PA7(SDA)输出高
  4. //#define OLED_SDIN_Clr() GPIO_Write(GPIOA,PIN7,GPIO_RESET) //PA7(SDA)输出高
  5. //#define OLED_READ_SDIN() GPIO_Read(GPIOA, PIN7) //读取PA7(SDA)电平
复制代码


之后就是模拟开始信号,结束信号,响应信号,数据发送,命令发送等。我这里是将现成可用的STM32代码移植过来,然后做了对应的修改。详细可以查看附件1.
特别说明:我这里的响应信号也是模拟的,并不是真读取OLED的返回。

DHT11温湿度的读取
DHT11的数据是通过单总线实现的。数据读取信号以及返回的温湿度值都是通过一根数据线完成,因此需要对同一个IO口先进行输出配置,然后进行输入配置。


  1. // DTH11---> PB6
  2. // 输出模式
  3. void DHT11_OUT(void)
  4. {
  5. GPIO_MODE_Init(GPIOB,PIN6,GPIO_MODE_OUTPUT); //GPIO 模式
  6. GPIO_PULL_Init(GPIOB,PIN6,GPIO_PULLUP); //GPIO 上拉//PB6
  7. }
  8. // 输入模式
  9. void DHT11_IN(void)
  10. {
  11. GPIO_MODE_Init(GPIOB,PIN6,GPIO_MODE_INPUT); //GPIO 模式
  12. GPIO_PULL_Init(GPIOB,PIN6,GPIO_PULLUP); //GPIO
  13. }
复制代码



硬件IIC使用的注意事项
在用模拟IIC点亮OLED后,我寻思着使用以下CSM32自带的硬件IIC点亮OLED,
使用的是非中断模式,启动硬件IIC使用的I2C_Init_case1()函数。


  1. void I2C_Init_case1(void)//非中断模式
  2. {
  3. GPIO_MODE_Init(GPIOA, PIN7,GPIO_MODE_AF);
  4. GPIO_MODE_Init(GPIOA, PIN8,GPIO_MODE_AF);
  5. GPIO_AF_Init(GPIOA,PIN7,GPIO_AF0); //SCL
  6. GPIO_AF_Init(GPIOA,PIN8,GPIO_AF0); //SDA
  7. GPIO_PULL_Init(GPIOA, PIN7,GPIO_PULLUP);
  8. GPIO_PULL_Init(GPIOA, PIN8,GPIO_PULLUP);
  9. I2C->CTRL =1<<12    //时钟分频:0-不分频,1-2分频
  10. |0<<9     //error中断:0-关闭,1-开启
  11. |0<<8     //ready中断:0-关闭,1-开启
  12. |0<<7     //时钟频率:0-100K,1-400K
  13. |0x3C; //从机地址
  14. }
复制代码


特别说明一下从机地址的配置形式,因为此线使用模式IIC时从机地址都是0x78,所以到了硬件IIC,我想当然配置成了0x78,这样是错误的。
从机地址的bit0位需要根据READ或者WRITE分别配置成1/0
一开始我将地址配置成0x78后,通过逻辑分析仪读取到的SDA变成了0xF0(11110000),也就是0x78(01111000)左移了一位,也就是说CSM32的硬件IIC将我的地址左移了一位,然后在bit0插入了一位0。所以在初始化配置时,需要将从机地址配置成0x3C,这样才能确保从机地址正确。
之后通过I2C_Write函数写数据。


  1. void I2C_Write(uint8_t addr,uint8_t data)//适用于非中断模式
  2. {
  3. uint32_t i2c_rw_en = 0x0<<16; //i2c操作:0-写操作,1-读操作
  4. uint32_t i2c_addr = addr<<8;  //存储单元地址
  5. uint32_t i2c_rwdata = data; //数据
  6. I2C->STATUS1 = 0; //清除状态标志
  7. I2C->DATA = i2c_addr|i2c_rw_en|i2c_rwdata;//写数据
  8. while(!(I2C->STATUS1&0x01));
  9. I2C->STATUS1 = 0;
  10. }
复制代码

I2C_Write(uint8_t addr,uint8_t data)

addr参数,实际代表的是数据命令,对应的就是模拟IIC发送时,中间的那位数据,
0x00,写入命令。0x40,写入数据。


  1. void OLED_Write_IIC_Command(u8 IIC_Command)
  2. {
  3. I2C_Write(0x00,IIC_Command);
  4. }
  5. /**********************************************
  6. // IIC Write Data
  7. **********************************************/
  8. void OLED_Write_IIC_Data(u8 IIC_Data)
  9. {
  10. I2C_Write(0x40,IIC_Data);
  11. }
复制代码

完成以上修改后,就能将之前模拟IIC修改为硬件IIC。

下面图片中逻辑分析仪的时序图供大家参考,截图框内是错误配置的从机地址。
因为我使用的逻辑分析仪就20几块,显示的从机地址好像不正确,但是波形还是准确的。




3.jpg

2.jpg

40c93b9a48e41c95584ee2fb4f59c3435b492d03.jpg

硬件IIC.rar(源代码下载)

模拟IIC+DHT11.rar(源代码下载)


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 南京中科微
    +关注

    关注

    0

    文章

    60

    浏览量

    1447
  • CSM32RV20
    +关注

    关注

    0

    文章

    40

    浏览量

    511
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    昉·星光开发板温湿度传感器使用

    指示灯不同的颜色。 二、准备工作 在开始本次课程的实际操作之前,同学们需要做好一些准备工作,课程中涉及到的硬件如下: 开发板:昉·星光开发板 LED:RGB三色灯模块 温湿度传感器
    发表于 03-26 07:48

    星鸿派——开源星闪开发板上线!首批试用申请中~

    按键,另外还有温湿度模块用以检测温湿度。”星鸿派(海思WS63V100)扫码入群,获取试用链接概览星鸿派是一款面向创客、学生、嵌入式开发者的星闪开发
    的头像 发表于 01-27 08:04 775次阅读
    星鸿派——开源星闪<b class='flag-5'>开发板</b>上线!首批<b class='flag-5'>试用</b>申请中~

    【瑞萨RA × Zephyr开发板评测】+模拟IIC实现OLED输出(与硬件IIC输出的失败经验)

    使用的瑞萨芯片设置有些不一样,反正我测试是出现了莫名其妙的问题,一下输出数据一下又没有输出了,最后只 能使用替代方案实现模拟IIC输出OLED显示了。
    发表于 01-19 22:23

    RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示

    “RAMCU众测宝典”IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信的OLED显示
    的头像 发表于 01-01 10:04 3068次阅读
    RA MCU众测宝典 | <b class='flag-5'>IIC</b>之【RA2E1】<b class='flag-5'>IIC</b>通信的<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>

    国产IIC温湿度传感器GXHTC3可替代盛思锐SHTC3

    在智能设备飞速发展的今天,高精度、低功耗的温湿度传感器已成为消费电子、物联网等领域的关键部件。英尚代理的国产IIC温湿度传感器GXHTC3,正是为满足市场对高性能传感解决方案的需求而设计,其性能与兼容性可完美对标并替代盛思锐SH
    的头像 发表于 12-29 16:31 403次阅读
    国产<b class='flag-5'>IIC</b><b class='flag-5'>温湿度</b>传感器GXHTC3可替代盛思锐SHTC3

    【瑞萨RA6E2地奇星开发板试用】DHT11 测量温湿度

    使用瑞萨 RA6E2 微控制器,实现 DHT11 温湿度传感器的数据采集,并通过 I2C 接口的 OLED12864 显示屏实时显示数据。 硬件
    发表于 12-19 18:50

    【瑞萨RA6E2地奇星开发板试用】软件IIC驱动OLED屏幕实现数字打印

    整体功耗; 调试优化:新增IIC通信状态打印(通过UART),便于快速定位通信异常问题。 4.3 适用场景 本方案适用于瑞萨RA6E2开发板的入门级外设驱动开发、教学演示、小型嵌入式设备的数字
    发表于 12-11 19:58

    【瑞萨RA6E2】硬件IIC驱动九轴传感器与OLED显示

    一、项目概述 1.1 项目简介 本次试用基于瑞萨RA6E2开发板,通过硬件IIC协议驱动GY-85九轴传感器模块(包含ITG3205陀螺仪、ADXL345加速度计和QMC5883P磁力
    发表于 11-27 02:18

    基于hbirdv2-sdk的iic 0.96寸lcd调试

    一.前言 简介: 基于hbird-sdk的硬件IIC控制 0.96寸lcd. 二.工程结构 硬件: mcu200t fpga开发板 软件结构
    发表于 10-30 06:20

    【RA-Eco-RA6M4开发板评测】DHT11温湿度传感器获取+OLED 屏幕显示

    【简介】 本项目使用瑞萨的RA6M4开发板作为控制和数据处理的单元,使用温湿度传感器去监测周围的环境参数,在OLED 屏幕上完成传感器数据和相关信息的
    发表于 08-26 00:10

    【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度

    实时上传至 Home Assistant 平台,实现物联网温湿度计,并进一步结合 LabVIEW 上位机实现演化曲线分析及数据采集的项目设计。 项目介绍 硬件连接:通过开发板 IIC
    发表于 08-18 13:55

    五科技CF5010RBT60开发板试用体验】硬件IIC点亮OLED屏幕

    显示 七、结论 五科技 CF5010RBT60 开发板通过其高效的硬件 IIC 外设,为驱动 OLED
    发表于 08-08 11:01

    【RA-Eco-RA6M4开发板评测】+OLED显示驱动

    RA-Eco-RA6M4开发板是一款近于最小系统得开发板,为其添加相应的外设,可用起到丰富其羽翼的作用。 这里就为它配置一个I2C接口的OLED屏,其引脚连接关系为: SCLK------P208
    发表于 07-23 17:33

    爱芯32位MCU开发板AiP32RV15X介绍

    AiP32RV15X开发板是一款基于RISCV内核的32位MCU开发板,提供了板载调试器、RESET、WAKEUP按键、三色LED、CAN收发器、USB接口、UART、ADC、SPI、IIC
    的头像 发表于 06-17 10:54 986次阅读
    中<b class='flag-5'>微</b>爱芯32位MCU<b class='flag-5'>开发板</b>AiP32<b class='flag-5'>RV</b>15X介绍

    【RA-Eco-RA4M2开发板评测】RA-Eco-RA4M2 温湿度传感器HS3003

    传感元件,其性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器,经过改进使其在恶劣环境下的性能更稳定。 2.2 HS3003采集温湿度 温度湿度读取时序如下: F
    发表于 05-03 22:57