Skocz do zawartości

STM32 - Problem z wyświetlaczem OLED na sterowniku SSD1306


Lintek

Pomocna odpowiedź

Witam
Staram się podłączyć wyświetlacz na sterowniku SSD1306 do mikrokontrolera STM32F401RE. Posiadam dokładnie ten model wyświetlacza https://kamami.pl/wyswietlacze-oled-graficzne/560775-wyswietlacz-oled-waveshare-096-cala-a.html Chcę połączyć się z nim poprzez i2c i móc wyświetlać na nim tekst czy też figury. Mój kod wygląda aktualnie tak:

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "ssd1306.h"
#include "test.h"
#include "fonts.h"


/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
/* USER CODE BEGIN PFP */

int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
SSD1306_Init();
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
SSD1306_Clear();

SSD1306_GotoXY(5, 0); // coordinates x, y
SSD1306_Puts("Hello", &Font_11x18, 1); // print Hello

SSD1306_GotoXY(0, 24); // coordinates x, y
SSD1306_Puts("ssd1306 OLED", &Font_7x10, 1);

SSD1306_GotoXY(0, 40); // coordinates x, y
SSD1306_Puts("display!", &Font_11x18, 1);

SSD1306_UpdateScreen(); // update screen

HAL_Delay(10000);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}


Bazuje on głównie na poradnikach znalezionych w internecie. Nie jest zbyt skomplikowany, a jednak wyświetlacz w ogóle nie reaguje. Może ktoś ma pomysł co z tym zrobić lub doświadczenie w podobnym przypadku?

Link do komentarza
Share on other sites

Gość

Ten opis użyteczny jest w STM32Cubeide.

Najlepiej będzie jeśli od początku stworzysz projekt i w pliku twojnazwa.ioc właściwie skonfigurujesz procesor.

1.Musisz zainstalować I2C bo ten wyświetlacz komunikuje się z procesorem przez I2C.

2. W necie na Git Hubie znajdziesz biblioteki SSD1306.W sumie musisz zainstalować 5 bibliotek. Trzy w katalogu INC SSD1306.h, font_ascii_5x7.h , GFX.h i dwie w katalogu SRC SSD1306.c. oraz  GFX.c.

3.W /* Private includes -------*/ wpisz      

#include"string.h" oraz

#include"stdio.h".

4. W /*Private function prototypes*/ wpisz

=========================

void GFX_draw_string();

void GFX_draw_fill_rect();

void GFX_draw_char(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size_x, uint8_t size_y);

=====================================

W /* USER CODE BEGIN 2 */ wpisz

SSD1306_init();

SSD1306_display_clear();

GFX_draw_string(10, 10,(unsigned char *)"np. pada deszcz", WHITE, BLACK, 2 , 2 );

SSD1306_display_repaint() ;

========================

Na ekranie powinno pojawić się np. pada deszcz

Słowa kluczowe znajdziesz w bibliotece ssd1306.h

 

 

 

                                                                                                                                     

 

Edytowano przez szymonw
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.