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

STM32 для чайника


ART_ME

Рекомендуемые сообщения

Не понял. ARR это же сколько тиков считать. А CCR3 это скважность. Я стивил от 0 до 10000 всегда 3В на выходе)

 

мне кажется что беда где то в настройках порта. или альтернативной функции

Ну судя по ДШ вроде все верно.

TIM1_CH3 PA10 AF2

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

в дебаге смотрю, CNT меняется, только вывод пина не меняется)

 

Что интересно, сделал на PB4

void LCDLedInit(void) {
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

	GPIO_InitTypeDef port;
	GPIO_StructInit(&port);

	port.GPIO_Mode = GPIO_Mode_AF;
	port.GPIO_Pin = LCD_LED_PIN;
	port.GPIO_Speed = GPIO_Speed_50MHz;
	port.GPIO_OType = GPIO_OType_OD;
	port.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_PinAFConfig(LCD_LED_PORT, LCD_LED_PIN, GPIO_AF_1);

	GPIO_Init(LCD_LED_PORT, &port);


	LCD_LED_TIM->PSC = 48000;
	LCD_LED_TIM->ARR = 10000;
	LCD_LED_TIM->CCR1 = 9;

	LCD_LED_TIM->CCER |= TIM_CCER_CC1E;
	LCD_LED_TIM->BDTR |= TIM_BDTR_MOE;

	LCD_LED_TIM->CCMR1 |= TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2;

	LCD_LED_TIM->CR1 |= TIM_CR1_CEN;
}

Все на оборот) Тут всегда 0  на выходе...

Изменено пользователем DrobyshevAlex
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Такс... Запустил SDRAM, запустил дисплей по FMC, всё отлично работает. За исключением скорости передачи данных из SDRAM в дисплей. Ну оно и понятно, я перекидываю обычным циклом.
Начал курить DMA. Открываю RM. Смотрю :

2019-02-19_23-43-07.thumb.png.6b42e001c6adfb4a92c76530d00f18bf.png

Ага, FMC где-то фигурирует. Открываю таблицу привязки каналов к кокретной периферии :
2019-02-19_23-46-09.png.511ee4a2eb239ce54920f3481708a819.png

2019-02-19_23-47-01.png.bfbde140a4a54c63055214c440e3cee1.png

Херу. Нет там никаких FMC. И как это понимать ? Какой канал мне выбирать ?

Блин, вот у PIC'ов всё с этим намного проще - никаких привязок, никаких путаниц - выбрал два абсолютно любых адреса (источник и приёмник)(независимо периферия это, ОЗУ, флешь, ... ), размер данных, источник события для дёрганья DMA. И всё. 5 строчек - вся инициализация. А тут какой-то гемор, блин ...

PS: Кто запускал DMA на F4xx, разъясните, плиз, куда рыть ?

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Хотя конечно было бы абсурдно снабжать контроллер таким блоком и не давать ему развернуться по скорости. Чтото тут не так

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

11 час назад, Alex сказал:

За исключением скорости передачи данных из SDRAM в дисплей

SDRAM это достаточно медленная память, особенно в сравнении со встроенной памятью в процессоре (SRAM), раз в десять точно медленнее! DMA читает с той скоростью на которую способен источник данных - SDRAM в вашем случае.

Не понятно зачем вам скорость нужна в связке с тем что вы решили использовать медленную память которой SDRAM по определению является - два решения которые противоречат друг другу!

11 час назад, Alex сказал:

у PIC'ов всё с этим намного проще - никаких привязок

у PIC-ов наверно и интерфейсов к SDRAM-ам нет, наверно, так ведь?

11 час назад, Alex сказал:

За исключением скорости передачи данных из SDRAM в дисплей

и интересно, кстати, ЗАЧЕМ, скорость нужна:

Вот вы нарисовали дисплей вместо 10мс потратили 100мс, могу предположить что вам надо его с большой частотой перерисовывать, зачем?

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

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

5 часов назад, ruhi сказал:

