Jump to content
Grampus

Передача по SPI

Recommended Posts

Добрый день!

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

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

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

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

 

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
20 минут назад, Grampus сказал:

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

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

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


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

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

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);
   }
}
 

 

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

 

Share this post


Link to post
Share on other sites

Высокая надежность SiC! Как они этого добились?

За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.

Подробнее

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


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

Share this post


Link to post
Share on other sites

Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

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  и байт

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

 

Share this post


Link to post
Share on other sites

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

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

Share this post


Link to post
Share on other sites
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 

 

Edited by ruhi
добавил

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

Share this post


Link to post
Share on other sites
2 минуты назад, MasterElectric сказал:

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

WEX025664BLPP3N00000    дисплей

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Grampus сказал:

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

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

Share this post


Link to post
Share on other sites

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

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;
}

 

Share this post


Link to post
Share on other sites
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 различий

Edited by MasterElectric

Share this post


Link to post
Share on other sites
В 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. Я не умею подключать сторонние библиотеки! ((( 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Ножницы должны быть слесарные, с прямыми лезвиями, а не новомодные с зазубринами. Одной рукояткой зажимаются в тиски, получается аналог тех же гильотинных. Но закручивать будет по любому, если длина реза больше, чем длина режущей кромки.
    • Ну да. Чтобы усилитель работал, не обязательно брать  киты, достаточно подумать немного головой. И ставить 4 пары не обязательно, достаточно 2. Плату можно трассировать самому и сделать лутом даже двухсторонку. Дорогие конденсаторы всегда можно заменить на бюджетные. Простой пример: если набивать платы нового Зуева от Лепехина, то там не хватит и 40 кР на одни детали, а если собрать скелет схемы с разумной достаточностью, трассировав пп самому, то тысяч в 6 реально уложиться вполне. Поэтому все относительно.  Против Андронникова ничего не имею, но платы покупать у него бы не стал, даже имея свободных 100 баксов, бо трассировка там не очень и транзисторы на проводах.    Что так коряво пишешь?  Если так думать и слепо верить в маркетинг, то конечно, чтобы послушать аутентичный Линкс 17, тебе придется потратить овер дохрена денех, с учетом заказа торов у автора. Мне же достаточно трассировать плату и набить ее теми деталями, которые есть в наличии, не стремясь с фанатизмом покупать именно те детали, что указаны в схеме. Уверен, что в слепом тесте определить где его аппарат, а где клон на аналогах, не сможет и сам автор. Поэтому выше я и написАл, от чего реально зависит цена реализации любого УМ. Можно собрать простейший Худ и втулить туда банки по 4 тысячи за штуку, трансформатор тысяч за 8 и корпус тысяч за 10-15 с радиаторами. Или собрать Натали в АВ на односторонней плате с двумя парами, что я выкладывал и поставить в БП джамиконы и запитать от двух ТПП323. Чтобы оценить звук и определиться- этого достаточно. А дальше уже конечная реализация. Вот там цена зависит от фантазии.
    • Спасибо за информацию  Закажу деталек и попробую облагородить выходной фильтр.
    • На ютубе мелькает периодически
    • Кому нам? Про броню впрочем прав...чой то кажется не последний раз воздух портит команда кораблика маккейн удирая в нейтральные воды..что поделать-судьба у них такая. Где там наш любимый дональд кук плавает то? Уже давно не слыхать что то про буревестника демократии  
    • Спасибо вам, что ответили. Завтра попробую собрать и нагрузить током до 3,5-4 ампер. Отпишусь потом.  
    • Да, я перепроверил по разводке на плате - на 6 ногу приходит плюс питания ШИМ. По схеме подключения было похоже на не помню какой ШИМ с BOOT выводом.

  • Удобная оплетка для удаления припоя с плат

  • Similar Content

    • By xrou
      Здравствуйте, пытаюсь подключить USB флешку к STM32F767ZI
       
      Включаю USB_OTG_FS - host only, (V bus и SOF  не включаю), USB HOST Class for fs ip - Mass Storage host class, FATFS (USE_LFN - в стеке) - USB_Disk
      В настройках USB_HOST требует, как я понял, пин отвечающий за питание устройства - PC1
      Код простейший, должен работать 100% а может нет. Внутренние файлы библиотек не менял
      Думаю что нет питания на USB устройство т.к. пробовал вставить туда ttl конвертер на котором есть светодиод питания и он не горит
       
      Ваши идеи и предположения? 
       
    • By xrou
      Здравствуйте, хочу подключить джойстик к stmке, но проблема в том что он пятивольтовый, а АЦП все, что больше 3.3 выдаёт как 4095. На ардуино есть контакт aref введённый на плату, но на stm, как я понял, он соединён с контактом питания и все что выше 3.3 вольта просто спалит кристал. 
      Подскажите как подключить пятивольтовое устройство к stmке. 
       
      P.s подключить джойстик к 3.3 не получится из-за появления огромных мёртвых зон.
    • By Black Jack
      Здравствуйте, программатор st-link не видит микроконтроллер STM32F103VET6. Присоединение кварца и внешнее тактирование не помогли. Что не так делаю, подскажите.


      схема.dch плата.dip
    • By strifonoff
      это снова я...
      Максимального быстродействия АЦП можно достичь при частоте АЦП 14 МГц, а этого можно добиться только при системной частоте 56 МГц (если внешний кварц на 8 МГц).
      Но возникает проблема со скоростями UART: значение регистра BRR не получится выставить так, что бы скорость была из стандартного ряда.
      Назрели несколько вопросов:
      1) возможно ли менять системную частоту на лету? (чую, что можно, но пока не знаю как) 
      2) критична ли ошибка в скорости UART по сравнению со стандартной? (что будет на другой стороне заранее не известно, т.к. любой может воткнуть свой девайс работающий на какой-то заранее согласованной стандартной скорости)
      3) как поведёт себя железо (состояние ОЗУ, регистров перефирии, состояние ног и т.д.) на изменение частоты? Две части программы () практически независимы, их объединяет только один массив, который наполняется в первой половине, а обрабатывается в другой.
       
    • By xrou
      Здравствуйте, пытаюсь обрабатывать пакеты приходящие от ESP8266 (01), но проблема в том, что пакеты всегда разной длины ведь мы не знаем, что напишет пользователь (хотя даже ответы на AT команды всегда разной длины). Знаю, что в плате F0 есть прерывание по символу, но у меня F103C8T6. Как быть? Создать массив большого размера нельзя, т.к. HAL_Recieve_IT ждет пока не наберется нужное кол-во символов.
      Приму любую идею и советы
×
×
  • Create New...