[活动专区] 【AT-START-F425测评】+ OLED屏显示驱动

[复制链接]
1232|2
 楼主| jinglixixi 发表于 2022-2-28 12:34 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2022-3-1 11:52 编辑

要对AT-START-F425开发板进行编程设计,其电路原理图是不可或缺的,然而寻了许多遍也未找到,无奈之下只好参照AT-START-F421开发板的原理图来使用,其Arduino接口的原理图见图1所示。

1.bmp
图1  Arduino接口电路
为了使用的方便,特对SCL、SDA周围的4个GPIO口进行了测试,说明其与图1所标识的是一致的,其中测试SDA引脚的效果如图2所示。

2.bmp
图2 测试引脚连接关系
在确定了所用引脚的连接关系后,就可以使用这4个引脚来驱动OLED显示屏了。
受OLED屏的引脚制约,在OLED屏使用Arduino接口时,是按照下面的连接关系来驱动0.96寸双色OLED屏。
CLK----PA5
SDA---PA6
控制相关引脚输出高低电平的语句定义为:
#define OLED_SCLK_Clr()   GPIOA->clr = GPIO_PINS_5
#define OLED_SCLK_Set()   GPIOA->scr = GPIO_PINS_5
#define OLED_SDIN_Clr()   GPIOA->clr = GPIO_PINS_6
#define OLED_SDIN_Set()   GPIOA->scr = GPIO_PINS_6
配置所用引脚为输出口的初始化函数为:
  1. void app_oled_init(void)
  2. {
  3. gpio_init_type gpio_init_struct;
  4. crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  5. gpio_default_para_init(&gpio_init_struct);
  6. gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  7. gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  8. gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  9. gpio_init_struct.gpio_pins = GPIO_PINS_5|GPIO_PINS_6;
  10. gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  11. gpio_init(GPIOA, &gpio_init_struct);
  12. }

对OLED屏的初始化函数为:
  1. void OLED_Init(void)
  2. {
  3. Write_IIC_Command(0xAE);
  4. Write_IIC_Command(0x20);
  5. Write_IIC_Command(0x10);
  6. Write_IIC_Command(0xb0);
  7. Write_IIC_Command(0xc8);
  8. Write_IIC_Command(0x00);
  9. Write_IIC_Command(0x10);
  10. Write_IIC_Command(0x40);
  11. Write_IIC_Command(0x81);
  12. Write_IIC_Command(0xdf);
  13. Write_IIC_Command(0xa1);
  14. Write_IIC_Command(0xa6);
  15. Write_IIC_Command(0xa8);
  16. Write_IIC_Command(0x3F);
  17. Write_IIC_Command(0xa4);
  18. Write_IIC_Command(0xd3);
  19. Write_IIC_Command(0x00);
  20. Write_IIC_Command(0xd5);
  21. Write_IIC_Command(0xf0);
  22. Write_IIC_Command(0xd9);
  23. Write_IIC_Command(0x22);
  24. Write_IIC_Command(0xda);
  25. Write_IIC_Command(0x12);
  26. Write_IIC_Command(0xdb);
  27. Write_IIC_Command(0x20);
  28. Write_IIC_Command(0x8d);
  29. Write_IIC_Command(0x14);
  30. Write_IIC_Command(0xaf);
  31. }

实现字符串显示的函数为:
  1. void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
  2. {
  3.         unsigned char j=0;
  4.         while (chr[j]!='\0')
  5.         {
  6.                 OLED_ShowChar(x,y,chr[j],Char_Size);
  7.                 x+=8;
  8.                 if(x>120)
  9.                 {
  10.                    x=0;
  11.                    y+=2;
  12.                 }
  13.                 j++;
  14.         }
  15. }

   

实现图3所示效果的主程序为:
  1. int main(void)
  2. {
  3. system_clock_config();
  4. at32_board_init();
  5. app_oled_init();
  6. OLED_Init();
  7. OLED_Clear();
  8. OLED_ShowString(0,0,"AT32F425",16);
  9. OLED_ShowString(0,2,"OLED TEST",16);
  10. OLED_ShowString(8,4,"jinglixixi",16);
  11. OLED_ShowString(8,6,"2022.2.26",16);
  12. while(1)
  13. {
  14. at32_led_toggle(LED2);
  15. delay_ms(200);
  16. at32_led_toggle(LED3);
  17. delay_ms(200);
  18. at32_led_toggle(LED4);
  19. delay_ms(200);
  20. }
  21. }
3.bmp

图3 字符串显示效果

若使用Arduino接口来驱动0.91寸单色OLED屏,则其连接关系为:
CLK----PB9
SDA---PB8
控制相关引脚输出高低电平的语句定义为:
#define OLED_SCLK_Clr()   GPIOB->clr = GPIO_PINS_9
#define OLED_SCLK_Set()   GPIOB->scr = GPIO_PINS_9
#define OLED_SDIN_Clr()   GPIOB->clr = GPIO_PINS_8
#define OLED_SDIN_Set()   GPIOB->scr = GPIO_PINS_8
配置所用引脚为输出口的初始化函数为:
  1. void app_oled_init(void)
  2. {
  3. gpio_init_type gpio_init_struct;
  4. crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  5. gpio_default_para_init(&gpio_init_struct);
  6. gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  7. gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  8. gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  9. gpio_init_struct.gpio_pins = GPIO_PINS_8|GPIO_PINS_9;
  10. gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  11. gpio_init(GPIOB, &gpio_init_struct);
  12. }

单色OLED屏的初始化函数为:
  1. void OLED_Init(void)
  2. {
  3. Write_IIC_Command(0xAE);
  4. Write_IIC_Command(0x40);
  5. Write_IIC_Command(0xb0);
  6. Write_IIC_Command(0xc8);
  7. Write_IIC_Command(0x81);
  8. Write_IIC_Command(0xff);
  9. Write_IIC_Command(0xa1);
  10. Write_IIC_Command(0xa6);
  11. Write_IIC_Command(0xa8);
  12. Write_IIC_Command(0x1F);
  13. Write_IIC_Command(0xd3);
  14. Write_IIC_Command(0x00);
  15. Write_IIC_Command(0xd5);
  16. Write_IIC_Command(0xf0);
  17. Write_IIC_Command(0xd9);
  18. Write_IIC_Command(0x22);
  19. Write_IIC_Command(0xda);
  20. Write_IIC_Command(0x02);
  21. Write_IIC_Command(0x8d);
  22. Write_IIC_Command(0x14);
  23. Write_IIC_Command(0xdb);
  24. Write_IIC_Command(0x49);
  25. Write_IIC_Command(0xaf);
  26. }

至于单色屏的其它函数,则与双色屏的基本一致无需修改。
实现图4所示效果的主程序为:
  1. int main(void)
  2. {
  3. system_clock_config();
  4. at32_board_init();
  5. app_oled_init();
  6. OLED_Init();
  7. OLED_Clear();
  8. OLED_ShowString(48,0,"AT32F425",16);
  9. OLED_ShowString(48,2,"OLED TEST",16);
  10. while(1)
  11. {
  12. at32_led_toggle(LED2);
  13. delay_ms(200);
  14. at32_led_toggle(LED3);
  15. delay_ms(200);
  16. at32_led_toggle(LED4);
  17. delay_ms(200);
  18. }
  19. }
4.bmp

图4 字符串显示效果

sparrow054 发表于 2022-3-2 11:05 | 显示全部楼层
楼主的评测不错啊,实用
 楼主| jinglixixi 发表于 2022-3-2 14:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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