SDRAM это достаточно медленная память, особенно в сравнении со встроенной памятью в процессоре (SRAM), раз в десять точно медленнее!

1. Я бы так не сказал. Делал сравнения, обычным циклом записи/чтения большого блока - разницы по времени нет никакой, что в RAM встроенную пишу, что во внешнюю SDRAM. Хоть это, конечно, и обычный программный доступ, но всё-таки не в 10 раз. В 2 раза - может быть.
2. Проблема со скоростью у меня именно с доступом к дисплею по FMC (выбран как NORSRAM, 1-ый банк). Я, конечно, чайник ещё в этом деле, но не на столько же. Есттесвенно, я попробовал запись из RAM'а, тем-же DMA. Отключив при этом SDRAM, чтобы шина и модуль ничем не были больше заняты. Результат такой же.

5 часов назад, ruhi сказал:

у PIC-ов наверно и интерфейсов к SDRAM-ам нет, наверно, так ведь?

Да. Именно по этому я и начал эту затею с STM32. Подкупил он меня поддержкой внешней памяти.

5 часов назад, ruhi сказал:

и интересно, кстати, ЗАЧЕМ, скорость нужна:
Вот вы нарисовали дисплей вместо 10мс потратили 100мс, могу предположить что вам надо его с большой частотой перерисовывать, зачем?

Скажем так. Сейчас отрисовывается дисплей 800х480 за 370 мс. Это очень много. Очень !
Для сравнения. На том же PIC'е, я именно этот дисплей заливал одним цветом через DMA за единицы миллисекунд.
И никак я не могу поднять скорость. Она стоит мёртво где-то в пределах 1,2 Мгц. Как бы я не крутил таймингами - ноль реакции. Что очень и очень странно. Такое ощущение, что тактирование модуля ограничено. Но где - понять не могу, из-за своей некомпетентности в этих камнях. Увы...

 

Сделал видос, для наглядности :

Скрытый текст
Скачать видео
Скачать видео
Скачать видео
Скачать видео
Скачать видео
Скачать видео
Скачать видео
Скачать видео

 

Оооочень медленная отрисовка. Очень ...  :(

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

По поводу SDRAM.
Вот, что обещают ST :
2019-02-20_16-17-54.png.0ae596becd41e7fa1278c007db6c1c06.png

При разрешении в 800х600 можно спокойно получить 60 Гц. Т.е. проц спокойно сможет работать с SDRAM на 40 МГц. А при FHD - так вообще 74 МГц.
Эта таблица, конечно, для LTDC и DMA2D, но всё-таки...

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

36 минут назад, Alex сказал:

по FMC (выбран как NORSRAM, 1-ый банк)

FMC - это что ли шина к внешней памяти, то есть дисплей как память подключен? (интересно просто)

37 минут назад, Alex сказал:

800х480 за 370 мс

ну да треть секунды на отрисовку многовато, но если посчитать:

800х480 х 2 (байта на пиксель) = 768000 

768000 / 4 (транзакция записи- скажем)= 192000 операций на экран 

192000 / 80 000 (операций в мили секунду) = 2.4 милисекунд

Это если частота проца 80МГц и и операция чтения памяти-записи в видео-память один такт!

У вас получается она = 370 / 2.4 = 154 такта - многовато,

должно быть точно не больше 20-ти.

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

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

1 минуту назад, ruhi сказал:

FMC - это что ли шина к внешней памяти, то есть дисплей как память подключен? (интересно просто)

Да, совршенно верно. Как SRAM память.

2 минуты назад, ruhi сказал:

должно быть точно не больше 20-ти.

Вот и я о том. Мне бы 20 Гц хватило за глаза и за уши. 50 мс - достаточно хорошее время для глаза, чтобы он не ощущал переливы при обновлении.
А тут - 3 Гц. Кошмар ... :wacko::(:wall:

В настройках модуля есть тайминги :

FMC_ReadWriteTimingStruct.FMC_AddressSetupTime  = 15;
FMC_ReadWriteTimingStruct.FMC_DataSetupTime = 200;
FMC_ReadWriteTimingStruct.FMC_BusTurnAroundDuration = 15;
FMC_ReadWriteTimingStruct.FMC_AddressHoldTime = 15;
FMC_ReadWriteTimingStruct.FMC_CLKDivision = 16;
FMC_ReadWriteTimingStruct.FMC_DataLatency = 17;
FMC_ReadWriteTimingStruct.FMC_AccessMode = FMC_AccessMode_B;

Дак вот, что самое интересное. Изменение их не влияет вообще ни на что. Хоть нуля там ставлю хоть предельные значения.

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

44 минуты назад, Alex сказал:

Дак вот, что самое интересное. Изменение их не влияет вообще ни на что

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

ну и еще вариант где то просто тупо воткнулась задержка, попробуйте тогда записать только пол-экрана, четверть экрана - может что то проявится!

может попробовать запись одной строчки померить в тиках и без ДМА?

 

44 минуты назад, Alex сказал:

Изменение их не влияет вообще ни на что

еще можно попробовать не из памяти читать, а просто константу (цвет) писать на экран, тогда исключается влияние (задержки) источника данных.

интенсивнее надо в стенку долбиться :)))

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

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

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

