STM32移植u8g2玩转oled 用软件iic实现驱动oled

移植u8g2到stm

cpp 复制代码
int fputc(int ch,FILE *f)
{
	ITM_SendChar(ch);
	return (ch);
}

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


uint8_t STM32_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
  //printf("%s:msg = %d,arg_int = %d\r\n",__FUNCTION__,msg,arg_int);
  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
 	  for (uint16_t n = 0; n < 320; n++)
      {
         __NOP();
      }     
      break;
    case U8X8_MSG_DELAY_MILLI:			// delay arg_int * 1 milli second
      HAL_Delay(1);
      break;
    case U8X8_MSG_DELAY_I2C:		    // arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz
          //delay 5us
          delay_us(5);						// 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
      if(arg_int == 1) 
      {
        HAL_GPIO_WritePin(GPIOB, SCL2_Pin, GPIO_PIN_SET);
      }
      else if(arg_int == 0)
      {
        HAL_GPIO_WritePin(GPIOB, SCL2_Pin, GPIO_PIN_RESET);  
      }          
      break;							// arg_int=1: Input dir with pullup high for I2C clock pin
    case U8X8_MSG_GPIO_I2C_DATA:		// arg_int=0: Output low at I2C data pin
      //  printf("U8X8_MSG_GPIO_I2C_DATA:%d\r\n",arg_int);
      if(arg_int == 1) 
      {
        HAL_GPIO_WritePin(GPIOB, SDA2_Pin, GPIO_PIN_SET);
      }
      else if(arg_int == 0)
      {
        HAL_GPIO_WritePin(GPIOB, SDA2_Pin, GPIO_PIN_RESET);  
      }         
      break;							// arg_int=1: Input dir with pullup high for I2C data pin

    default:
      u8x8_SetGPIOResult(u8x8, 1);		// default return value
      break;
  }
  return 1;
}

这里是驱动iic

cpp 复制代码
	u8g2_t u8g2; // 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); // wake up display
  int t;

这里可以驱动u8g2 具体作用后续学习

下面就基本上可以驱动成功 最主要是修改后的u8g2的图

相关推荐
天空'之城15 小时前
单片机基础核心知识点汇总(四十九)
单片机·嵌入式硬件
国科安芯15 小时前
星上计算的第一道防线:低轨遥感卫星载荷处理链中的AS32S601型抗辐射MCU—— 面向高分辨率成像与在轨智能处理的场景化综述
大数据·网络·人工智能·单片机·算法·低轨卫星·抗辐射
新晨单片机设计16 小时前
S032A-基于STM32单片机智能加湿器【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·智能加湿器
硅基造物主16 小时前
STM32 从 0 到 1 做智能家居(九):按键消抖与三模式状态机
stm32·单片机·嵌入式硬件·cubemx·智能家居
霖霖71416 小时前
【笔记】直流减速电机(GA25-370)调速
笔记·单片机·mcu
国科安芯16 小时前
从点火到入轨的毫秒尺度:商业运载火箭飞行时序控制中的抗辐射MCU可靠性边界—— 面向短时高可靠任务的单粒子效应证据与架构分析
网络·人工智能·单片机·嵌入式硬件·架构·火箭·抗辐射
吠品16 小时前
78B 只激活 3.46B,Kolibri 给模型选型上了一课
人工智能·单片机·嵌入式硬件
路上有只喵16 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 规格书解读1
单片机·嵌入式硬件
2501_9226395816 小时前
率能半导体 SS6810H双通道H桥驱动芯片:32V/1A,覆盖POS打印机、安防相机、办公自动化、舞台灯光四大应用场景
单片机·嵌入式硬件·机器人·硬件工程
1wpc16 小时前
BCIKit M1 脑电开发板使用教程(一):认识采集板与首次上电
单片机·嵌入式硬件·硬件工程