Перейти к содержанию

Передача по SPI


Grampus

Рекомендуемые сообщения

Добрый день!

ПОМОГИТЕ ПОЖАЛУЙСТА!

в описании для одного дисплея нашел код для STM на СИ

там есть строчка которая мне не понятна, точнее смысл ее понятен но нет объявления аргументов функции

помогите пожалуйста. В общем ситуация такая 

 

spi_write ( DTA, 0x00 )                                     spi_write ( CMD, 0x01) 

вот эта функция

DTA - выполняет установку пина в 1 ,    CMD -  выполняет установку пина в 0 

0x00 , 0x01, .........0xFF     это либо данные либо команда. 

 и все бы ничего но все это нужно передать по HAL_SPI_Transmit 

помогите написать эту функцию с описанием аргументов и всех действий.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20 минут назад, Grampus сказал:

в описании для одного дисплея нашел код для STM на СИ

Дык там описание или код??? Где С-код то??? Вижу только название функции, функции не вижу :(

По тому что ты написал помочь тебе не возможно - это бред какой то.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1 минуту назад, ruhi сказал:

Дык там описание или код??? Где С-код то??? Вижу только название функции, функции не вижу :(

По тому что ты написал помочь тебе не возможно - это бред какой то.

Вот фрагмент кода 

/** инициализация таблицы градаций яркости */
static void lcd_set_gray_scale(void)
{
   unsigned char cnt = 0;
   unsigned char step = 0x0C;
   unsigned char max_step = 0xB4;
   spi_write(CMD, 0xB8); /** таблица градаций яркости */
   for (cnt = step; cnt <= max_step; cnt += step)
      spi_write(DTA, cnt);
   spi_write(CMD, 0x00); /** разрешить работу таблицы градаций яркости */
}

static void lcd_set_col(unsigned char start, unsigned char end)
{
   spi_write(CMD, 0x15); /** Set Column Address */
   spi_write(DTA, start); /** начальный адрес */
   spi_write(DTA, end); /** конечный адрес */
}

static void lcd_set_row(unsigned char start, unsigned char end)
{
   spi_write(CMD, 0x75); /** Set Row Address */
   spi_write(DTA, start); /** начальный адрес */
   spi_write(DTA, end); /** конечный адрес */
}

static void lcd_set_start_line(unsigned char start)
{
   spi_write(CMD, 0xA1);
   spi_write(DTA, start);
}

static void lcd_set_wr_ram(void)
{
   spi_write(CMD, 0x5C); /** Разрешает микроконтроллеру записать данные в RAM */
}

static void lcd_current_control(unsigned char val)
{
   spi_write(CMD, 0xC7); // Master Contrast Current Control
   spi_write(DTA, (val > 0x0F) ? 0x0F : val);
}

/** очистка дисплея */
static void lcd_clr(void)
{
   unsigned int i = 0, j = 0;
   lcd_set_col(0x1C, 0x5B); /** 112 SEG до 367 SEG = 112 SEG / 4 до 367 SEG / 4 = 0x1C - 0x5B */
   lcd_set_row(0x00, 0x3F);
   
   for (i = 0; i < 64; i++)
   {
      lcd_set_wr_ram();
      for (j = 0; j < 128; j++)
         spi_write(DTA, 0x00);
   }
}
 

 

но тут тоже только функция есть а описание нету. 

 

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 минуту назад, Grampus сказал:

void spi_write(unsigned char pin, unsigned char val)

Вроде как, ты эту функцию должен сам написать-реализовать.

Функция должна выполнять запись байта в СПАй и дожидаться окончания отправки.

как то так:

void spi_write(unsigned char pin, unsigned char val)

{

Set_Bit_function(pin);

HAL_SPI_Transmit(val);

}

И судя по тому что ты написал надо объявить:

#define CMD 0

#define DTA 1

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, ruhi сказал:

Вроде как, ты эту функцию должен сам написать-реализовать.

Функция должна выполнять запись байта в СПАй и дожидаться окончания отправки.

как то так:

void spi_write(unsigned char pin, unsigned char val)

{

Set_Bit_function(pin);

HAL_SPI_Transmit(val);

}

И судя по тому что ты написал надо объявить:

#define CMD 0

#define DTA 1

да, но мне нужно ( если я правильно понял) дисплею по СПАй сказать это команда или данные и потом еще байт отправить! 

просто байт данных могу отправить, а нужно одновременно отправить CMD или DTA  и байт

т.е. всю функцию отправить в СПАй.

 

Ссылка на комментарий
Поделиться на другие сайты

@Grampus Ну что вы за люди. У дисплея название есть? Как отвечать на такие вопросы. Данные/Команда могут передаваться или по СПИ или внешней ногой.

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, Grampus сказал:

сказать это команда или данные

дак вот эту функцию

Set_Bit_function(pin);

еще надо написать, или просто код сброса установки пина в зависимости от значения параметра, как то так:

void spi_write(unsigned char pin, unsigned char val)

{

if(pin == 1) set(PORTX.PINY);

else clear(PORTX.PINY);

...

 

там должна быть какие то функции ХАЛа типа:

HAL_Set_Port и/или HAL_Clear_Port

Если следовать:

57 минут назад, Grampus сказал:

DTA - выполняет установку пина в 1 ,    CMD -  выполняет установку пина в 0 

 

Изменено пользователем ruhi
добавил

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, MasterElectric сказал:

@Grampus Ну что вы за люди. У дисплея название есть? Как отвечать на такие вопросы. Данные/Команда могут передаваться или по СПИ или внешней ногой.

WEX025664BLPP3N00000    дисплей

SSD1322  контроллер дисплея 

Ссылка на комментарий
Поделиться на другие сайты

Если Вы используете 4-проводный SPI, то D/C определяется по отдельной линии порта.

Если же 3-проводный, то D/C добавляется 9-м битом к слову данных и идет первым.

Какой вариант у Вас? 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Grampus сказал:

и все бы ничего но все это нужно передать по HAL_SPI_Transmit 

Вся проблема решает выкидыванием нафиг говноHALa и тратой 10 минут на написание своей функции работы с SPI.

Ссылка на комментарий
Поделиться на другие сайты

Господа благодарю всех, в общем сделал так :

void spi_write ( uint8_t d, uint8_t OLED_DATA)
{
if(d==1)
GPIOB->BSRR |= GPIO_BSRR_BS_8;       // установили пин в 1 - передаем данные

if(d==0)
GPIOB->BSRR |= GPIO_BSRR_BR_8;      // установили пин в 0 - передаем команду


 HAL_SPI_Transmit_DMA (&hspi1, OLED_DATA_i, sizeof(OLED_DATA));        // передаем по spi 
 OLED_DATA_i [0] = OLED_DATA;
}

 

Ссылка на комментарий
Поделиться на другие сайты

void spi_write ( uint8_t d, uint8_t OLED_DATA)
{
  if(d)GPIOB->BSRR = GPIO_BSRR_BS_8;  // установили пин в 1 - передаем данные
  else
  GPIOB->BSRR = GPIO_BSRR_BR_8;  // установили пин в 0 - передаем команду


 HAL_SPI_Transmit_DMA(&hspi1, OLED_DATA_i, sizeof(OLED_DATA));  // передаем по spi 
 OLED_DATA_i[0] = OLED_DATA;
} 

найдите 10 различий

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

В 03.12.2018 в 22:33, MasterElectric сказал:

void spi_write ( uint8_t d, uint8_t OLED_DATA)
{
  if(d)GPIOB->BSRR = GPIO_BSRR_BS_8;  // установили пин в 1 - передаем данные
  else
  GPIOB->BSRR = GPIO_BSRR_BR_8;  // установили пин в 0 - передаем команду


 HAL_SPI_Transmit_DMA(&hspi1, OLED_DATA_i, sizeof(OLED_DATA));  // передаем по spi 
 OLED_DATA_i[0] = OLED_DATA;
} 

найдите 10 различий

Добрый день! я до сих пор воюю с дисплеем  WEX025664CLPP3N00000, в сети нашел описание подключения к AVR МК, с помощью библиотеки U8glib. 

Подскажите пожалуйста могу ли я использовать эту библиотеку для STM32. Я не умею подключать сторонние библиотеки! ((( 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

На сколько помню дисплеи SPI работают так ставим ножку D/C выбором команда, или дата, потом строб в 1 запись данных в регистр данных после строб вниз.

С АВР перенести не проблема, только время нужно тратить, я так ардуиновские библиотеки под себя для СТМ по регистрам делал, главное понять по библиотеке что нужно, потом сконфигурировать под СТМ интерфейсы, и по алгоритмам библиотеки написать свои функции и все.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...