9 минут назад, ruhi сказал:

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

Запись структуры есть :

Скрытый текст

FMC_ReadWriteTimingStruct.FMC_AddressSetupTime  = 15;
FMC_ReadWriteTimingStruct.FMC_DataSetupTime = 100;
FMC_ReadWriteTimingStruct.FMC_BusTurnAroundDuration = 15;
FMC_ReadWriteTimingStruct.FMC_AddressHoldTime = 15;
FMC_ReadWriteTimingStruct.FMC_CLKDivision = 8;
FMC_ReadWriteTimingStruct.FMC_DataLatency = 17;
FMC_ReadWriteTimingStruct.FMC_AccessMode = FMC_AccessMode_B;

FMC_NORSRAMInitStructure.FMC_Bank = FMC_Bank1_NORSRAM1;
FMC_NORSRAMInitStructure.FMC_DataAddressMux = FMC_DataAddressMux_Disable;
FMC_NORSRAMInitStructure.FMC_MemoryType = FMC_MemoryType_SRAM;
FMC_NORSRAMInitStructure.FMC_MemoryDataWidth = FMC_NORSRAM_MemoryDataWidth_16b;
FMC_NORSRAMInitStructure.FMC_BurstAccessMode = FMC_BurstAccessMode_Disable;
FMC_NORSRAMInitStructure.FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low;
FMC_NORSRAMInitStructure.FMC_WrapMode = FMC_WrapMode_Disable;
FMC_NORSRAMInitStructure.FMC_WaitSignalActive = FMC_WaitSignalActive_BeforeWaitState;
FMC_NORSRAMInitStructure.FMC_WriteOperation = FMC_WriteOperation_Enable;
FMC_NORSRAMInitStructure.FMC_WaitSignal = FMC_WaitSignal_Disable;
FMC_NORSRAMInitStructure.FMC_ExtendedMode = FMC_ExtendedMode_Disable;
FMC_NORSRAMInitStructure.FMC_AsynchronousWait = FMC_AsynchronousWait_Disable;
FMC_NORSRAMInitStructure.FMC_WriteBurst = FMC_WriteBurst_Disable;
FMC_NORSRAMInitStructure.FMC_ContinousClock = FMC_CClock_SyncOnly;

FMC_NORSRAMInitStructure.FMC_WriteTimingStruct = &FMC_ReadWriteTimingStruct;

FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);

__FMC_NORSRAM_ENABLE(FMC_Bank1, FMC_Bank1_NORSRAM1);

 

Это первым делом на ум приходит. Конечно же я это проверил...

11 минуту назад, ruhi сказал:

может попробовать запись одной строчки померить в тиках и без ДМА?

