Arduino STM32F103(BluePill)教程七 基于U8g2的软件IIC控制 OLED1306 128*64

2023-11-01

Arduino BluePill (STM32 F103)教程七 基于U8g2的软件IIC控制 OLED1306 128*64

为什么之前有硬件IIC,这里又上软件IIC呢?因为之前在公司做了一个小项目,STM32硬件IIC经常卡死,加入看门狗甚至FreeRTOS都无法解决,后来在查阅正点原子F407探索者资料时才知道,八卦新闻是由于受某大公司专利限制STM硬件IIC是有问题的!

但最常见的OLED1306显示屏是基于IIC或SPI协议的,为了节省IO口,果断选择使用IIC,为保持与之前硬件IIC接线一致性,模拟IIC也使用PB6和PB7(请原谅我之前没细说,STM的IIC相当的不稳定,在F103勘误手册有详细说明)

接线如下:
GND->GND
VCC->3.3
SCL->PB6
SDA->PB7
打开Arduino,点击 项目-加载库-管理库-搜索u8g2并下载对应库:
在这里插入图片描述
下载完成后贴代码:

#include <U8g2lib.h>     //调用u8g2库
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE);   // 使用软件IIC,SCL PB6,SDA PB7

void setup(void)
{
  Serial.begin(115200);  
  u8g2.begin();      // 初始化显示屏
}

long int t = 0;
void loop(void)
{
  u8g2.begin();               // 初始化显示屏
  u8g2.clearBuffer();         // 清屏
  u8g2.setFont(u8g2_font_ncenR12_tr); // 选择12*12字体(具体字体说明可以在git上搜索u8g2查看)
  u8g2.drawStr(0, 16, "Hello World!"); //注意这里是0,0开始显示Hello World
  u8g2.drawStr(0, 32, "Hello!"); // 注意这里是0,16开始显示Hello!
  u8g2.drawStr(0, 48, "Hi!"); // 注意这里是0,32开始显示Hello!
  u8g2.setCursor(0, 64);       // 设置打印起始地址(下面的t显示在什么地方)
  u8g2.print(t);          // 显示t
  //u8g2.drawStr(48, 64, "C"); // write something to the internal memory
  //u8g2.drawStr(112, 64, "%"); // write something to the internal memory
    
  u8g2.sendBuffer();          // 将以上所有的缓存内容显示
  Serial.println(t);       //串口输出t!
  delay(500);              //延时0.5秒
  t++;                     //为了区别,t自加1
}

OK,程序并不复杂,但可以解决Bluepill使用IIC卡顿的问题,当然,笔者将u8g2.begin(); 放入loop中,每隔一段时间进行一次显示屏初始化,可以实现显示屏的“热插拔"功能。

文章写到这里基本上已经结束,如果喜欢我的代码,请点个赞或者关注。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arduino STM32F103(BluePill)教程七 基于U8g2的软件IIC控制 OLED1306 128*64 的相关文章

