Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 новичку в ARM что к чему
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб сен 06, 2025 20:28:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8839 ]     ... , , , 278, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вт июл 09, 2019 13:04:54 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
rai17, проблема в том, что для симуляции 32-х битной архитектуры на 480МГц требуется, как минимум, на два порядка больше вычислительных ресурсов, чем для симуляции 8-ми битной архитектуры на 16МГц. А с учетом сложности симуляции асинхронных процессов в контроллерах Chrom-ART, CAN, USB и т.п. - вычислительных ресурсов требуется уже на три(!) порядка больше. Условно говоря, если для симуляции AVR достаточно одного ядра на 1ГГц, то для симуляции STM32H7 потребуется 300 ядер по 3.3ГГц.
Как следствие вышеизложенного, полноценая симуляция всей линейки STM32 потенциально возможна только суперкомпьютерах, что сводит ценность этой симуляции к нулю.
Что касается отладки алгоритмов, то лично я предпочитаю их отлаживать совершенно отдельно компьютере. Во-первых, алгоритм по определению не зависит от архитектуры, во-вторых, используя тот же R я получаю возможность сформировать действительно любую возможную последовательность входных данных, которую получить не то что в симуляторе, даже в железе очень проблематично.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вт июл 09, 2019 13:34:02 
Говорящий с текстолитом

Карма: -9
Рейтинг сообщений: 179
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1551
Рейтинг сообщения: 0
Для начала такая тактика:
Отладка в симуляторе Keil отдельных фрагментов программы камень stm32f103c8 (доступен для отладки)
Далее, при необходимости, проверить в железе осциллом.
Потом подзаливать в F4xx и смотреть что получилось....

Странная тактика: сперва отладить на некоем симуляторе (неизвестно какого качества) причём для совершенно постороннего процессора, потом залить совсем в другой МК (с другим ядром к тому же) и думать что всё отлажено. Просто какой-то мазохизм. Специально себе же проблемы придумываете на ровном месте. :shock:
Это ещё с учётом того, что у вас, как у начинающего на этом МК, главные проблемы будут скорей всего с периферией. А тут никакой симулятор не поможет.
По уму: покупают JTAG-эмулятор (или SWD), подключаются к целевому МК и отлаживают на нём. Если очень уж что-то очень сложное алгоритмически нужно отладить, то можно на ПК под VS например. По-крайней мере это точно и надёжнее и удобнее будет.
Впрочем - хозяин - барин. Каждый сходит с ума по-своему....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вт июл 09, 2019 14:53:52 
Открыл глаза
Аватар пользователя

Карма: 8
Рейтинг сообщений: 5
Зарегистрирован: Пн дек 07, 2009 16:00:31
Сообщений: 70
Рейтинг сообщения: 0
Я очень благодарен любым советам, для этого самого вопрос и задавал.
Подключаюсь по SWD (два провода), вроде нормально работает. Сейчас использую Кейловский отладчик. НО! например, tim1 в момент прерывания по переполнению кажет ерунду.


Я бы и рад по-простому (или правильному) пути идти (без мазохизма), поэтому и прошу помощи.
Можно поподробней, что есть "на ПК под VS"?

Добавлено after 5 minutes 9 seconds:
rai17 используя тот же R я получаю возможность...

Спасибо за ответ.
О каком "R" идёт речь?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вт июл 09, 2019 15:08:42 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
НО! например, tim1 в момент прерывания по переполнению кажет ерунду.


Какую именно "ерунду" , вы прочли мой пост?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вт июл 09, 2019 15:42:14 
Говорящий с текстолитом

Карма: -9
Рейтинг сообщений: 179
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1551
Рейтинг сообщения: 0
НО! например, tim1 в момент прерывания по переполнению кажет ерунду.

Где смотрите? Поди в окне "Watch" отладчика? 8)
Если у вас такой большой опыт в отладке девайсов на МК как писали 8) , то должны знать, что смотреть изменяющиеся регистры периферии (например - текущее значение таймера) через окно "Watch" отладчика - нельзя.
Надо на входе в ISR скопировать нужный регистр в переменную и смотреть её.
(Если что: ISR - это "обработчик прерывания" 8) )

Можно поподробней, что есть "на ПК под VS"?

ПК - компьютер, VS - "Visual Studio". Ну или любая другая среда разработки для ПК. В 32-битном режиме позволяет отлаживать код, который потом легко перенести на ARM. Так как он тоже - 32-битный.

PS: Да - некоторые МК умеют останавливать тактирование указанной периферии во время останова отладчиком. И тогда счётчики таймеров не будут бежать пока стоите на бряке. Где это включается - смотреть мануал на свой МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вт июл 09, 2019 17:05:15 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
О каком "R" идёт речь?

