你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

[Arduino STM32] 03:OLED 驱动

[复制链接]
slotg 发布时间:2016-11-20 16:18
[Arduino STM32] 01:管脚编号 PIN_MAP

[Arduino STM32] 02:LCD5110 驱动


并不是每一个 Arduino AVR 的程序都可以直接使用在 Arduino STM32 板上的,点完了 LCD 之后接下来也要试一下 OLED 的驱动,找了一个使用 Adafruit 库在 Arduino AVR 板上可以运行的例程直接在 STM32 下编译,结果却产生了错误!这貌似是库的支持不兼容,问题目前还在确认中,不过在 Arduino 官网论坛看到了这一篇帖子:

http://forum.arduino.cc/index.php?topic=265904.2115

有人改写了 Adafruit_SSD1306 库,让这个库可以在 Arduino STM32 底下运行,程序中对于 SPI 接口方式的 OLED 管脚是这么声明的:

#define OLED_DC   22   //   D/C   6
#define OLED_RST  21   //   RST   5
#define OLED_MOSI 20   //   SDA   4
#define OLED_CLK  19   //   SCL   3
#define OLED_CS   14   //   ---   x Not Connected

对应于 Arduino STM32 板的管脚为:

22  ->  B6
21  ->  B5
20  ->  B4
19  ->  B3
14  ->  A14

主程序:

  1. /*
  2.    Using Display: http://www.ebay.com/itm/301504841805
  3.    Compiled Arduino GUI 1.6.1 on 2015-04-01 by M. Ray Burnette
  4.      Sketch uses 27,912 bytes (25%) of program storage space. Maximum is 108,000 bytes.
  5.      Global variables use 5,616 bytes of dynamic memory.
  6.    THIS VERSION OF SSD1306 IS SOFTWARE SPI ONLY!!!
  7.    http://github.com/hwiguna/g33k/blob/master/ArduinoProjects/128x64_OLED/HariChord/HariChord.ino
  8. */

  9.   #include ".\Adafruit_GFX.h"
  10.   #include ".\Adafruit_SSD1306.h"

  11. // software SPI works on Maple Mini ARM 32-bit
  12.   // use these settings for the OLED display...
  13.   // These pin #'s are for Maple Mini/UNO/Nano/Mini328
  14.   //     __Signal__Maple_//__OLED 128x64___
  15.   #define OLED_DC   22   //   D/C   6
  16.   #define OLED_RST  21   //   RST   5
  17.   #define OLED_MOSI 20   //   SDA   4
  18.   #define OLED_CLK  19   //   SCL   3
  19.   #define OLED_CS   14   //   ---   x Not Connected
  20.   Adafruit_SSD1306 OLED(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RST, OLED_CS);

  21. int nFrames = 36;

  22. void setup()   {
  23.   pinMode(17, OUTPUT);
  24.   pinMode(18, OUTPUT);
  25.   digitalWrite(17, LOW);
  26.   digitalWrite(18, HIGH);
  27.   // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  28.   OLED.begin(SSD1306_SWITCHCAPVCC);
  29.   // init done
  30.   
  31.   // Show image buffer on the display hardware.
  32.   // Since the buffer is intialized with an Adafruit splashscreen
  33.   // internally, this will display the splashscreen.
  34.   // NOTE: You _must_ call display after making any drawing commands
  35.   // to make them visible on the display hardware!
  36.   OLED.display();                // Adafruit Splash
  37.   OLED.clearDisplay();           // Clear the buffer.
  38.   // Y = 15 is the Blank Line between yellow / blue
  39. }

  40. void loop() {
  41.   for (int frame=0; frame < nFrames; frame++)
  42.   {
  43.     HariChord(frame);
  44.   }

  45.   for (int frame=(nFrames-1); frame >= 0; frame--)
  46.   {
  47.     HariChord(frame);
  48.   }
  49. }

  50. void HariChord(int frame)
  51. {
  52.   OLED.clearDisplay();
  53.   int n = 7;
  54.   int r = frame * 64 / nFrames;
  55.   float rot = frame * 2*PI / nFrames;
  56.   for (int i=0; i<(n-1); i++)
  57.   {
  58.     float a = rot + i * 2*PI / n;
  59.     int x1 = 64 + cos(a) * r;
  60.     int y1 = 32 + sin(a) * r;
  61.     for (int j=i+1; j<n; j++)
  62.     {
  63.       a = rot + j * 2*PI / n;
  64.       int x2 = 64 + cos(a) * r;
  65.       int y2 = 32 + sin(a) * r;
  66.       OLED.drawLine(x1,y1, x2,y2, WHITE);
  67.     }
  68.   }
  69.   OLED.display();
  70. }
复制代码


运行结果:
20161117223121.gif

包括库与例程的压缩文件:

SSD1306-HariChord_swSPI.zip (15.93 KB, 下载次数: 185)

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

收藏 4 评论8 发布时间:2016-11-20 16:18

举报

8个回答
zero99 回答时间:2016-11-21 13:20:13
感谢楼主的分享
ceocbd 回答时间:2016-11-24 07:53:56
很好,很强大哦!
高二毛 回答时间:2016-11-24 08:25:53
感谢分享,很强大。
黑皮男 回答时间:2016-11-26 13:42:33
很炫
zch11230 回答时间:2017-3-3 20:56:20
我也用的STM32F103,但是在调试SPI OLED屏时,第一次上电有时候没显示,需要复位才可以,搜了一下网上也有人在问,楼主有这种情况么。?
dulai 回答时间:2018-2-22 19:07:55

我也用的STM32F103,但是在调试SPI OLED屏时,第一次上电有时候没显示,需要复位才可以,搜了一下网上也有人在问,楼主有这种情况么。
slotg 回答时间:2018-2-22 20:01:05
dulai 发表于 2018-2-22 19:07
我也用的STM32F103,但是在调试SPI OLED屏时,第一次上电有时候没显示,需要复位才可以,搜了一下网上也有 ...

我是没碰过,不过依你说的情况我是认为应该是MCU上电开始运行程序的时候 OLED 还没能正常动作,可以尝试MCU上电后延时一小段时间后再来设定 OLED。
jnstsean 回答时间:2018-5-11 11:18:04
我也用的STM32F103,arduino 开发很简单。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版