ESP8266 RTOS SDK 移植 u8g2 移植代码

2023-11-06

LED屏驱动ssd1306
屏幕128x64大小

1:移植代码核心(方法1)

port.c

#define SCL_Pin GPIO_SCL
#define SDA_Pin GPIO_SDA

void delay_us(uint32_t time) __attribute__((optimize("O0")));//关键字防止优化

void delay_us(uint32_t time)
{
  uint32_t i = 8 * time;
  while (i--)
    ;
}

#define __NOP() __asm volatile("nop")

uint8_t STM32_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
  switch (msg)
  {
  case U8X8_MSG_DELAY_100NANO: // delay arg_int * 100 nano seconds
    __NOP();
    break;
  case U8X8_MSG_DELAY_10MICRO: // delay arg_int * 10 micro seconds
    os_delay_us(arg_int * 10);
    break;
  case U8X8_MSG_DELAY_MILLI: // delay arg_int * 1 milli second
    vTaskDelay(1);           //1毫秒延时,必须配置freeRtos_config文件的tick为1000hz才能达到1ms
    break;
  case U8X8_MSG_DELAY_I2C: // arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz
    os_delay_us(5);
    break;                      // arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us
  case U8X8_MSG_GPIO_I2C_CLOCK: // arg_int=0: Output low at I2C clock pin
                                // arg_int=1: Input dir with pullup high for I2C clock pin
    gpio_control(SCL_Pin, arg_int); //引脚控制拉高拉低函数
    break;
  case U8X8_MSG_GPIO_I2C_DATA: // arg_int=0: Output low at I2C data pin
                               // arg_int=1: Input direction with pullup high for I2C data pin
    gpio_control(SDA_Pin, arg_int);
    break;
  case U8X8_MSG_GPIO_MENU_SELECT:
    // u8x8_SetGPIOResult(u8x8, /* get menu select pin state */ 0);
    break;
  case U8X8_MSG_GPIO_MENU_NEXT:
    // u8x8_SetGPIOResult(u8x8, /* get menu next pin state */ 0);
    break;
  case U8X8_MSG_GPIO_MENU_PREV:
    // u8x8_SetGPIOResult(u8x8, /* get menu prev pin state */ 0);
    break;
  case U8X8_MSG_GPIO_MENU_HOME:
    // u8x8_SetGPIOResult(u8x8, /* get menu home pin state */ 0);
    break;
  default:
    // u8x8_SetGPIOResult(u8x8, 0); // default return value
    break;
  }

  return 1;
}

在使用u8g2的时候,要先初始化

void init_oled_u8g2(void)
{
    // a structure which will contain all the data for one display
    u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, STM32_gpio_and_delay); // init u8g2 structure
    u8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in sleep mode after this,
    u8g2_SetPowerSave(&u8g2, 0);
    u8g2_ClearBuffer(&u8g2);
    
}

u8g2使用方法注意SendBuffer事项!!!

		u8g2_DrawStr(&u8g2, 1, 16, rx_buffer);//设置显示内容
        u8g2_SendBuffer(&u8g2); //发送内容到屏幕,一定要调用sendBuffer才能显示出来!!!!!!!
        //gpio_control(GPIO_LED, 1);
        u8g2_ClearBuffer(&u8g2); //清空缓存

2:移植代码核心(方法2)
自己实现模拟iic
把u8g2的iic发送接口数据截胡

port.c

uint8_t my_u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
  static uint8_t hw_buf[32];
  static uint8_t hw_buf_idx;
  uint8_t *hw_buf_data;
  uint8_t i = 0;

  switch (msg)
  {
  case U8X8_MSG_BYTE_SEND:
  	//截胡数据存起来
    hw_buf_data = (uint8_t *)arg_ptr; // 
    while (arg_int > 0)               //
    {
      hw_buf[hw_buf_idx++] = *hw_buf_data; //
      hw_buf_data++;
      arg_int--;
    }
    break;

  case U8X8_MSG_BYTE_INIT:
    IIC_Init();
    hw_buf_idx = 0;
    break;
  case U8X8_MSG_BYTE_SET_DC:
    break;
  case U8X8_MSG_BYTE_START_TRANSFER:
    hw_buf_idx = 0;
    break;
  case U8X8_MSG_BYTE_END_TRANSFER:
  	//最后时刻一起发送,使用自己模拟iic接口
    IIC_Start();         // 
    IIC_Send_Byte(0x78); // 1306地址
    IIC_Wait_Ack();
    while (hw_buf_idx--)
    {
      IIC_Send_Byte(hw_buf[i++]); // 
      IIC_Wait_Ack();
    }
    IIC_Stop();
    hw_buf_idx = 0;
    break;
  default:
    return 0;
  }
  return 1;
}

u8g2使用方法同上!!!,一定要sendBuffer才能显示

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

ESP8266 RTOS SDK 移植 u8g2 移植代码 的相关文章

  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并

