dimir 2 5 июля Опубликовано 5 июля · Жалоба HAL это хорошо но не всегда .Как перевести некоторые команды на cmsis(LL)это низкоуровневые библиотеки Спойлер HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY); Как преобразовать эту команду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 81 6 июля Опубликовано 6 июля · Жалоба Просто открыть её и прочитать, что написано внутри. И взять из нее то, что относится непосредственно к регистрам. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 6 июля Опубликовано 6 июля · Жалоба 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 6 июля Опубликовано 6 июля · Жалоба В 06.07.2024 в 05:24, tonyk_av сказал: В 06.07.2024 в 05:24, tonyk_av сказал: А для чего эти форумы? Для любителей ? или для жлобов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 6 июля Опубликовано 6 июля · Жалоба 29 minutes ago, dimir said: А для чего эти форумы? Для любителей ? или для жлобов? А кто жлоб-то? По-моему, тот, кто нифига сам не хочет не читать, не разбираться, зато бомбит все форумы дебильными вопросами. Ладно бы вопросы были сложными, а то ведь всё жёвано-пережёвано, ссылки даны, осталось налить кофе, попить-почитать, чтобы разобраться. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 81 6 июля Опубликовано 6 июля · Жалоба Для жлобов-любителей 🙂 Сказано жеж - зайти в эту функцию и переписать из нее то, где упоминаются регистры. Хотя, в конкретном случае топикстартера лучше этого не делать, а использовать HAL в предлагаемом виде. Он как раз и создавался для таких, как топикстартер. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey190 2 6 июля Опубликовано 6 июля · Жалоба 8 часов назад, dimir сказал: HAL это хорошо но не всегда .Как перевести некоторые команды на cmsis(LL)это низкоуровневые библиотеки Показать контент HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY); Как преобразовать эту команду? может в кубе сразу через LL сделать эту функцию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 59 6 июля Опубликовано 6 июля · Жалоба 50 minutes ago, Andrey190 said: может в кубе сразу через LL сделать эту функцию? Это не путь для мандалорца ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intel4004 1 7 июля Опубликовано 7 июля (изменено) · Жалоба 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 с готовым драйвером. Изменено 7 июля пользователем Intel4004 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 81 7 июля Опубликовано 7 июля · Жалоба Ох, мать... Чел и спрашивает, как именно переписать сей "драйвер SPI", а "пак с готовым драйвером" он уже подключил. Читайте вопросы внимательнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intel4004 1 7 июля Опубликовано 7 июля · Жалоба 8 minutes ago, EdgeAligned said: Ох, мать... Чел и спрашивает, как именно переписать сей "драйвер SPI", а "пак с готовым драйвером" он уже подключил. Читайте вопросы внимательнее. Вы не знаете, что такое CMSIS, вы ничего не понимаете в обсуждаемой теме, но вам сильно хочется изобразить из себя хоть что-то. Идите самовыражаться в другое место. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 59 7 июля Опубликовано 7 июля · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 7 июля Опубликовано 7 июля · Жалоба Так, я пошёл за газировкой и попкорном. Щас вот этот будет рассказывать вот про это: P. S. Intel4004, будь умнее, не мечи бисер. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 81 7 июля Опубликовано 7 июля · Жалоба 2 часа назад, Intel4004 сказал: Вы не знаете, что такое CMSIS Да, я не знаю, что такое CMSIS, я это "не знаю" еще с 2011 года, да так и до сих пор "не знаю" 🙂 Учись, студент! (С) 🙂 А вот это: #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. А та мутотень, что вы понаписали с многочисленными передефайнами дефайнов - это самопальное творчество того, у кого очень руки чешутся всё передефайнить на свой вкус. Хотя, сия замута вносит больше путаницы, чем порядка. Есть такая категория писателей - переписать Евгения Онегина на свой лад, заменив все имена и места действия. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intel4004 1 7 июля Опубликовано 7 июля · Жалоба 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. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться