STM32MP157使用i2c驱动OLED


之前在电子芯吧客申请了STM32MP157 Mini试用的开发板,没想到能中,到手发现资料太多搁置了一段时间,现在拿出来重新捣鼓。

交叉编译环境搭建

这里我使用的Linux环境为WSL2的Ubuntu 18.04,具体安装过程就不详细讲了,网上教程也很多。简单列举WSL的几个优点:

  1. WSL运行Linux比虚拟机更加流畅

  2. WSL可以直接读写Windows下的文件,文件传输更方便

  3. 与Windows的剪贴板互通

    安装交叉编译工具的过程可以参考正点原子的官方教程。

  • 首先在ubuntu中创建目录
    sudo mkdir /usr/local/arm
  • 将交叉编译器复制到该目录中。我这里的交叉编译器位于Windows下的D:\My_Documents\Embeded\STM32\【正点原子】STM32MP157-mini开发板(A盘)-基础资料\05、开发工具\01、交叉编译器\gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz,在WSL中D盘挂载路径为/mnt/d,可以直接访问。
    sudo cp /mnt/d/My_Documents/Embeded/STM32/【正点原子】STM32MP157-mini开发板(A盘)-基础资料/05、开发工具/01、交叉编译器/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz /usr/local/arm/ -f
  • 复制完成后进入该目录并解压缩
    cd /usr/local/arm/
    sudo tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
  • 修改环境变量
    sudo vi /etc/profile
  • i,在文件末尾添加export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin,按esc后,:wq!保存并退出
  • 使环境变量生效
    source /etc/profile
  • 为了避免出错,安装相关库(实测没有安装也没有出现问题,不过还是建议安装)
    sudo apt-get update
    sudo apt-get install lsb-core lib32stdc++6
  • 查看交叉编译器版本
    arm-none-linux-gnueabihf-gcc -v
    显示以下结果则表示成功

查看交叉编译器版本

OLED驱动代码

首先感谢开源项目stm32mp157_oled提供的STM32MP157通过IIC协议驱动OLED的代码。

  • 使用git克隆到Ubuntu中
    git clone https://gitee.com/william_william/stm32mp157_oled.git
    cd stm32mp157_oled
  • 这里文件比较少就不使用Makefile了,直接修改代码编译。要注意OLED接的引脚要与i2c总线对应上。这里放上核心板引脚原理图

核心板引脚原理图A

核心板引脚原理图B

  • 核心板上与引脚对应的有4个I2C接口:I2C1、I2C2、I2C4、I2C5。使用i2cdetect查看i2c总线

    i2cdetect -l

    查看i2c总线

  • 可以看到总共有4条i2c总线,分别为i2c-0、i2c-1、i2c-2、i2c-3,经过测试得到对应关系如下

i2c总线与引脚对应关系

  • 这里选择引脚PA11、PA12,对应i2c-2。连接OLED后查看i2c-2总线上的i2c设备。

OLED连接

i2cdetect -y 2

查看i2c总线设备

  • 这里已经看见了一个i2c设备,地址为0x3c,就是OLED的i2c地址。现在回到Ubuntu中,修改oled.c中使用的i2c总线为/dev/i2c-2:wq!保存并退出。

修改使用的i2c总线

编译代码并上传

  • 如果已经配置好交叉编译工具,这里可以直接编译了

    arm-none-linux-gnueabihf-gcc -c main.c oled.c
    arm-none-linux-gnueabihf-gcc main.o oled.o -o MP157OLED
  • 如果没有问题的话,会在目录下生成可执行二进制文件MP157OLED。当然这个二进制文件是为ARM架构生成的,当前的Ubuntu执行会出现以下错误,不必担心

    -bash: ./MP157OLED: cannot execute binary file: Exec format error
  • 现在使用scp命令来讲生成的可执行文件上传到开发板中,其中192.168.1.9是开发板的IP地址。这里我用的是WSL1,因此Ubuntu可以共享宿主机的IP,所以Ubuntu与开发板处于同一局域网下。第一次执行时会提示是否信任该主机,输入yes即可。

    scp ./MP157OLED root@192.168.1.9:/home/root/ 

    上传可执行文件

  • 现在回到开发板上,进入/home/root查看是否有可执行文件,有的话可以直接执行查看效果。

    cd ~
    ls
    ./MP157OLED

    可执行文件上传成功

显示结果

  • 成功点亮OLED

显示效果

附件

代码下载地址:
https://tqraf.cn/files/stm32mp157_oled.zip


文章作者: Tqraf
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tqraf !
评论
  目录