数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3294|回复: 19

[Arduino] Arduino给STM32G030编程,硬件SPI驱动液晶屏/OLED失败

[复制链接]
发表于 2023-8-30 20:07:35 | 显示全部楼层
我用过Arduino的STM32G030点过一些屏,你提供的信息太少了,屏的型号,硬件接法,用的哪个第三方的库。。。
回复 支持 反对

使用道具 举报

发表于 2023-9-1 12:35:41 | 显示全部楼层
lemontreenm 发表于 2023-8-31 17:20
屏幕用的ST7567驱动的,屏库是U8g2,接法按照STM官方开发板默认(STM32G030C8T6  /* clock=*/PA5, /* data ...

应该是个Bug,我是SPI共用LCD+SDCARD,所以一直有MISO。

环境:
arduino-1.8.19
stm32 arduino_core  2.4.0

U8G2:

HelloWorld.ino

#define TFT_CS        PA5
#define TFT_RST       PA4
#define TFT_DC        PA6
  
#define TFT_MOSI         PA2
#define TFT_MISO         PA11
#define TFT_SCLK         PA1

U8G2_ST7567_JLX12864_F_4W_HW_SPI   u8g2(U8G2_R0, /* cs=*/ TFT_CS, /* dc=*/ TFT_DC, /* reset=*/ TFT_RST);  


void setup(void) {
    SPI.setMOSI(TFT_MOSI);
    SPI.setSCLK(TFT_SCLK);
    SPI.setMISO(TFT_MISO); //--------->重点,虽然LCD没有连线到MISO,这个不能省掉!。G0系列的SPI封装可能有Bug。
     
    u8g2.begin();
    u8g2.setContrast(70);
}
..........................

打赏

参与人数 1家元 +30 收起 理由
飞向狙沙 + 30 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2023-9-15 17:18:46 | 显示全部楼层


你还没能点亮?我上面已经说明了。G0的SPI Arduino封装有bug: MISO被占用后,你必须指定一个。

缺省的SPI(SPI1)的定义。
STMicroelectronics\hardware\stm32\2.4.0\variants\STM32G0xx\G030C(6-8)T\variant_generic.h

// SPI definitions
#ifndef PIN_SPI_SS
  #define PIN_SPI_SS            PA4
#endif
#ifndef PIN_SPI_SS1
  #define PIN_SPI_SS1           PA15
#endif
#ifndef PIN_SPI_SS2
  #define PIN_SPI_SS2           PB0
#endif
#ifndef PIN_SPI_SS3
  #define PIN_SPI_SS3           PNUM_NOT_DEFINED
#endif
#ifndef PIN_SPI_MOSI
  #define PIN_SPI_MOSI          PA2
#endif
#ifndef PIN_SPI_MISO
  #define PIN_SPI_MISO          PA6
#endif
#ifndef PIN_SPI_SCK
  #define PIN_SPI_SCK           PA1
#endif

你的PA6(MISO),变成了LCD的D/C(GPIO),需要指定一个MISO。

STMicroelectronics\hardware\stm32\2.4.0\variants\STM32G0xx\G030C(6-8)T\PeripheralPins.c

#ifdef HAL_SPI_MODULE_ENABLED
WEAK const PinMap PinMap_SPI_MISO[] = {
  {PA_3,   SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
  {PA_6,   SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
  {PA_9,   SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI2)},
  {PA_9_R, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI2)},
  {PA_11,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
  {PB_2,   SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
  {PB_4,   SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
  {PB_6,   SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI2)},
  {PB_14,  SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
  {PD_3,   SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
  {NC,     NP,   0}
};
#endif

SPI1的MISO还可以选择 PA11,PB4


#####################################

#include <U8g2lib.h>
#include <SPI.h>

#define TFT_MISO  PA11

U8G2_ST7567_OS12864_1_4W_HW_SPI u8g2(U8G2_R2,  /* cs=*/ PA4, /* dc=*/ PA6, /* reset=*/ PB1);  
//U8G2_ST7567_OS12864_1_4W_SW_SPI u8g2(U8G2_R2, /* clock=*/PA1, /* data=*/ PA2, /* cs=*/ PA4, /* dc=*/ PA6, /* reset=*/ PB1);

void setup(void) {
  SPI.setMISO(TFT_MISO);  //<-------
  u8g2.begin();
}

打赏

参与人数 1家元 +90 收起 理由
lemontreenm + 90 熱心助人

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2023-9-16 10:06:35 | 显示全部楼层
老王家的ST7567屏幕测试的结果。
回复 支持 反对

使用道具 举报

发表于 2023-9-16 13:22:24 | 显示全部楼层
okplay 发表于 2023-9-16 10:06
老王家的ST7567屏幕测试的结果。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-19 03:03 , Processed in 0.093600 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表