随机推荐

  • java 的 native 方法

    一 概念 一个 Native Method 就是一个 java 调用非 java 代码的接口 一个 Native Method 是这样一个 Java 方法 该方法的实现由非 java 语言实现 有可能是 C 语言实现的 在定义一个 nati
  • linux 信号signal

    信号处理函数 linux c提供了两个信号处理函数SIG IGN SIG DFL SIG IGN 忽略信号 SIG DFL 信号默认处理函数 自定义处理函数 通过signal或sigaction注册自定义信号处理函数 注 信号SIGKILL
  • python爬数据是什么意思-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题 怎么解决你把redirect关闭就可以了 在send时 加上参数allow redirects False 通常每个浏览器都会设置redirect的次数 如果redirect太多会把CPU耗荆所以red
  • qnx-linux-android的LCD驱动调试参数配置-LCD RGB 控制技术讲解 时钟篇上

    锋影 email 174176320 qq com 目录 LCD RGB 控制技术讲解 时钟篇上 时序图 LCD显示流程 LCD时钟分析 显示一行 像素时钟 水平同步时钟 HSYNC 显示一帧 垂直同步时钟VSYNC 时序图 下面是LCD
  • 区块链学习(Spring Boot)【Day03-Day06】

    2023 5 18 idea创建Spring工程 创建module 选择spring 选择Type为Maven 设置Group 一般为域名倒写 设置package name 设置Java版本和sdk版本 一般为11 设置保存路径locati
  • led流水灯

    文章目录 前言 一 什么是led灯 二 Cyclone IV开发板 三 流水灯模块设计 四 工程代码 五 功能仿真 六 modelsim 七 引脚分配 八 运行效果 总结 前言 本章将讲解流水灯的制作 在Cyclone IV开发板上依次点亮
  • layui checkbox设置只能单选

    HTML代码 fieldset style border 1px solid 2779aa height 190px width 100px margin left 15px fieldset
  • 第一课 什么是norm?(An Evolutionary Approach to Norms)

    文章目录 An Evolutionary Approach to Norms 概述 norm game An Evolutionary Approach to Norms 概述 The three most common types of
  • 其实并不难!几分钟带你分析python爬虫入门简单基础!

    一 基础入门 1 1什么是爬虫 爬虫 spider 又网络爬虫 是指向网站 网络发起请求 获取资源后分析并提取有用数据的程序 从技术层面来说就是 通过程序模拟浏览器请求站点的行为 把站点返回的HTML代码 JSON数据 二进制数据 图片 视
  • Selenium面试问题及答案30题版

    近期我会在博客中系统的更新一些关于Selenium的文章 也请大家多多关注下我的视频课程 入门 基于Java的Selenium3自动化测试完整教程 高级 Selenium Java高级架构课程
  • Flutter 使用Screen保持屏幕常亮不息屏

    有时候开发app可能会用到屏幕常亮 不让其息屏 比如你播放一个视频 你肯定不想突然间就跟随系统设置而息屏看不到视频了 所以务必要使用一些插件来控制屏幕的亮度和常亮 本人搜了好多 基本都是使用 wakelock 这个插件来实现不息屏操作 但是
  • hdfs如何赋予目录权限

    用户身份 在1 0 4这个版本的Hadoop中 客户端用户身份是通过宿主操作系统给出 对类Unix系统来说 将来会增加其他的方式来确定用户身份 比如Kerberos LDAP等 期待用上文中提到的第一种方式来防止一个用户假冒另一个用户是不现
  • 鸿蒙系统怎么没有微信界面,如果鸿蒙系统没有微信,你会选择用吗?

    原标题 如果鸿蒙系统没有微信 你会选择用吗 前段时间华为在东莞召开的开发者大会上 华为官方公布了40多个于鸿蒙深度合作的应用 但是有网友发现在这40多个应用中有我们熟知的QQ 微博 却唯独没有微信 这究竟是怎么一回事呢 这是因为腾讯坚持生物
  • Android 低功耗蓝牙摸索踩坑(更新中)

    系列文章目录 文章目录 系列文章目录 前言 一 Xamarin不用Nuget写低功耗蓝牙尝试 失败 二 Xamarin用Nuget Plugin BLE写低功耗蓝牙 三 Android Studio写低功耗蓝牙 总结 前言 本系列估计就一篇
  • Numpy的array与list的复制

    复习中记错了array的复制 以为也同list一样是用切片 list的复制方法如下 a 1 2 3 b a 而array的话 切片和赋值均指向自身 a b a b 均指b 要使用的复制方法如下 array2 array1 copy 对原始的
  • error PRJ0019: 工具从"执行注册"

    每次rebuild VC提示 工具从 执行注册 重新build 提示 生成 1 已成功 注释掉涉及到ACE部分的代码之后此错误消失 查CSDN MSDN无果 解决方法 突然想到VC在编译完毕之后会注册此OCX regsvr32的时候如果缺少
  • monodb,根据条件查询到指定数据,保存到另一张表中

    我这里有两张表 一个是db baike 一个是db baike address 从baike中根据条件读取数据 拿着这条数据在baike address中验证一下是否存在 如果不存在的话存到另一个张表中 我命名为baike city 根据t
  • 【二】Django - v 2.2 Models层

    Models层 模型类 继承自 django db models Model 每个类属性 表现一个数据字段 嵌套Meta声明更多选项 字段类型 通用属性 字段选项 说明 null True False 字段是否可以为NULL 允许数据库存储
  • 如何理解v-model指令

    v model指令的是 view层输入值影响data的属性值 data属性值发生改变会更新view层的数值变化 它负责监听用户的输入事件 从而更新数据 多用于表单组件的 双向数据绑定 它总是将vue实例中的数据作为数据来源 然后当输入事件发
  • Arduino STM32F103(BluePill)教程七 基于U8g2的软件IIC控制 OLED1306 128*64

    Arduino BluePill STM32 F103 教程七 基于U8g2的软件IIC控制 OLED1306 128 64 为什么之前有硬件IIC 这里又上软件IIC呢 因为之前在公司做了一个小项目 STM32硬件IIC经常卡死 加入看门