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

stm32 перевод команд HAL на cmsis или на LL

HAL это хорошо но не всегда .Как перевести некоторые команды на cmsis(LL)это низкоуровневые библиотеки

Спойлер
HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY);

 

Как преобразовать эту команду?

Поделиться сообщением


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

Просто открыть её и прочитать, что написано внутри. И взять из нее то, что относится непосредственно к регистрам.

Поделиться сообщением


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

В 06.07.2024 в 05:24, tonyk_av сказал:

image.thumb.png.8585508345de6de2941a7364943e508b.png

 

В 06.07.2024 в 05:24, tonyk_av сказал:

image.thumb.png.8585508345de6de2941a7364943e508b.png

А для чего эти форумы? Для любителей ? или для жлобов?

Поделиться сообщением


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

29 minutes ago, dimir said:

А для чего эти форумы? Для любителей ? или для жлобов?

А кто жлоб-то? По-моему, тот, кто нифига сам не хочет не читать, не разбираться, зато бомбит все форумы дебильными вопросами. Ладно бы вопросы были сложными, а то ведь всё жёвано-пережёвано, ссылки даны, осталось налить кофе, попить-почитать, чтобы разобраться.

Поделиться сообщением


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

Для жлобов-любителей 🙂 
Сказано жеж - зайти в эту функцию и переписать из нее то, где упоминаются регистры. Хотя, в конкретном случае топикстартера лучше этого не делать, а использовать HAL в предлагаемом виде. Он как раз и создавался для таких, как топикстартер.

Поделиться сообщением


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

8 часов назад, dimir сказал:

HAL это хорошо но не всегда .Как перевести некоторые команды на cmsis(LL)это низкоуровневые библиотеки

  Показать контент
HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY);

 

Как преобразовать эту команду?

может в кубе сразу через LL сделать эту функцию?

image.thumb.png.03d9d8aee7ccee469459dcfa4a59636d.png

 

Поделиться сообщением


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

50 minutes ago, Andrey190 said:

может в кубе сразу через LL сделать эту функцию?

image.thumb.png.03d9d8aee7ccee469459dcfa4a59636d.png

 

Это не путь для мандалорца !

Поделиться сообщением


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

On 7/6/2024 at 2:35 AM, dimir said:

HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY);

Как преобразовать эту команду?

Примерно так:
 

#define SPI_Driver    ARM_Driver_SPI_(RTE_BOARD_ST7735_SPI_DRIVER)
#define SPI_Mode    (ARM_SPI_MODE_MASTER | ARM_SPI_CPOL1_CPHA0 | ARM_SPI_DATA_BITS(8) | ARM_SPI_MSB_LSB | ARM_SPI_SS_MASTER_SW)
#define SPI_Baud    (RTE_BOARD_ST7735_SPI_BAUD)
#define SPI_Flag_Done    (1<<0)
#define SPI_Flag_Error    (1<<1)

extern const ARM_DRIVER_SPI SPI_Driver;
static osThreadId_t Thread_Id;

static void SPI_Handler (uint32_t event)
{
uint32_t Flags = 0;
if (event & ARM_SPI_EVENT_TRANSFER_COMPLETE)
  Flags |= SPI_Flag_Done;
if (event & (ARM_SPI_EVENT_DATA_LOST | ARM_SPI_EVENT_MODE_FAULT))
  Flags |= SPI_Flag_Error;
if (!Flags)
  Flags |= SPI_Flag_Error;
osThreadFlagsSet(Thread_Id, Flags);
}

void ST7735_Initialize (void)
{
Thread_Id = osThreadGetId();
SPI_Driver.Initialize(SPI_Handler);
SPI_Driver.PowerControl(ARM_POWER_FULL);
SPI_Driver.Control(SPI_Mode, SPI_Baud);
}

void ST7735_Uninitialize (void)
{
SPI_Driver.PowerControl(ARM_POWER_OFF);
SPI_Driver.Uninitialize();
}

bool ST7735_Transmit (const void *buff, uint32_t buff_size)
{
SPI_Driver.Send(buff, buff_size);  // <<<--- Вот это оно и есть, собственно HAL_SPI_Transmit
#if SPI_POLLING
while(SPI_Driver.GetStatus().busy);
#else
Flags = osThreadFlagsWait(SPI_Flag_Done | SPI_Flag_Error, osFlagsWaitAny, osWaitForever);
if (Flags & SPI_Flag_Error)
  return false;
#endif
return true;
}

Только надо сначала написать SPI драйвер. Или подключить pack с готовым драйвером.

Изменено пользователем Intel4004

Поделиться сообщением


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

Ох, мать... Чел и спрашивает, как именно переписать сей "драйвер SPI", а "пак с готовым драйвером" он уже подключил. Читайте вопросы внимательнее.