Имеется в виду язык прогаммирования R. Он прост для изучения и позволяет легко генерировать заданные последовательности с управляемым распределением ошибок (искажений, шумов и т.п.). Несмотря на то, что он, преимущественно, направлен на статистический анализ данных, R предоставляет отличные возможности для генерации тестовых данных. Чем я и пользуюсь )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 09:12:42 
Открыл глаза
Аватар пользователя

Карма: 8
Рейтинг сообщений: 5
Зарегистрирован: Пн дек 07, 2009 16:00:31
Сообщений: 70
Рейтинг сообщения: 0
dosikus, Конечно прочел, притом внимательно...
-таймер фризился надо конфигурировать Debug MCU configuration register-
Это видимо имеется ввиду. Читал, сравнивал, работаю над этим.
Кажет ерунду, это когда ожидаешь увидеть в счетчике 0x0000, а видишь совершенно различные варианты, чередующиеся по непредсказуемому порядку...

Добавлено after 2 minutes 8 seconds:
ПростоНуб, Спасибо, познакомлюсь.

Добавлено after 39 minutes 6 seconds:
jcxz, Спасибо.
Опыт отладки девайсов на МК у меня небольшой (только avr).
Отлично получалось отлаживать устройства в Proteus.
В "Watch" не смотрю.
Смотрю в View-System Viewer-TIM-TIM1-CNT (повторюсь, пользуюсь Keil).
Так вот (опять же повторяюсь), при установки breakpoint на вход в ISR TIM1 в симуляторе (Use Simulator) всё отлично - вижу 0х0000, а вот при подключении платы с прошитым камнем STM32F103С8Т6 по SWD через ST-Link V2 (Use: ST-Link Debugger) – получаются вообще случайные значения в View-System Viewer-TIM-TIM1-CNT.
Буду разбираться...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 09:57:21 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 0
Подскажите по передаче через SPI с помощью DMA,
а точнее как избавиться от флага ожидания и чтобы при этом все работало
Каждый раз после отправки пакета данных через DMA, не важно 1 байт или 100 байт я передаю,
нужно ждать опустошение буфера передачи с помощью

while( SPI1->SR & SPI_I2S_FLAG_BSY )

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 10:35:48 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Мне нужно добиться быстрое выполнение программы в главном цикле где вызываются все функции работы с дисплеем.

Это дисплей к SPI подключен?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 10:43:34 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 0
Да, дисплей ILI9341 подключен по SPI1.
И еще тачскрин к нему подключен по другому SPI2.
И поскольку функции для работы тачскрина, в которых происходит обработка нажатия и рассчет коородинат нажатия тоже вызываются в главном цикле, время отклика на нажатие
не такое быстрое как хотелось, поскольку как я писал частота главного цикла где то 10 герц, которая ограничена скоростью обновления дисплея,
вернее скоростью передачи данных по SPI1 и ожиданием сброса флага BSY


Последний раз редактировалось hosturik Ср июл 10, 2019 10:49:46, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 10:47:07 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Да, дисплей ILI9341 подключен по SPI.

Какой дисплей? Какой мк? Нигде при передаче случайно HAL не используется? Никакие шрифты по точкам не отрисовываются? Когда отправляешь 100 байт по DMA что делаешь? Некоторые сразу флаг проверяют :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 10:57:00 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 0
HAL не использую использую библиотеку LL. Это те же регистры только обернутые в удобочитаемые названия.
На регистрах тоже пробовал, разницы не заметил.
МК STM32F030C8T6, дисплей ILI9341
мне наверное нужно не ждать сброса флага в бесконечном цикле, а делать проверку установки пользовательского флага через if,
который я буду устанавливать в прерывании передачи DMA (transfer complete) и только после этого делать повторную отправку.

Код:
// Функция отправки данных по SPI
void Spi_Write_Data(uint8_t *data, uint16_t size){
  spi_send_dma(data, size);
  while(LL_SPI_IsActiveFlag_BSY(SPI1)){}
}


// Функция для отправки DMA запроса
void spi_send_dma(uint8_t *spi, uint16_t len){
  LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_3);
  LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_3, (uint32_t)&SPI1->DR);
  LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_3, (uint32_t)spi);
  LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_3, (uint32_t)len);
  LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_3);
}


Последний раз редактировалось hosturik Ср июл 10, 2019 11:02:30, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:00:36 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Код:
// Функция отправки данных по SPI
void Spi_Write_Data(uint8_t *data, uint16_t size){
  spi_send_dma(data, size);
  while(LL_SPI_IsActiveFlag_BSY(SPI1)){}
}

