Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Vova8
2023-06-14 15:37:42
anandr пише:
Васятко пише:

Відчівається рука чатжопете

Ооооо, чатжопете .... roll

Я так розумію, що якщо якась конкретна тема задачі популярна в інеті і по ній можна знайти багато різних варіантів її вирішення, то чатжопете може швидко перебрати варіанти і справді щось підказати (я чув від реальних людей ну дуже похвальні відгуки).
big_smile

Имея за спиной 7 лет Embedded программирования и посидев пару месяцев с жопатэ могу сделать вывод, что сейчас он находится на уровне школьника генерирующего бредовые идеи по принципу "лишь бы быстро". За все время использования время потраченное за выбивание из малолетнего искусственного интеллекта правильного ответа превышало время затраченное на самостоятельное решение задачи. И только один!!11 раз жопотэ помог решить хитрую задачу по дебрям классового взаимодействия С++ быстрее чем стаковерфлоу (5 часов). В профессиональной среде ему еще делать нечего. Разве что писать красивые письма и истории. Это да, я аж глазам не поверил, когда он написал за меня настолько идеальное по всем правилам инглиша сопроводительное письмо (со всеми этими средневековыми оборотами от которых все текут). Тут был восторг, да)

Так что замены профессий хорошего програмера в ближайшем будущем не ждем. Разве что эникейщикам надо бы поднапрячься, но они сами виноваты, что не хотят эволюционировать в толковых инженеров оставаясь на уровне ардуино smile

Vova8
2023-06-14 15:23:23
Droid 77 пише:

Як по мені. Так SPI краще використовувати для внутрішньо-схемного програмування, та і годі.
А ведучий-ведомий, то вже є інші технології реалізації. RS-485, CAN, та таке інше ...

Так SPI объективно не подходит для передачи данных за пределы печатной платы. 0 помехоустойчивости же. Лучше всего (быстрее) это юзать LAN - там и скорость и готовые шнуры и унификация. Только с сокетами успевай работать.
Ну и конечно же, как Вы правильно подметили Recomended Standards: RS-422, RS-423, RS-449, RS-485, MIL-STD-188, EIA-530.

Droid 77
2023-05-08 00:08:38

Як по мені. Так SPI краще використовувати для внутрішньо-схемного програмування, та і годі.
А ведучий-ведомий, то вже є інші технології реалізації. RS-485, CAN, та таке інше ...

Васятко
2023-04-23 14:33:47

З кодами від чатжопете іноді жопата ще  smile  big_smile

anandr
2023-04-23 14:28:52
Васятко пише:

Відчівається рука чатжопете

Ооооо, чатжопете .... roll

Я так розумію, що якщо якась конкретна тема задачі популярна в інеті і по ній можна знайти багато різних варіантів її вирішення, то чатжопете може швидко перебрати варіанти і справді щось підказати (я чув від реальних людей ну дуже похвальні відгуки).
Але якщо тема така, що в гугл видає менше десяти результатів по запиту, то і на чатжопете надії ніякої.
Мені, наприклад, на запит [як налаштувати SPI на Jetson Nano в режимі "master"] і [як налаштувати SPI на Jetson Nano в режимі "slave"] чатжопете видав дві ідентичні послідовності команд.
Тому з кожною задачею ефективність чатжопете буде якась своя.

Ну а поки готуємось до появи вакансій типу "Спеціаліст з аналізу, рефакторингу, і допилювання коду, написаного чатжопетеbig_smile

Микола6789
2023-04-23 12:26:51

big_smile  lol точно,ChatGPT

Васятко
2023-04-23 10:52:17
Daniel пише:

Для того, щоб на STM32 підняти SPI в режимі "slave" з використанням DMA для періодичної відправки кільцевого буфера, вам спочатку потрібно налаштувати SPI в режимі "slave" з використанням DMA.

Відчівається рука чатжопете

Daniel
2023-04-23 00:40:29

Для того, щоб на STM32 підняти SPI в режимі "slave" з використанням DMA для періодичної відправки кільцевого буфера, вам спочатку потрібно налаштувати SPI в режимі "slave" з використанням DMA.

