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的图

相关推荐
月阳羊5 小时前
【硬件-笔试面试题-95】硬件/电子工程师,笔试面试题(知识点:RC电路中的时间常数)
java·经验分享·单片机·嵌入式硬件·面试
小莞尔8 小时前
【51单片机】【protues仿真】基于51单片机数控直流稳压电源系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔8 小时前
【51单片机】【protues仿真】基于51单片机密码锁系统
c语言·stm32·单片机·嵌入式硬件·51单片机
黑不拉几的小白兔8 小时前
stm32教程:USART串口通信
stm32·单片机·嵌入式硬件
sheepwjl11 小时前
《嵌入式硬件(十二):基于IMX6ULL的时钟操作》
汇编·arm开发·单片机·嵌入式硬件·时钟·.s编译
田甲13 小时前
【STM32】串口的阻塞、中断、DMA收发
stm32·单片机·嵌入式硬件
酷~15 小时前
单片机启动文件——数据段重定位,BSS段清零
单片机·嵌入式硬件
wotaifuzao15 小时前
单片机的RAM与ROM概念
单片机·嵌入式硬件
jz-炸芯片的zero15 小时前
【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
单片机·物联网·算法·zephyr·bms电源管理算法
三佛科技-1341638421215 小时前
蒸面器/蒸脸仪方案开发,蒸面器/蒸脸仪MCU控制方案分析
单片机·嵌入式硬件