Я про это и спрашивал :) Чем эта отправка отличается от отправки без DMA, если ты ждешь ее окончания ничего больше не делая?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:03:57 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4885
Откуда: Минск
Рейтинг сообщения: 2
Я особо с DMA не работал, но простая логика подсказывает, что ждать (цикл while) нужно не после spi_send_dma(), а до её вызова. Тем самым, данные по DMA будут себе в фоне отправляться, и уже только когда понадобится отправить новую порцию данных, мы снова вернёмся в Spi_Write_Data(), где и будем ждать окончания предыдущей передачи. Или не будем, если она успеет к тому времени завершиться.

Разве что ещё проследить, чтобы никто в буфер не писал (подготовка новой передачи), пока он по DMA занят.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:08:39 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Я особо с DMA не работал, но простая логика подсказывает, что ждать (цикл while) нужно не после spi_send_dma(), а до её вызова.

Естественно.

Цитата:
Разве что ещё проследить, чтобы никто в буфер не писал (подготовка новой передачи), пока он по DMA занят.

Если хочется быстро, то лучше сразу сделать два буфера.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:09:08 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 0
Да я понимаю что так делать не правильно, но по другому у меня не получилось заставить заработать.

Вы имеете ввиду вот так?
Код:
void Spi_Write_Data(uint8_t *data, uint16_t size){
  while(LL_SPI_IsActiveFlag_BSY(SPI1)){}
  spi_send_dma(data, size);
}
Так не работает

Мне наверное нужно не ждать сброса флага в бесконечном цикле, а делать проверку установки пользовательского флага через if,
который я буду устанавливать в прерывании передачи DMA (transfer complete) и только после этого делать повторную отправку. Но
у меня такой вариант почему то не заработал.
Или мне не прерывание DMA нужно ждать в прерывании SPI? Что то я запутался

Вот так я делал. Но не заработало. И я догадываюся почему. Данные для инициализации дисплея к напримеру пытаются отправиться, но я их попросту игнорирую,
если флаг не установился, из за чего не проходит даже инициализация.
Код:
uint8_t flag = 0;

// Функция отправки данных по SPI
void Spi_Write_Data(uint8_t *data, uint16_t size){
   if(flag == 0){
      spi_send_dma(data, size);
      flag = 1;
   }
}

//  Обработчик прерывания DMA
void DMA1_Channel1_IRQHandler(void)
{
   if(LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_3) && LL_DMA_IsActiveFlag_TC3(DMA1)) { // флаг окончания передачи через DMA
      LL_DMA_ClearFlag_TC3(DMA1);         
      flag = 0;                   
   }
}
 


Последний раз редактировалось hosturik Ср июл 10, 2019 11:19:02, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:11:23 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Вот так я делал. Но не заработало.

Как минимум нужен volatile для flag. Только зачем так делать, если можно проверять флаг и без прерывания...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:22:24 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
dosikus, Конечно прочел, притом внимательно...
-таймер фризился надо конфигурировать Debug MCU configuration register-
Это видимо имеется ввиду. Читал, сравнивал, работаю над этим.
Кажет ерунду, это когда ожидаешь увидеть в счетчике 0x0000, а видишь совершенно различные варианты, чередующиеся по непредсказуемому порядку...
////////
Так вот (опять же повторяюсь), при установки breakpoint на вход в ISR TIM1 в симуляторе (Use Simulator) всё отлично - вижу 0х0000, а вот при подключении платы с прошитым камнем STM32F103С8Т6 по SWD через ST-Link V2 (Use: ST-Link Debugger) – получаются вообще случайные значения в View-System Viewer-TIM-TIM1-CNT.
Буду разбираться...


Еще раз- счетчик таймера не останавливается при бряках...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:23:46 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 0
Так тоже пробовал
Код:
// Функция отправки данных по SPI
void Spi_Write_Data(uint8_t *data, uint16_t size){
  if(!LL_SPI_IsActiveFlag_BSY(SPI1)){
   spi_send_dma(data, size);
  }
}
 
Но как я выше написал, такой вариант не работает, потому что я просто пропускаю необходимые данные, например для инициализации дисплея


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 10, 2019 11:27:31 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Но как я выше написал, такой вариант не работает, потому что я просто пропускаю необходимые данные, например для инициализации дисплея

Не нужно пропускать, нужно ждать. Смысл DMA в том, что запустил отправку и что-то делаешь, например, заполняешь данными другой буфер, а когда опять нужна запись в SPI, то уже ждешь завершения предыдущей передачи.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8839 ]     ... , , , 278, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y