Налаштування SPI в режимі "slave":
SPI_HandleTypeDef SpiHandle;

/* SPI1 init function */
void MX_SPI1_Init(void)
{

  SpiHandle.Instance               = SPI1;
  SpiHandle.Init.Mode              = SPI_MODE_SLAVE;
  SpiHandle.Init.Direction         = SPI_DIRECTION_2LINES;
  SpiHandle.Init.DataSize          = SPI_DATASIZE_8BIT;
  SpiHandle.Init.CLKPolarity       = SPI_POLARITY_LOW;
  SpiHandle.Init.CLKPhase          = SPI_PHASE_1EDGE;
  SpiHandle.Init.NSS               = SPI_NSS_SOFT;
  SpiHandle.Init.FirstBit          = SPI_FIRSTBIT_MSB;
  SpiHandle.Init.TIMode            = SPI_TIMODE_DISABLE;
  SpiHandle.Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLE;
  SpiHandle.Init.CRCPolynomial     = 7;

  if (HAL_SPI_Init(&SpiHandle) != HAL_OK)
  {
    Error_Handler();
  }

}



Налаштування DMA для SPI:
/* DMA controller clock enable */
__HAL_RCC_DMA1_CLK_ENABLE();

/* DMA interrupt init */
/* DMA1_Channel2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);

/* SPI1_TX Init */
hdma_spi1_tx.Instance = DMA1_Channel2;
hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_spi1_tx.Init.Mode = DMA_CIRCULAR;
hdma_spi1_tx.Init.Priority = DMA_PRIORITY_LOW;

if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK)
{
  Error_Handler();
}

/* Link DMA to SPI */
__HAL_LINKDMA(&SpiHandle, hdmatx, hdma_spi1_tx);



Налаштування кільцевого буфера і запуск передачі через DMA:

#define BUFFER_SIZE 16

uint8_t txBuffer[BUFFER_SIZE];
uint8_t rxBuffer[BUFFER_SIZE];

void SPI_Transmit_DMA(void)
{
  /* Start the DMA transfer */
  if (HAL_SPI_Transmit_DMA(&SpiHandle, txBuffer, BUFFER_SIZE) != HAL_OK)
  {
    Error_Handler();
  }
}

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
  /* This function will be called when the DMA transfer is complete */
  /* Copy data from the receive buffer to the transmit buffer */
  memcpy(txBuffer, rxBuffer, BUFFER_SIZE);
}

int main(void)
{
  /* Initialize the SPI and DMA */
  MX_SPI1_Init();
  MX_DMA_Init();

  /* Initialize the transmit buffer */
  for (int i = 0; i < BUFFER_SIZE; i++)
  {
    txBuffer[/
= ;

anandr
2023-04-22 08:03:47

Міряти потрібно всі 8 каналів на частоті семплів 200 кГц.
АЦП потребує сигналу на запуск процесу вимірювання. Період цього сигналу (5 мікросекунд) потрібно витримати доволі точно.
Для Jetson Nano будуть свої завдання по обробці отриманих даних і не факт що він зможе з таким справитись, він же не real-time платформа.
STM32 достатньо швидкий і не зайнятий нічим іншим і тому може забезпечити надійну генерацію сигналу на запуск вимірювання АЦП.

(додано)
Виявляється, Jetson Nano на GPIO виходах вміє генерувати PWM.
А це вже виглядає цікавіше.

Гiсть
2023-04-20 09:25:01

А для чого взагалі  тут STM32 ?
В Jetson Nano є порти GPIO...

anandr
2023-04-11 13:50:44

Добрий день.

Є задача: потрібно дані з швидкого АЦП (AD7606, 8 каналів, макс. швидкість 200 кГц) передати на мінікомп'ютер (Jetson Nano).
Для цього є плата STM32 (поки що це Maple Mini), яка формує необхідні для роботи АЦП імпульси, і збирає результати в кільцевий буфер. Планується по мірі заповнення буфера відправляти дані частинами на Jetson Nano по SPI.

Сам Jetson Nano працює як SPI-Master.
Чи має хтось досвід як на STM32 підняти SPI в режимі "slave" з використанням DMA щоб періодично відправляти кільцевий буфер?

Підвал форуму