随机推荐

  • Finding a needle in Haystack: Facebook’s photo storage

    文章目录 Finding a needle in Haystack Facebook s photo storage 简介 背景 设计细节 Haystack Directory Haystack Cache Haystack Store 优
  • QWidget、QDialog及QMainWindow的区别与联系

    QWidget类是所有用户界面对象的基类 QMainWindow和QDialog都是QWidget的子类 一般来说 如果需要嵌入到其他窗体中 则基于QWidget创建 如果是顶级对话框 则基于QDialog创建 如果是主窗体 则基于QMai
  • H5如何直接跳转小程序?

    1 云开发方式 不推荐 不推荐理由 1 要钱 2 麻烦 需要兼容 参考链接 https developers weixin qq com miniprogram dev wxcloud guide staticstorage jump mi
  • 稀疏重构算法详解

    引入 在室内环境中 多径信号具有天然的空间稀疏性 根据压缩感知理论可知 如果信号是可压缩的或者在某个变换域是稀疏的 可以采用一个随机测量矩阵将高维信号映射到一个低维空间上 通过求解优化问题 以很高的概率重构出原始信号 因此 在该理论框架下
  • 带分数

    标题 带分数 100 可以表示为带分数的形式 100 3 69258 714 还可以表示为 100 82 3546 197 注意特征 带分数中 数字1 9分别出现且只出现一次 不包含0 类似这样的带分数 100 有 11 种表示法 题目要求
  • 小心踩雷,一次Java内存泄漏排查实战

    问题出现 晚上七点多开始 我就开始不停地收到报警邮件 邮件显示探测的几个接口有超时情况 多数执行栈都在 java io BufferedReader readLine BufferReader java 389 java io Buffer
  • c++ 变量常量指针练习题

    Q1 在win32 x86模式下 int p int pp double q 请说明p pp q各占几个字节的内存单元 p 占 4 个字节 pp 占 4 个字节 q 占 4 个字节 Q2常量1 1 0 1 的数据类型是什么 1 是 整形 i
  • YOLOv7中的数据集处理【代码分析】

    本文章主要是针对yolov7中数据集处理部分代码进行解析 和yolov5是一样的 也是可以更好的理解训练中送入的数据集到底是什么样子的 数据集的处理离不开两个类 一个是Dataset from torch utils data import
  • python3 -sorted函数 对所有可迭代的对象进行排序操作 sorted(corr_list,key=lambda x: -abs(x[0]))

    sorted 函数对所有可迭代的对象进行排序操作 返回重新排序的列表 sort 与 sorted 区别 sort 是应用在 list 上的方法 sorted 可以对所有可迭代的对象进行排序操 作 list 的 sort 方法返回的是对已经存
  • linux export 的作用

    功能说明 设置或显示环境变量 语 法 export fnp 变量名称 变量设置值 补充说明 在shell中执行程序时 shell会提供一组环境变量 export可新增 修改或删除环境变量 供后续执行的程序使用 export的效力仅及于该此登
  • 我在腾讯做测10年,总结的7条生存经验

    简单做个自我介绍 我是一名测试工程师 从15年毕业到现在工作了6年 一路走过来 觉得自己很幸运遇到了很多伯乐 教会了我很多道理和职场经验 也非常荣幸在阿里工作过4年 搭建过蚂蚁金服的platuo测试框架 thrift测试框架 自动化测试平台
  • React源码分析(一)=> scheduler分析

    文章目录 1 前言 2 getCurrentTime 3 unstable scheduleCallback函数 4 scheduleHostCallbackIfNeeded 4 1 flushWork 4 2 flushFirstCall
  • 学习笔记实操手册

    https note youdao com s KP25iMDf https note youdao com s GAmVO7V 使用yum安装php72 https www cnblogs com JahanGu p 10439472 h
  • 编写一个使用指针的C函数,交换数组a和数组b的对应元素

    编写一个使用指针的C函数 交换数组a和数组b的对应元素 int a 5 1 2 3 4 5 int b 5 10 20 30 40 50 输出格式要求 a d 2d b d 2d 程序运行示例如下 a 0 10 a 1 20 a 2 30
  • QT应用部署流程

    参考链接 https www shuzhiduo com A LPdo07AGz3 1 Windows系统 Windows下使用QT自带工具windeployqt exe部署 windows gt command 切换到QT的工具目录 在c
  • signature=a195252fc5196d0fb82cccccc68b06b3,Gene signatures in wound tissue as evidenced by molecular...

    Wound induction in the chicken CAM Chick embryos were cultured for 10 days and CAMs were inflicted by parallel scalpel s
  • linux 数组里面是json,将JSON解析为shell脚本中的数组

    小编典典 如果您确实无法使用适当的JSON解析器 例如 1 请尝试 基于的解决方案 jq awk Bash 4 x readarray t values lt 3 print 4 myfile json Bash 3 x IFS n rea
  • lua 3.0 中 普通方法延时

    local delayTime cc DelayTime create 1 local callFunND cc CallFunc create function self pushjoystick end local seq cc Seq
  • 微信企业付款至零钱,状态处理中,status=PROCESSING的解决办法

    前段时间腾讯因为支付系统异常 更新了一些东西 然后就开始出现了这个问题 时不时的就会有一个两个状态为 处理中 的交易 但文档中并没有给出解决办法 尝试咨询了客服 给出了两个解决方案 1 把该笔交易当做失败处理 但以后这笔订单就不要再去折腾它
  • ESP8266 RTOS SDK 移植 u8g2 移植代码

    LED屏驱动ssd1306 屏幕128x64大小 1 移植代码核心 方法1 port c define SCL Pin GPIO SCL define SDA Pin GPIO SDA void delay us uint32 t time