По поводу строки не понял. Но без ДМА я пробовал, обычным циклом - время тоже самое, как ни странно. Думал оно растягивается из-за программной записи, запустил ДМА, но не тут то было...

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

22 минуты назад, Alex сказал:

Думал оно растягивается из-за программной записи, запустил ДМА, но не тут то было

дак разницы особой и не должно быть - просто процессор свободен - кода нет на исполнении,

22 минуты назад, Alex сказал:

По поводу строки не понял

ну просто не весь экран заполнять, а строчку пикселей на нем, и лучше константой, то есть без чтения данных из другой памяти!

Сколько времени занимает?

22 минуты назад, Alex сказал:

FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);

__FMC_NORSRAM_ENABLE(FMC_Bank1, FMC_Bank1_NORSRAM1);

может их местами надо поменять, раз все так плохо - все подряд проверять надо!

24 минуты назад, Alex сказал:

FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);

и внутри этой функции надо разбираться, может там завязка на тип процессора какая то торчит например, - это бывает!

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

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

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

Смотрите, какое западло компиль подкидывает :
2019-02-20_21-00-38.thumb.png.039fdb839e7052b06002bb35df61a3c1.png

2019-02-20_21-04-28.thumb.png.07f8c633d55a31c9e8b99cdf2f9cd044.png

:o
Вот ну никак от него такого не ожидал :wall:

PS: Ща будем разбираться, чёй-то он такие мне грабли подкидывает...

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

В общем, всё починил. На максимальный таймингах сразу стал выпуливать все 384000 слов за десятки миллисекунд.
Меньше пока не стал делать, врубил SDRAM. Время увеличилось до 200 мс. Ну оно, скорее всего, связано с тем, что используется один модуль с общей шиной. Они ждут друг-друга каждое слово.
Наверное нужно будет пачками кэшировать в РАМ и оттуда выплёвывать в дисплей. Это уже сделаем...

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

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

Я того рот паласкал и его дом труба щаталь. С инициализацией SDRAM таже песня :aggressive::wall::diablo:

В общем, всё работает. От шлейфа избавлюсь и будут у меня многогерцы B)

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

Обязательно выложу. Запущу всё нормально, причешу код и выложу.

Вся проблема была в том, что вместо адреса структуры, по непонятным мне причинам, присваивался ноль. По этому данные таймингов брались отбалды.
Очень большую каку компиль подложил. Не ожидал от него такого...

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

Проектик бы с миной интересно очень. Дискавери на F429 есть я бы поклацал.

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

Я там уже всё перелопатил. Потом может откачусь назад, поковыряю. Если что - выложу.

PS: Скорее всего, я сам что-нибудь в сонном состоянии попутал. Не может GCC так подвести.

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

1 час назад, Alex сказал:

Не, именно компилятор. Посмотрите на скриншоты, там видны все прелести этой мины :(

скорее всего там с типами или с областью видимости что то напутано (с компилятором конечно бывают проблемы, но Очень редко, вы же не первый и даже не сотый его используете, и конструкция достаточно распространенная) 

Потом на первой картинке где красная стрелка показывает нулевое значение поля - указатель исполнения стоит на инструкции присвоения значения указателя полю в инит-структуре???,

FMC_NORSRAMInitStructure.FMC_WriteTimingStruct = &FMC_ReadWriteTimingStruct;

так оно еще не присвоилось, оптимизация включена, может оптимизация переставила присваивание???, и поэтому равно нулю - 

непонятно тут как то!

Какой тип у FMC_NORSRAMInitStructure.FMC_WriteTimingStruct ???

Потом структура FMC_ReadWriteTimingStruct на стеке создана? может она из области видимости уже вышла? Где она объявлена?

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

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

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

Структура статическая в модуле, не на стеке.

Я наверное погорячился, так на компилятор гнать. Скорее всего я где то накосячил. С GCC работаю уже не первый год, не может он на таких элементарных вещах заглючить.
Потом разберусь. Сейчас пока со временем напряжёнка.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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