之前在电子芯吧客申请了STM32MP157 Mini试用的开发板,没想到能中,到手发现资料太多搁置了一段时间,现在拿出来重新捣鼓。
交叉编译环境搭建
这里我使用的Linux环境为WSL2的Ubuntu 18.04,具体安装过程就不详细讲了,网上教程也很多。简单列举WSL的几个优点:
WSL运行Linux比虚拟机更加流畅
WSL可以直接读写Windows下的文件,文件传输更方便
与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总线对应上。这里放上核心板引脚原理图
核心板上与引脚对应的有4个I2C接口:
I2C1、I2C2、I2C4、I2C5
。使用i2cdetect查看i2c总线i2cdetect -l
可以看到总共有4条i2c总线,分别为
i2c-0、i2c-1、i2c-2、i2c-3
,经过测试得到对应关系如下
- 这里选择引脚
PA11、PA12
,对应i2c-2
。连接OLED后查看i2c-2总线上的i2c设备。
i2cdetect -y 2
- 这里已经看见了一个i2c设备,地址为
0x3c
,就是OLED的i2c地址。现在回到Ubuntu中,修改oled.c
中使用的i2c总线为/dev/i2c-2
,:wq!
保存并退出。
编译代码并上传
如果已经配置好交叉编译工具,这里可以直接编译了
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