wg12864b-ygh-n#n на STM32F100

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Пытаюсь запустить wg12864b-ygh-n#n на STM32F100
На дисплее ничего не отображается.
Подсветка работает.
При регулировке контраста - ничего не происходит. А должно ли ?
Подключение, соответствие и состояния портов проверил несколько раз.

Контраст подключил вот так:
Изображение

И всё согласно даташиту.
Изображение

Код: Выделить всё

#include "stm32f10x.h"  
#include "mcu_gpio.h"

// Инициализация портов ввода-вывода
void port_init (void) { 
  
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPAEN;  	//clock on portB and portA
  
  // --- PB9 -------------------- 
  GPIOB->CRH &= ~GPIO_CRH_CNF9;      	
  GPIOB->CRH |= GPIO_CRH_MODE9_1; 	
  // --- PB8 -------------------- 
  GPIOB->CRH &= ~GPIO_CRH_CNF8;      	
  GPIOB->CRH |= GPIO_CRH_MODE8_1; 	
  // --- PB7 -------------------- 
  GPIOB->CRL &= ~GPIO_CRL_CNF7;      	
  GPIOB->CRL |= GPIO_CRL_MODE7_1; 	
  // --- PB6 -------------------- 
  GPIOB->CRL &= ~GPIO_CRL_CNF6;      	
  GPIOB->CRL |= GPIO_CRL_MODE6_1; 	
  // --- PB5 -------------------- 
  GPIOB->CRL &= ~GPIO_CRL_CNF5;      	
  GPIOB->CRL |= GPIO_CRL_MODE5_1; 	
  // --- PB13 ------------------- 
  GPIOB->CRH &= ~GPIO_CRH_CNF13;      	
  GPIOB->CRH |= GPIO_CRH_MODE13_1; 	
  // --- PB12 ------------------- 
  GPIOB->CRH &= ~GPIO_CRH_CNF12;      	
  GPIOB->CRH |= GPIO_CRH_MODE12_1; 	
  // --- PA9 -------------------- 
  GPIOA->CRH &= ~GPIO_CRH_CNF9;      	
  GPIOA->CRH |= GPIO_CRH_MODE9_1; 	
  // --- PA10 ------------------- 
  GPIOA->CRH &= ~GPIO_CRH_CNF10;      	
  GPIOA->CRH |= GPIO_CRH_MODE10_1; 	
  // --- PA11 ------------------- 
  GPIOA->CRH &= ~GPIO_CRH_CNF11;      	
  GPIOA->CRH |= GPIO_CRH_MODE11_1; 	
  // --- PA12 ------------------- 
  GPIOA->CRH &= ~GPIO_CRH_CNF12;      	
  GPIOA->CRH |= GPIO_CRH_MODE12_1; 	
  // --- PA7 -------------------- 
  GPIOA->CRL &= ~GPIO_CRL_CNF7;      	
  GPIOA->CRL |= GPIO_CRL_MODE7_1; 	
  // --- PA6 -------------------- 
  GPIOA->CRL &= ~GPIO_CRL_CNF6;      	
  GPIOA->CRL |= GPIO_CRL_MODE6_1; 	
  // --- PA5 -------------------- 
  GPIOA->CRL &= ~GPIO_CRL_CNF5;      	
  GPIOA->CRL |= GPIO_CRL_MODE5_1; 	
}

// задержка
void delay (long i) {

  while (i) i--;
}


// формирование сигнала на портах

#define LCD_CS1_H     GPIOA->BSRR|=GPIO_BSRR_BS10 
#define LCD_CS1_L     GPIOA->BSRR|=GPIO_BSRR_BR10

#define LCD_CS2_H     GPIOA->BSRR|=GPIO_BSRR_BS11 
#define LCD_CS2_L     GPIOA->BSRR|=GPIO_BSRR_BR11

#define LCD_RESET_H   GPIOA->BSRR|=GPIO_BSRR_BS12 
#define LCD_RESET_L   GPIOA->BSRR|=GPIO_BSRR_BR12

