[APM32F4] 【APM32F411V开发板测评】+用OLED屏显示板载RTC时间与日期

[复制链接]
 楼主| stb988 发表于 2024-5-6 15:13 | 显示全部楼层 |阅读模式
本帖最后由 stb988 于 2024-5-6 15:40 编辑

#每日话题# #申请原创#     外接了一块SSD1306驱动芯片的OLDE屏,用OLED屏来显示APM32F411V芯片自带的RTC时间,本来想用自带的IIC驱动来驱动oled,测试了一下,没有显示成功,索性就直接用模拟iiC实现吧,接的单片机PB6和PB7,查了数据手册,硬件iic也是这两个接口。    屏幕截图 2024-05-06 145617.png
接好线
IMG_20240506_145000.jpg
移植网上的例程,发现能显示,但是显示一会会卡死,后来发现是写入速度太快,我把GPIO口调慢,和显示点的函数也加了空指令延时就解决了。
  1.   GPIO_Config_T  gpioConfigStruct;
  2.         
  3.     /* Enable the GPIO_LED Clock */
  4.     RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOB);

  5.     /* Configure the GPIO_LED pin */
  6.     GPIO_ConfigStructInit(&gpioConfigStruct);
  7.     gpioConfigStruct.pin = GPIO_PIN_6|GPIO_PIN_7;
  8.     gpioConfigStruct.mode = GPIO_MODE_OUT;
  9.     gpioConfigStruct.speed = GPIO_SPEED_25MHz;
  10.         

  11.     GPIO_Config(GPIOB, &gpioConfigStruct);
  12.     GPIOB->BSCL = GPIO_PIN_6|GPIO_PIN_7;
改成GPIO_SPEED_25MHz;
还有一个在oled初始化时,发现也必须延时一段时间,否则上电会显示倒的图像,还会显示亮度不够,
  1. //OLED_RES_Clr();
  2.         delay_ms(1000);
  3. //        OLED_RES_Set();
  4.         
  5.         OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
  6.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  7.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  8.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  9.         OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
  10.         OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
  11.         OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  12.         OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  13.         OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
  14.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  15.         OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
  16.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  17.         OLED_WR_Byte(0x00,OLED_CMD);//-not offset
  18.         OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
  19.         OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  20.         OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
  21.         OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  22.         OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
  23.         OLED_WR_Byte(0x12,OLED_CMD);
  24.         OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
  25.         OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
  26.         OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
  27.         OLED_WR_Byte(0x02,OLED_CMD);//
  28.         OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
  29.         OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
  30.         OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
  31.         OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
  32.         OLED_Clear();
  33.         OLED_WR_Byte(0xAF,OLED_CMD);
显示成功后,就可以把RTC开启,时间读取出来了
IMG_20240506_144945.jpg
这是显示效果。
APM32F411_OLED.rar (7.87 MB, 下载次数: 1)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

393

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部