Поделиться сообщением


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

8 minutes ago, EdgeAligned said:

Ох, мать... Чел и спрашивает, как именно переписать сей "драйвер SPI", а "пак с готовым драйвером" он уже подключил. Читайте вопросы внимательнее.

Вы не знаете, что такое CMSIS, вы ничего не понимаете в обсуждаемой теме, но вам сильно хочется изобразить из себя хоть что-то.

Идите самовыражаться в другое место.

Поделиться сообщением


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

51 minutes ago, Intel4004 said:

Примерно так:
 

#define SPI_Driver    ARM_Driver_SPI_(RTE_BOARD_ST7735_SPI_DRIVER)
#define SPI_Mode    (ARM_SPI_MODE_MASTER | ARM_SPI_CPOL1_CPHA0 | ARM_SPI_DATA_BITS(8) | ARM_SPI_MSB_LSB | ARM_SPI_SS_MASTER_SW)
#define SPI_Baud    (RTE_BOARD_ST7735_SPI_BAUD)
#define SPI_Flag_Done    (1<<0)
#define SPI_Flag_Error    (1<<1)

extern const ARM_DRIVER_SPI SPI_Driver;
static osThreadId_t Thread_Id;

static void SPI_Handler (uint32_t event)
{
uint32_t Flags = 0;
if (event & ARM_SPI_EVENT_TRANSFER_COMPLETE)
  Flags |= SPI_Flag_Done;
if (event & (ARM_SPI_EVENT_DATA_LOST | ARM_SPI_EVENT_MODE_FAULT))
  Flags |= SPI_Flag_Error;
if (!Flags)
  Flags |= SPI_Flag_Error;
osThreadFlagsSet(Thread_Id, Flags);
}

void ST7735_Initialize (void)
{
Thread_Id = osThreadGetId();
SPI_Driver.Initialize(SPI_Handler);
SPI_Driver.PowerControl(ARM_POWER_FULL);
SPI_Driver.Control(SPI_Mode, SPI_Baud);
}

void ST7735_Uninitialize (void)
{
SPI_Driver.PowerControl(ARM_POWER_OFF);
SPI_Driver.Uninitialize();
}

bool ST7735_Transmit (const void *buff, uint32_t buff_size)
{
SPI_Driver.Send(buff, buff_size);  // <<<--- Вот это оно и есть, собственно HAL_SPI_Transmit
#if SPI_POLLING
while(SPI_Driver.GetStatus().busy);
#else
Flags = osThreadFlagsWait(SPI_Flag_Done | SPI_Flag_Error, osFlagsWaitAny, osWaitForever);
if (Flags & SPI_Flag_Error)
  return false;
#endif
return true;
}

Только надо сначала написать SPI драйвер. Или подключить pack с готовым драйвером.

 

Тонкий троллинг. +5

Поделиться сообщением


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

Так, я пошёл за газировкой и попкорном. Щас вот этот

image.png.f2b517ba02cf55df096ea8ec2207a4f2.png

будет рассказывать вот про это:

image.png.53e4bd190b450614965c2a1028c13b21.png

P. S. Intel4004, будь умнее, не мечи бисер.

Поделиться сообщением


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

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

Вы не знаете, что такое CMSIS

Да, я не знаю, что такое CMSIS, я это "не знаю" еще с 2011 года, да так и до сих пор "не знаю" 🙂

2024-07-07150435.thumb.jpg.f0d938b97a2371a846c580098927e02d.jpg

Учись, студент! (С) 🙂 

А вот это:

#define SPI_Mode    (ARM_SPI_MODE_MASTER | ARM_SPI_CPOL1_CPHA0 | ARM_SPI_DATA_BITS(8) | ARM_SPI_MSB_LSB | ARM_SPI_SS_MASTER_SW)

- это какая-то хрень с ушами, она не в стандарте CMSIS.

По уму, в стандарте заголовочника CMSIS, делается так:

SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI;
SPI1->CR1 |= SPI_CR1_SPE;
while(!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = byte;

Вот это - по CMSIS. А та мутотень, что вы понаписали с многочисленными передефайнами дефайнов - это самопальное творчество того, у кого очень руки чешутся всё передефайнить на свой вкус. Хотя, сия замута вносит больше путаницы, чем порядка. Есть такая категория писателей - переписать Евгения Онегина на свой лад, заменив все имена и места действия.
 

Поделиться сообщением


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

10 hours ago, EdgeAligned said:

- это какая-то хрень с ушами, она не в стандарте CMSIS.

По уму, в стандарте заголовочника CMSIS, делается так:

SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI;
SPI1->CR1 |= SPI_CR1_SPE;
while(!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = byte;

Ну я же говорю - вы не знаете, что такое CMSIS.

Поделиться сообщением


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...