#define LCD_RW_H      GPIOA->BSRR|=GPIO_BSRR_BS7 
#define LCD_RW_L      GPIOA->BSRR|=GPIO_BSRR_BR7

#define LCD_DI_H      GPIOA->BSRR|=GPIO_BSRR_BS6 
#define LCD_DI_L      GPIOA->BSRR|=GPIO_BSRR_BR6

#define LCD_ENABLE_H  GPIOA->BSRR|=GPIO_BSRR_BS5 
#define LCD_ENABLE_L  GPIOA->BSRR|=GPIO_BSRR_BR5


// формирование сигнала на 8-битной шине
void form_byte (int data) {
  
  if ((data & (1<<0)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS9; else GPIOB->BSRR|=GPIO_BSRR_BR9;  
  if ((data & (1<<1)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS8; else GPIOB->BSRR|=GPIO_BSRR_BR8;  
  if ((data & (1<<2)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS7; else GPIOB->BSRR|=GPIO_BSRR_BR7;  
  if ((data & (1<<3)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS6; else GPIOB->BSRR|=GPIO_BSRR_BR6;  
  if ((data & (1<<4)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS5; else GPIOB->BSRR|=GPIO_BSRR_BR5;  
  if ((data & (1<<5)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS13; else GPIOB->BSRR|=GPIO_BSRR_BR13;  
  if ((data & (1<<6)) != 0 ) GPIOB->BSRR|=GPIO_BSRR_BS12; else GPIOB->BSRR|=GPIO_BSRR_BR12;  
  if ((data & (1<<7)) != 0 ) GPIOA->BSRR|=GPIO_BSRR_BS9; else GPIOA->BSRR|=GPIO_BSRR_BR9;  
}

// пишем команду в выбранный контроллер
void lcd_command (int cmd) {			

      delay (1000);  
  LCD_CS1_L;		// выбор чипа 1
      delay (1000);  
  LCD_DI_L;		// команда
      delay (1000);  
  LCD_RW_L;		// запись
      delay (1000);  

  form_byte (cmd);	// Команду на шину данных

      delay (10000);		
  LCD_ENABLE_H;		
      delay (10000);	
  LCD_ENABLE_L;
      delay (10000);			
 
  LCD_CS1_L;	        // чип 1 - не активен	
} 

// пишем данные в выбранный контроллер
void lcd_send (int cmd) {			

      delay (1000);  
  LCD_CS1_L;		// выбор чипа 1
      delay (1000);  
  LCD_DI_H;		// команда
      delay (1000);  
  LCD_RW_L;		// запись
      delay (1000);  

  form_byte (cmd);	// Команду на шину данных

      delay (10000);		
  LCD_ENABLE_H;		
      delay (10000);	
  LCD_ENABLE_L;
      delay (10000);			
 
  LCD_CS1_L;	        // чип 1 - не активен	
} 

// инициализация дисплея 
void lcd_init (void) {
 
  lcd_command (0x3F); // включить 
  lcd_command (0x40); // aдрес Y=0 
  lcd_command (0xB8); // cтраница Х=0 
  lcd_command (0xC0); // cкролл = 0 (т.е. с самого верха)
}

// выполнение
int main (void) {
  
  port_init ();  // инициализация портов ввода-вывода
    
  LCD_RESET_L;   // Сброс
  LCD_RESET_H;   // Сброс - не активен
  LCD_ENABLE_L;  // Сигнал передачи данных - не активен
  LCD_CS1_H;	 // Чип 1 - не активен	
  LCD_CS2_H;	 // Чип 2 - не активен		

  lcd_init ();   // комманды инициалицзации дисплея

  lcd_send (189);
 
  while (1) 
  {
  }
}
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 329
Зарегистрирован: Пт мар 13, 2009 10:55:57
Откуда: Калининград

Сообщение Goblin »

На 18 ноге есть отрицательное напряжение?
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Спасибо, заработало.
Что-то я тупанул малость.
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Ответить

Вернуться в «Периферия»