PDA

Просмотр полной версии : STM32 Discavery-первый опыт в программировании на С



DL2BDA
28.12.2015, 01:29
Долго думал, куда прицепить тему,которую я после долгой паузы решил начать. Прежде всего, полгода назад мне попался в руки борд СТМ32 Дискавери. Почитал про контроллер стм32 и захотелось мне попробовать, уж больно много может контроллер. Проблема, я не знаю языка Си. Раньше я делал все на бейсике, а точнее Баскоме, который мне всеравно нравится, но решил попробовать.
Почитав в инете искал среду разработки. Есть разные более-менее подходящие, но как правило с ограничениями по размеру кода... Есть бесплатные на базе Еклипс, я выбрал для начала
СооСос (КооКокс). В этом разработчике, легко открывать новый проект, почти не надо делать предустановок. Есть много примеров. Почитав немного из теории программирования в С и конспектируя некоторые постулаты сразу с примерами и вперед. Наверное не совсем верно, но мне так лучше... что не получается, возвращаешся к теории...
Вот примеры, на которых я учусь (конечно это не единственное) http://mikrocontroller.bpla ced.net/wordpress/?page_id=744. Эти примеры есть
После некоторых експериментов с миганием светодиодами и т.д купил ТФТ дисплей 3,2 Дюйма. С дисплеем интересней. Конечно у меня еще не все получается, но если не надоест буду дальше эксперементировать. Очень хотелосьбы, чтобы знающие люди делились опытом и помогали в возникающих проблемах. Заранее хотелбы просить людей, которые захотят как то коментировать- пожалуйста не бейте сильно по голове, за возмоно тупые вопросы. Я не ставлю себе цель стать большим программистом (хотя хотелбы, но возраст делает ленивым...).
Чтобы совместить процесс изучения стм32 с полезным , есть желание сделать блок управления для РА, скорее всего на ГУ74Б. Хотя у меня есть и работает усилитель на ГС35Б о которм я писал в разделе "Усилители мощности на ГС31 и ГС35".
И так в новой конструкции главные моменты:
- Управление кондерами,через шаговые моторы.
- Диапазоны переключать, путем определения частоты входного сигнала (как в АКОМах) , не надо будет никаких кнопок,переключателе й на напели.
- Сделаь блок универсальный повозможности
Что отражать на дисплее?
- Ток Анода
- Мощность
- КСВ
- Ток экранной сетки.
- Ток управляющей ( или может просто диодом светить если ток заходит в положительную облать.
- Диапазон (Участок частоты)
- Температуру воздуха из лампы
- еще что?
Хочется чтобы было минимум необходимого.
Пока все. В седующих постах попробую писать о том что получается, а что я не знаю....
Вот картинка с моими потугами. Сделать градусник для показания велечин- мощности и.т.п
Да две картинки- это с усилителя на ГС35Б...

http://easystm32.ru/for-beginners/8-soft-for-stm32
http://www.you2repeat.com/watch/?v=8EybW6ZZ7ps

vadim_d
28.12.2015, 12:30
Проблема, я не знаю языка Си. Раньше я делал все на бейсике, а точнее Баскоме, который мне всеравно нравится, но решил попробовать
Антон, правильно решили :smile:. Я помню, как трудно было переходить на Си после Бейсика и Фортрана, но результат того стоит, да и опыт реализации алгоритмов на другом языке программирования, как и знания микроконтроллеров и их периферии, оказываются очень полезными

RN3KK
28.12.2015, 14:03
У меня кококс на всех компах вываливается с ошибкой, и утечка памяти в нем перла большая. настроил кеил, но так и не воспользовался пока.

DL2BDA
30.12.2015, 01:00
Вопрос RN3KK (http://www.cqham.ru/forum/member.php?11773-RN3KK).

А как кокос "вываливается"? В чем проявляется?
Блин приципилось почемуто сюда?

Добавлено через 51 минут(ы):

Меня в личку попросили сообщить как я соединил борд СТМ32Ф407. с дисплеем.
Дисплей с параллельным портом (2х20 ножек) 3,2 дюйма с контроллером на плате SSD1289. Схема выводов дисплея на картинке. В эксель таблице хорошо расписано соединение СТМ32Ф407 Дискавери с дисплеем Sainsmart 320x240 TFT (3,2 ) (стоит кажется 17-20 евро, точно не знаю.). Который я использую. Когда у вас получится запустить дисплей, тогда можо попробовать некоторые ножки и на другие выводы борта поменять. Не забудте 17 вывод дисплея(резет) через резистор 10ком соединить с бортом где 3,3В. А также подать через резистор 27 ом 5 вольт на 19 вывод дисплея ( подсветка).
Я приложил в ципе демо-пример с дисплеем. Программка сделана в кокосе.
Здесь статья на немецком, но названия ножек и сама программка понятна. Но в инете есть перевод этих статей на русский, пока не нашел куда я его заложил.. Все в кокосе.
http://mikrocontroller.bpla ced.net/wordpress/?page_id=1357
Пример(демо) достаточно открыть, в нем нужные библиотеки прицеплены.
Здесь все примеры с которых я начинал. Тут же библиотеки, которые также используются и которэми я также пользуюсь. Не все сразу получается но если не сдаваться, то каждый маленький успех, приносит удовольствие и опыт...
Кстати думаю, может дисплей побольше взять на 5 дюймов. В нем стоит аналогичный контроллер SSD1963. С другой стороны для РА может и этого хватит да и для изучения это лучше, чем поменьше размером....
Да еще по расположению осей х и у на дисплее. Если мы расположим дисплей так (лицом), что выоды будут справа. То 0.0 позиция будет слева-внизу. х=0,у=0 ; х=239 (пиксель) слева, в верхнем углу.; у=319 снизу в правом ряду. Знание координат понадобится, когда вы захотите гдето на дисплее в определенном месте расположить текст и т.д.

DL2BDA
30.12.2015, 01:20
У меня дисплей от ( но есть много других с такимиже контроллером и 40 ножками...)
Да дисплей с тачскрином (резистивный).
SainSmart 3.2 TFT LCD Displayhttp://www.sainsmart.com/sainsmart-3-2-tft-lcd-display-touch-panel-pcb-adapter-sd-slot-for-arduino-2560.html
здесь он еще дищевле...
http://www.ebay.de/itm/like/381253777661?ul_noap p=true&chn=ps&lpid=106

NoName
31.12.2015, 00:26
Всем кто разрабатывает на CoCox, советую посмотреть еще на http://www.emide.org основанного на CodeBlock IDE. Все гораздо быстрее. Нативный код, он нативный код.

DL2BDA
12.01.2016, 01:22
Сегодня написал (!) тест программку для кручения КПЕ. Контроллер СТМ32Ф407 , в качестве трайбера использую платинку , которую купил на ибее ( используется там спец. микросхема от тошибы, которую я раньше использовал в своем па на гс35, только теперь это готова платка от китайцев !. стои она не помню 4-8евро..) Для "обратной связи" с контроллеропм и для определения полоэения ротора КПЕ использовал потенциометр. Потенциометр правда несовсем распространенный.. он не имеет упора, тоесть крутится на все 360 градусов., однко имеет разрыв (мертвую сону) и чтобы подвижный контак не оказался в воздухе, он соединен через постоянное сопротивление 1М с массой (нижним выводом поти). В качестве тестового положения я использовал три книпки при нажатии которых в контроллере вызывается (записывается) какое либо число симулирующие задаваеммое положение. Контроллер сверяет заданное положение (число) с значением напряжения с потенциометра ,связанного с осью КПЕ и если оно не равно, то контроллер подворачивает КПЕ пока не совпадет и останавливается. При этом мотор не считает шаги и если по каким либо причинам ось кондера (а значит и поти) поворачивается мотор сразу доворачивает на нужное положение. АЦП контроллера 12 битный, что составит значение в цифровом измерении в (коунтс) 4095 (4096). При питании контроллера в 3,3В (борт питается в 3 вольта, но его можно и на 3,3В включить) при входе на АЦП 3300мВ (3,3В) контроллер " видит-имеет " 4095 коунтс. Таким образом можноп пощитать (скалировать) сколько мВ приходится на 1 коунтс ( и наоборот). При записи при помощи кнопок, при нажатии одной из них, контроллер "узнавал " номер кнопки и записывал в переменную должного положения произвольно мною выбранном значении в коутс. Первая кнопка например 420, вторая 950, третья 1470. ( короче может быть от 0 до 4095). Вместо кнопок я потестовал второй поти, который подключил ко второму входу АПЦ (РА.2).. Теперь можно этим потенцеометром крутить КПЕ., который "следуе" за управляющим потенциометром.. практически "длинная " рука.... Использовать нормальный поти ( как энкодер положения) думаю тоже можно, но наверное надо предусмотреть какие либо концевые кнопки (или оптопару.) . Конденсатор крутится довольно быстро! Прицепить маленьйкое видео не могу,размер будет великоват.. может кто знает, где можно видеофаил прицепить ( на каком ресурсе, сайте)...
Вторые думки об использовании вакумного кондера, покрайней мере для горячего конца. У меня есть КП1-8 (5-250пф). Покрутил я его от минима до максимума. Получилось 16 оборотов, записакл значения на каждом оборотзе, получается гдето порядка 20пф (+/-) и макс емкость была около 265пф. Мерил проф прибором. Для этоко КПЕ тоже наверное можно взять потенциометр, только многооборотный. В основном это 10 оборотные. Поэтому надо связять ось КПЕ через какойто редуктор (шестеренки, ремешок и.д.) чтобы при полных оборотах , поти не перекрутить. Это надо мне еще попробовать сваять и протестировать. Есть у меня еще енкодеры абсолютные типа АС4550, посмотрю может их использовать вместо потенциометра. Эта микросхема (энкодер) разместиться на маленькой платке.. Ну об ней наверное попзжш, как дойдут руки.. Несколько картинок теста внизу прицепил. Поповоду самой тест программки, если интерес будет, прицеплю. Пост наверное скопирую в форум для шаговых моторов в РА. Но поскольку я задумывал эту тему по использованию контроллера СТМ32, то буду и дальше писать здесь. Сразу скажу, что я учусь программировать СТМ32 и надеюсь, что кто больше имеет опыта с СТМ32 поделится... ( когда дойду я до других проблем..)
73!

UT0UM
12.01.2016, 01:37
Сегодня написал (!) тест программку для кручения КПЕ. Контроллер СТМ32Ф407

а не жирно ли?
для такой задачи достаточно самой простой ардуины
а СТМ32Ф407 лучше для трансивера придержать

DL2BDA
12.01.2016, 01:44
а не жирно ли?
для такой задачи достаточно самой простой ардуины
а СТМ32Ф407 лучше для трансивера придержать



Да плата имеется, вроде не дороже ардуино стоит. Ну и ардуино я не хотел использовать., атмелевские контроллеры я на Бейсике программировал. Все на любителя.

UT0UM
12.01.2016, 01:52
вроде не дороже ардуино стоит

неужели 1,45 долл (http://www.ebay.com/itm/New-Pro-Mini-atmega328-Board-5V-16M-Arduino-Compatible-Nano-NEW-M43-/301723336845?hash=it em46401cc08d:g:bA4AA OSwgQ9VzBlt)!???


рдуино я не хотел использовать., атмелевские контроллеры я на Бейсике программировал

Язык программирования Ардуино является стандартным (https://ru.wikipedia.org/wiki/Arduino#.D0.AF.D0.B7 .D1.8B.D0.BA_.D0.BF. D1.80.D0.BE.D0.B3.D1 .80.D0.B0.D0.BC.D0.B C.D0.B8.D1.80.D0.BE. D0.B2.D0.B0.D0.BD.D0 .B8.D1.8F)C++ (https://ru.wikipedia.org/wiki/C%2B%2B)

DL2BDA
12.01.2016, 02:05
Да ардуино вроде больше стоит, они ведь разные бывают. Я просто учусь программировать на С. МСП430 мне не нравятся, а стм32 я на них остановился, хотя для изучения начального он наверное сложноват, но и имеет больше преимуществ. Борт которыя я использую у нас стоит 16-17 евро.

ur7hfo
25.03.2016, 15:12
атмелевские контроллеры я на Бейсике программировал
Для расширения кругозора так сказать, статья о том, что за язык программирования используется в стандартной среде разработки для Ардуино - http://robocraft.ru/blog/arduino/25.html

Tadas
25.03.2016, 21:09
Борт которыя я использую у нас стоит 16-17 евро.
Пока работал немало проектов сделал на разных AVR, ARM Cortex M0, М1.
С выходом на пенсию надо было найти платформу для поделок (чтобы мозги незаржавели :-P ).
Для начала остановился на таком модуле:
http://www.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-arduino/32583160323.html?spm =2114.30010308.3.2.z L81CR&ws_ab_test=searchweb 201556_1,searchweb20 1602_5_10036_10035_1 0034_507_10032_10020 _10001_10002_10017_1 0010_10005_10011_100 06_10003_10021_10004 _10022_10009_10008_1 0018_10019,searchweb 201603_7&btsid=5b9f6625-789c-424b-ada4-5acaaf7a867d
Дешевле пожалуй быть уже не могёт :smile:
Использую среду IAR и эмулятор ST-Link.
Пока что сделал частотомер для ... RA3AO.
Дело в том, что в штатном частотомере слетел индикатор, замены под рукой не подвернулось.
Измеряет частоту ГПД, частоту опорника, вычисляет частоту настройки, генерирует 500 кГц для формирователя SSB.
На очереди ещё пара задумок.
P.S. что совсем уму не постижимо, тот же контроллер у тех же китайцев поштучно стоит дороже этого модуля :shock:

RA1AGB
25.03.2016, 22:47
Появилась бесплатная среда разработки AC6 на базе Eclipse http://www.openstm32.org/System+Workbench+for +STM32

Очень удобна в связке с STM32CubeMX http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?icmp=pf2592 42_pron_pr_jun2014&sc=stm32cube-pr6
Вот тут вебинар на эту тему https://www.youtube.com/watch?v=iCcJmn5N3R8
https://www.youtube.com/watch?v=0XAQmhaOmsY


Павел
RA1AGB
73

DL2BDA
14.05.2016, 21:01
Тадас, Павел, спасибо за инфо. Павел я смотрел как то коротко Куб..... все красиво, но наверное надо много времени чтобы освоить... У меня пока нет настолько знаний чтоб этим занятся.... Както в Кокосе немного получается, плюс есть неплохие примеры для начинающего (на немецком языке) да и на русском есть перевод етого сайта (примеров). Прошло много времени и я все тестировал всякие функции.... http://mikrocontroller.bpla ced.net/wordpress/?page_id=744 (все библиотеки) .....Но потом захотелось дисплей побольше. 5 дюймовый. Долго не удавалось запустить и я уже потерял надежду... помог коллега по работе оживить дисплей! Теперь на нем эксперементирую. Использую граф. функции которые имелись для Кокоса. Баграф-градусник работает. Попробовал сам некоторые фонты делать при помощи софта, который автор статей прилагает.. Вроде получается. Сделал фонт "7сегментный-Дигитальный". Попробовал библиотеку- частотометра- работает, правда не совсем как бы хотелось, надо разбираться. До 500кгц меряет нормально, потом "зависает".. наверное проблемы с таймером. Но всеже если поставить делитель, то и так сойдет....(!). В моей идеи постройки нового РА переключение диапазонов думаю сделать по типу: считывание входного сигнала с трансивера, определение частоты и соответствующего сегмента диапазона а затем " доставание" из памяти установок для моторов. При этом разбивка по секторам диапазона будет возможна любая (по 50кгц например) . Однакот у меня есть вопросы: каков алгоритм работы проца?.
У меня есть вроде простой вопрос. Подскажите фукцию (пример) для стм32 " Пип-тона" - тон для звукового сопровождения нажатия кнопки и.ид. В общем функция наверное состоит из двух частей- генерация определенной частоты сигнала + временная задержка (делей). Поскольку стм32 имеет много таймеров, один из них наверное можно пожертвовать.
Пару картинок экспериментов по нахождению более-менее варианта как все необходимое разместить на дисплее и какими красками. На фото цвета немного отличаются от действительных, которые имеет дисплей....

romanetz
14.05.2016, 22:27
Настраиваете один таймер на выдачу ШИМ 50%, к выходу этого таймера подключаете динамик. На начале "бип" включаете выдачу ШИМ, на окончании "бип" отключаете.
TIM3->PSC=168-1; //1 MHz TIM3 clock
TIM3->ARR=1000; //1 kHz beep frequency
TIM3->ССR1=TIM3->ARR/2;
TIM3->CR1|=TIM_CR1_CEN;
а в конце
TIMx->ССR=0;
TIMx->CR1&=~TIM_CR1_CEN;
при этом проц все время курит (он и так-то в этом проекте не сильно напрягается :-)) )
Задержки очень удобно делать через SysTick таймер.

DL2BDA
15.05.2016, 00:48
romanetz, Спасибо. Попробую.

DL2BDA
18.06.2016, 21:43
Все еще эксперементирую. Занимался графикой ГУИ. Методом научного тыка продвинулся немчого вперед. У меня возник теперь один вопроа, который я не знаю где задать...может кто здесь прочтет и подскажет. Вопрос- как в усилителе переключать пиапазон. Точнее я решил что катушки будут переключать реле ( ну а моторами крутить кондеры). Самое главное как определать (включать) диапазон. У меня трансивер яэсу и там есть выход в ВСД формате. В общем просто. Но не совсем универсально. Кроме того думаю нужно ли мне диапазон делить на участки (секции) скажем по 50 кгц. Или достаточно всетаки одного пункта настройки (в середине диапазона) или два участка -тлг и ссб. На сколько мне известно в АКОМах измеряется входная частота с трансивера и потом происходит выборка настроек из памяти.
Но как это функционирует. Дла определения частоты сигнала надо нажать на трансивере передачу и подать сигнал (с тоном)... что происходит, если до этого усилитель работал на совсем другом диапазоне... в акоме бандпереключатель крутиться с помощью шагового ... то есть в какойто момент все растройено. Кто работает на акоме, расскажите как происходит процесс переключения и как быстро.

UT0UM
18.06.2016, 21:52
Но как это функционирует. Дла определения частоты сигнала

а чего ее у трансивера на спросить по САТ?

DL2BDA
18.06.2016, 22:11
Да такая идея есть. И даже наверное не плохо. Просто САТ может быть занят, скажем работает ц логом. Тут надо тогда "подслушивать". Как это сделатья точно не знаю.., хотя раньше на Атмеле делал программку и коммуникация с трансивером работала, но с подслушкой не очень получалось.. я ведь не большой программист...

UT0UM
18.06.2016, 22:15
Тут надо тогда "подслушивать".

если есу современный, то там кенвудовская система кат команд
и распознать ответ с частотой трансивера логу совсем не сложно
просто слушая ТХ пин трансивера
ежели есу старый (857 897 итд) то там надо слушать запросы компа и ответы трансивера
иначе в потоке байтов от трансивера к компу частотут выловить не реально

DL2BDA
19.06.2016, 01:22
Трансивер ФТ920 он отвечает на запрос. Послал запрос- в ответ 28 байт из которых надо выделить нужные о значении частоты... поэтому надо слывшать запрос и после его окончания ждать появления первого байта из ответа.

UT0UM
19.06.2016, 01:46
Трансивер ФТ920 он отвечает на запрос. Послал запрос- в ответ 28 байт из которых надо выделить нужные о значении частоты... поэтому надо слывшать запрос и после его окончания ждать появления первого байта из ответа.

если можно поймать начало ответа по каким-то признакам, то запрос слушать не обязательно

ur7hfo
21.06.2016, 17:37
Просто САТ может быть занят, скажем работает ц логом. Тут надо тогда "подслушивать".
В Вашем STM32 3 аппаратных UART , один из них к логгеру подключите, другой к трансиверу (через IF-232, RS-232, или CI-V в зависимости от модели трансивера.)
К Вам вопросик, какой на фото используете дисплей , и какую графическую библиотеку ?

UT0UM
03.09.2016, 01:55
поляки заюзали stm32f746discovery для DSP в ТПП (http://sp-hm.pl/thread-2745.html)

http://sp-hm.pl/attachment.php?aid=1 1396

DL1KBX
08.09.2016, 02:48
Трансивер ФТ920 он отвечает на запрос. Послал запрос- в ответ 28 байт из которых надо выделить нужные о значении частоты... поэтому надо слывшать запрос и после его окончания ждать появления первого байта из ответа.
Команды САТ врядли другие, нежели в фт1000мп. Я лет 15 тому назад игрался чуток с двумя приемниками, хотел смотреть панораму на втором приемнике
Алгоритм: считать частоту 1 ресивера взять ее за среднюю частоту и далее вторым ресивером сканировать диапазон. Ширина заранее выбиралась в меню.
Все работало, но первый приемник затыкался по НЧ,хотя С-метр работал. При сканировании первым вокруг приемникс 2 все было ОК. Но так неинтересно было, второй рес ведь по фильтрам и пр. сильно уступает основному. Фирма Yaesu долго отделывалась тем, что у всех, якобы, работает, а когда поняли, что речь то идет не о НЧ спектре, а о настоящем скане, то вдруг подтвердила мою правоту и пообещала в след. моделе исправить.
След. бяка: малая скорость стрельбы. Обе эти проблемы в случае управления усилителем не возникают.
Ну а далее в наш мир резко ворвался SDR :up:

http://www.qsl.net/de1kbx/

Плата шикарная, я тоже купил такую с дисплеем, допаяю вот mcHF и тоже играться начну.
Удачи тебе!
Куй железо, пока горячо!

4Y
08.09.2016, 06:24
в качестве трайбера использую платинку , которую купил на ибее ( используется там спец. микросхема от тошибы

Подскажите название платы для заказа.

Владимир_К
04.12.2016, 14:02
Для начала остановился на таком модуле:
http://www.aliexpress.com/item/1pcs-...4-5acaaf7a867d
Что-то ветка поутихла.. Чтобы обновить ее, есть вопросы..:-|
Получил такой модуль, попробовал самую первую программу.. Среда CoIDE, программатор как и у Вас ST-Link.V.2.0. Подскажите, как сделать так, чтобы перед загрузкой контроллера не нажимать кнопку "Reset"?

UR4QBP
04.12.2016, 15:14
Что-то ветка поутихла.. Чтобы обновить ее, есть вопросы..:-|
Получил такой модуль, попробовал самую первую программу.. Среда CoIDE, программатор как и у Вас ST-Link.V.2.0. Подскажите, как сделать так, чтобы перед загрузкой контроллера не нажимать кнопку "Reset"?
Скорее всго у вас неправильно установлены перемычки BOOT0 и ВООТ1(должны быть к 0, как на картинке у продавца) или у вас в программе выводы программирования SWDIO и SWCLK настроены как выходы. Поэтому приходится зажимать Reset. Чтобы выводы SWDIO и SWCLK использовать как выходы нужно в код добавить строку Remap. Если нужен код функции подскажу когда буду за компьютером, а сейчас пишу с планшета на диване. :-)

Владимир_К
04.12.2016, 16:21
Скорее всего у вас неправильно установлены перемычки BOOT0 и ВООТ1
Спасибо Александр! Скорее всего надо было сначала попробовать, а потом панику поднимать:smile:. Прошивается и без нажатия. Просто я без нажатия и не пробовал..

DL2BDA
04.12.2016, 18:54
Извените, давно не заходил сюда... с лета.... В качестве трайбера шагового мотора использовать можно любые трайберы из инета они должны выдерживать мах. ток шагового мотора... у меня вот такой как здесь http://www.ebay.de/itm/TB6560-3A-Controller-Steuerung-CNC-Schrittmotor-Stepper-Motor-Treiber-Driver-/381397233255?hash=it em58cd0bee67:g:M4EAA OSwHmhV8lEl

Извените, давно не заходил сюда... с лета.... В качестве трайбера шагового мотора использовать можно любые трайберы из инета они должны выдерживать мах. ток шагового мотора... у меня вот такой как здесь http://www.ebay.de/itm/TB6560-3A-Controller-Steuerung-CNC-Schrittmotor-Stepper-Motor-Treiber-Driver-/381397233255?hash=it em58cd0bee67:g:M4EAA OSwHmhV8lEl

Добавлено через 14 минут(ы):


К Вам вопросик, какой на фото используете дисплей , и какую графическую библиотеку ?
Использую дисплей 5"






5.0" 800*480 TFT LCD Module Display Touch Panel + SSD1963 For 51/AVR/STM32


промер..http://www.ebay.de/itm/121089743977?_trksid =p2060353.m1438.l264 9&ssPageName=STRK%3AME BIDX%3AIT
Библиотека используется вот отсюда http://mikrocontroller.bpla ced.net/wordpress/?page_id=744
33-LCD_SSD1289-Library (STM32F4)

Вообще я начинал с этих примеров... там много чего, что в общем надо... бери любой пример и тренеруйся..
Библиотеку для 5 дюймового дисплея пришлось переделать.. с указанной выше библиотеки для 3,2 дюйма дисплея.(товарищ помог..).
Если использовать указанный 3,2 дисплей, то графики вполне достаточно для постройки различных дисплеев-с кнопками и т.д. Да для градусника было написано пару функций (опять помог товарищ..)..

Владимир_К
04.12.2016, 19:17
Вообще я начинал с этих примеров
Хорошая библиотека. Жалко, что для STM32F4, я пока начал с STM32F103. В принципе, можно конечно подкорректировать для своего контроллера.

romanetz
04.12.2016, 20:18
На вегалабе инфа проскакивала, что кокосу хана, и сайт действительно лежал некоторое время. Видимо, денег нашли снова. Посему советую с кокосом завязывать, а переходить на кейл.
По последнему вопросу, если работа с дисплеем идет через FSMC, то меняется лишь очень небольшая часть кода (инит ног, клоков и самого FSMC)

ur5yfv
04.12.2016, 20:43
Вот здесь (http://www.cqham.ru/forum/showthread.php?29880-%D1%E8%ED%F2%E5%E7%E 0%F2%EE%F0-Si5351A-%ED%E8%EA%F2%EE-%ED%E5-%EF%F0%EE%E1%EE%E2%E 0%EB&p=1318981&viewfull=1#post13189 81) Александр поделился проектом для STM32F103C8 + Si5351.Проект сделан в CooCox.
Для начального обучения сойдет. Со временем девственно чистый main.с может обрасти "мясом", добавив в него
кнопки, энкодер, какой нибудь индикатор. Ну и конечно же соответствующие библиотеки для их работы.
Может даже и Автор поможет каким советом.

DL2BDA
04.12.2016, 20:50
По поводу кокоса.... просто я его выбрал, так как он был наиболее прост, в нем все уже вместе "стянуто", в отличии от других плюс примеры, с сайта который я уже показывал ( на немецком, но можно и на английском его переключить.. есть и перевод на русский, не помню кто-то в России сделал, есть сайт..). кроме того у него нет ограничения по обьему программы.. но а другие типа кейл имеет ограничения, которые не позволят болле большую программу писать.. (конечно если есть лекарство для кейла...). Есть от СТМ еще свободный... но я пока не брался... Я не программист, это было начало и остановился на коксе.... Да дисплей работает через FSMC... пожтому надо вносить изменения в инициализации в соответствии с данными дисплея. его размеры в пиксилях и др. не получалось, но помог товарищ...

UR7HBP
04.12.2016, 21:25
Как в EMbloks (ныне EmBitz) добавить STM32F446RE. Хочу помучить свою NUCLEO

UR4QBP
04.12.2016, 22:22
По поводу кокоса.... просто я его выбрал, так как он был наиболее прост, в нем все уже вместе "стянуто", в отличии от других плюс примеры, с сайта который я уже показывал ( на немецком, но можно и на английском его переключить.. есть и перевод на русский, не помню кто-то в России сделал, есть сайт..). кроме того у него нет ограничения по обьему программы.. но а другие типа кейл имеет ограничения, которые не позволят болле большую программу писать.. (конечно если есть лекарство для кейла...). Есть от СТМ еще свободный... но я пока не брался... Я не программист, это было начало и остановился на коксе.... Да дисплей работает через FSMC... пожтому надо вносить изменения в инициализации в соответствии с данными дисплея. его размеры в пиксилях и др. не получалось, но помог товарищ...
Плюсую!!! :up::up::up: Я изначально помытраствовал в кейле, попробовал иар... в итоге остановился на кокосе. Как по мне для стм32 лучше нет(лично мое мнение, ни кому не навязываю), чего только стоит онлайн репозитарий! Там куча примеров и готовых решений(библиотек). А вот для стм8 использую иар для стм8. Полностью согласен с Антоном, так что становлюсь в защиту кокоса рядом с вами. 8-) Подружил стмы с многими дисплеями начиная от 1602 и нокии3310 и до дисплея 7 дюймов 800х480 на SSD1963 и все это отлично работает!

Владимир_К
05.12.2016, 00:09
Полностью согласен с Антоном, так что становлюсь в защиту кокоса рядом с вами
Александр! Подскажите, как запустить отладку. Все нормально проходит от создания проекта до прошивки контроллера. Но, не могу запустить режим отладки (Debug). Мелькает какое-то сообщение, панель отладки не появляется.. Сначала пробовал без программатора. Появляется сообщение, что устройство не подключено. Подключаю ST-Link, Жму Debug, на консоли появляется сообщение: Erase: Done Program: Done Verify: Done. То есть выполняет то же, что и по команде Dounload Flash. CooCox версия 1.7.8. Программатор ST-Link 2.0. В интернете все перерыл, общие рассуждения, типа выкинь его..
Да, еще добавлю.. Из опыта с Atmel в среде AVR Studio, мне честно говоря, не понятна идея отладки только с подключенным девайсом. А если его вообще пока нет. Или например имеем Proteus и ничего вообще паять не нужно.. Нутром чувствую, есть в этом какая - то фишка, но какая..

PA8MM
05.12.2016, 01:09
Владимир_К,

У меня была проблема с дебагом (контроллер правда STM32F103C8T3) - оказалось, что вывод PC13 (SWDIO) был сконфигурирован как "выход" (на нем висел светодиод). Как только убрал эту конфигурацию - все завелось, так что советую проверить настройку SWDIO, SWCLK

ur5yfv
05.12.2016, 01:11
Может ругаться если по пути есть русские буквы. Можно еще в конфигурации проекта, во вкладке Debugger еще посмотреть. Может там еще что ....
Несколько ссылок по теме:
http://x32.in.ua/2012/04/01/coocox-on-zhe-kokos-ili-prodolzhenie-istorii/
http://firsthand.ru/book/programmirovanie/coocox-coide-pervyy-zapusk-pervyy-opyt
http://www.avislab.com/blog/stm32_st_link/
http://stm32withoutfear.blo gspot.com/2014/12/stm32-coocox-ide.html

Там вроде по ошибкам в Debug тоже что то встречалось.

Владимир_К
05.12.2016, 01:21
что вывод PC13 (SWDIO) был сконфигурирован как "выход" (на нем висел светодиод).
Ну так оно так и есть.. Это же отладочная китайская платка, на ней как раз на PC13 светодиод и я его на выход и сконфигурировал.. Спасибо, завтра проверю. Сегодня уже убрал со стола.
Ну китайцы... Читаю даташит, а там прямым текстом, что PC13-PC15 допускают всего 3 ма, 2 мгц и 30 пф нагрузки и в качестве источника тока, их не рекомендуется использовать, например для питания светодиодов:smile:. Хотя там светодиод подключен к плюсу питания и включается он низким уровнем на порту..
И в моем контроллере выводы подключения программатора S-Link другие..

Владимир_К
05.12.2016, 11:20
Может ругаться если по пути есть русские буквы. Можно еще в конфигурации проекта, во вкладке Debugger еще посмотреть. Может там еще что ....
Несколько ссылок по теме:
Вам большое спасибо, все нормально теперь. По первой Вашей ссылке. Где-то я уже встречал, что отладка запускается в XP Professional, а у меня Home. Но никаких конкретно решений не было сказано. А тут:
http://pluslab.ru/blog/coide/otladka-v-winxp-home-edition
все подробно расписано. Лечится добавлением файла tasklist.exe в папку system32 Windows. Там же по ссылке и нужный файл. На все операции пол-минуты..

VFO
05.12.2016, 11:57
За функции служебных ног в контроллере отвечает блок AFIO. Например:
AFIO->MAPRbit.SWJ_CFG = 2; пины JTAG переключаются в режим обычных GPIO, а для отладки остаётся только SWD.
AFIO->MAPRbit.PD01_REMAP = 1; пины кварцевого генератора переключаются в режим обычных GPIO, и т.д.
Только надо не забыть включить этот блок в RCC: RCC->APB2ENRbit.AFIOEN = 1;

Владимир_К
10.12.2016, 21:16
Коллеги! А как проще подключить дисплей 1602 к STM32F103. Имею ввиду, как согласовать по напряжениям питания. Ну была бы пара выводов, подключил бы через согласование на полевиках, но 7 проводов, уже как-то напрягает. На будущее наверное закажу платки согласования уровней в Китае, но ждать долго не хочется.

Genadi Zawidowski
10.12.2016, 21:39
Подключается напрямую. Все индикаторы кроме OLED при питании контроллера +5 вольт по паспорту позволяют управлять от 2.7 вольта.

UR7HBP
10.12.2016, 23:09
Коллеги! А как проще подключить дисплей 1602 к STM32F103
Библиотека для работы с HD44780 (http://easystm32.ru/indication/24-library-for-hd44780)

http://easystm32.ru/images/hd44780/hd44780_and_stm32.jp g

Владимир_К
10.12.2016, 23:24
Все индикаторы кроме OLED при питании контроллера +5 вольт по паспорту позволяют управлять от 2.7 вольта.
Меня беспокоит другое. Не угробит ли индикатор своими 5 вольтами STM32, который питается от 3,3 вольта. Хотя там есть вроде(как пишут: "толерантные" порты к 5 вольтам), все равно напрягает. А в программе предусмотрено не только запись в индикатор, но и чтение и, при этом, на входе STM32 появится 5 вольт. В общем, оно же не транзистор какой-нибудь, сгорит - можно заменить, а контроллер вроде и жалко:smile:.
Для UR7HBP. Для этого дисплея есть библиотеки от автора CoIDE. Правда пока не проверил в работе, по выше изложенной причине.

UR7HBP
11.12.2016, 00:01
Владимир_К (http://www.cqham.ru/forum/member.php?13400-%D0%92%D0%BB%D0%B0%D 0%B4%D0%B8%D0%BC%D0% B8%D1%80_%D0%9A) дисплей можно запитать и от 3вольт на пробу, но возможно будет маленькая контрастность. Для нормальной работы нужно подавать небольшой минус на Vo (3 нога). У меня без минуса работает ESR метр от 3.3в от miron63 http://vrtp.ru/index.php?showtopic= 26768 Видно изображение на троечку но пользоваться можно, когда нибудь доделаю минус.

UPD

Контрастность, программное изменение контрастности

Контрастность дисплея управляется подачей напряжения на специальный контакт (см. документацию по дисплею). При этом уровень контрастности зависит от разницы величины напряжения между напряжением питания и напряжением, поданным на контакт контрастности. Для нормальной контрастности разница должна составлять примерно 4 Вольта. Т.е. на контакт контрастности нужно подать при питании 5В примерно 5-4=1 вольт, и примерно 3.3-4=-0.7В (!отрицательное напряжение) при питании 3.3В. Дисплеи, которые имеют встроенный преобразователь напряжения (для контрастности) могут работать при питании 3.3 и 5 В. Обычно это указано в документации. Электроника дисплеев, рассчитанных на питание 5В, отлично работает и при 3.3В., единственный вопрос – где взять отрицательное напряжение для управления контрастностью? Для этого я применяю не сложную схему инвертора напряжения:
http://www.avislab.com/blog/wp-content/uploads/2011/04/LCDContrast.gif (http://www.avislab.com/blog/wp-content/uploads/2011/04/LCDContrast.gif)

Genadi Zawidowski
11.12.2016, 00:40
Не угробит ли индикатор своими 5 вольтами STM32, который питается от 3,3 вольта. Хотя там есть вроде(как пишут: "толерантные" порты к 5 вольтам), все равно напрягает.
Я использую в своих конструкциях как раз двунаправленный режим работы дисплея (и читаю из него состояние и пишу команды). Разумеется, подключаю дисплей к "толерантным" выводам процессора. Общее правило на STM32 - это не те сигналы, что совмещены с АЦП. Так что в документацию смотреть надо.
В Вашем случае я вижу вообще сигнал W дисплея на земле... так что в процессор он ничего не выдаст никогда. Но и максимальной скорости так не получить.

Владимир_К
11.12.2016, 00:58
Добавлено через 8 минут(ы):


Владимир_К дисплей можно запитать и от 3вольт на пробу, но возможно будет маленькая контрастность.
Да, спасибо.. Наверное пока этим и воспользуюсь (тут надо срочно подключить индикатор и проверить библиотеку). А потом уже можно расслабиться и сделать как надо - наверное придется подключить дисплей на другие ноги, те которые допускают 5 вольт. А сейчас как назло, оказалось все на PA0-PA6 и ни один этот вывод по даташиту не отмечен как "толерантный".
А подключил так, потому что мне так проще выводить. Шина данных у меня на А0-А3. То есть, беру 8-ми разрядное число, сначала вывожу старшие 4, наложив маску и сдвинув вправо на 4 разряда, потом младшие. А иначе надо малость изворачиваться.. Вот я и искал более легкий путь, да и мельком где-то прочитал, про "толерантность", а не уточнил, что это не распространяется на все ноги.

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

Владимир_К
11.12.2016, 11:29
Всем добрый день! В библиотеке для вывода на HD44780, что я использую, есть некоторые моменты, которые я непонимаю.. Вот фрагмент кода:

const unsigned int SWAP_DATA[16] = { 0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE,
0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF};

/******************** ******************** ******************** ***************//**
* @brief Write 4-bits to LCD controller
******************** ******************** ******************** ******************/
void Lcd_Write_4bits(uc8 byte)
{
uint16_t u16Temp=0;
GPIO_WriteBit(GPIOA, RW, Bit_RESET);
GPIO_WriteBit(GPIOA, EN, Bit_SET);
u16Temp = GPIO_ReadOutputData( GPIOA)&0xFFF0; //Это что? Читаем состояние порта?
u16Temp |= SWAP_DATA[byte&0x0F]; // Вот это не понимаю, зачем
GPIO_Write(GPIOA, u16Temp);
Delay(10);
GPIO_WriteBit(GPIOA, EN, Bit_RESET);
Delay(10);
}

/******************** ******************** ******************** ***************//**
* @brief: Write data to LCD controller
* @param[in] data : Data to be written
******************** ******************** ******************** ******************/
void Lcd_Write_Data(uc8 data)
{
Wait_While_Busy();
GPIO_WriteBit(GPIOA, RS, Bit_SET);
Lcd_Write_4bits(data>>4);
Lcd_Write_4bits(data );
}
Как я понял, мы сначала читаем состояние порта в который будем выводить информацию, в данном случае на пины 0-3. Потом накладываем маску, выделяя нужные нам. А вот эта строка не понятна.
u16Temp |= SWAP_DATA[byte&0x0F]; // Вот это не понимаю, зачем мы здесь значение заменяем на значение из массива?

И еще вопрос такой. Если, скажем выводы "дата" индикатора подключены к любым пинам порта, например 2,5,6,7. Нужно вывести туда число, ну например 0110. Делаем это следующим образом. Накладываем маску 0001. Если истинно, устанавливаем пин 2 порта. Затем маска 0010, если истинно, устанавливаем пин порта 5 и т.д. 4 раза.
Можно ли так или есть как-то изящней?

Genadi Zawidowski
11.12.2016, 11:48
Массив меняет порядок бит на противоположный. Явно автор наоборот развел плату, и чтобы не резать, скорректировал программно.

Владимир_К
11.12.2016, 12:11
Массив меняет порядок бит на противоположный.
Спасибо, Геннадий! А я взял одно число, 0xB - 1011, глянул в массив, получил 1101. Но я взял один случай и закономерности не усмотрел..

Genadi Zawidowski
11.12.2016, 12:25
Я Геннадий (Гена), а не Вадим.

Владимир_К
11.12.2016, 12:29
Извините, знаю же, но что-то переклинило со вчерашнего дня..

Владимир_К
11.12.2016, 16:16
Еще такой вопрос.. Есть ли возможность в CoIDE делать отладку без подключения ST-Link? То есть так, как например в AVR Studio 4.19.

ur5yfv
11.12.2016, 16:58
Есть ли возможность в CoIDE делать отладку без подключения ST-Link?
Где не читал, везде пишут что только с подключенном ST-Link.

romanetz
11.12.2016, 17:32
На симуляторе камня что ли? Такое только в кейле есть.

Владимир_К
11.12.2016, 18:04
везде пишут что только с подключенном ST-Link.
Ну да.. А я еще видео в YouTube смотрел (искал почему у меня выводы по-другому расположены), а там товарищ говорит, что ST-Link надо покупать сразу несколько штук, ибо они часто "умирают". Вот я и озаботился, чтобы в симуляторе сначала. А то я пока с моим опытом отлажу программу, ST-Link не доживет:smile:.

Chin
11.12.2016, 18:20
Неплохо бы из такого дискавери сделать контроллер для, например, тюльпана DDC.

romanetz
11.12.2016, 18:28
И? Делайте. Будут вопросы - пишите в тему.

Chin
11.12.2016, 18:44
Спасибо за совет, очень актуально, без него не получится ничего)))))))

vadim_d
11.12.2016, 18:47
а там товарищ говорит, что ST-Link надо покупать сразу несколько штук, ибо они часто "умирают"
Самая частая причина гибели таких устройств - подключение на ходу при запитке отлаживаемого устройства от сетевого (лабораторного) источника питания, не имеющего подключения земли (минуса) выходного напряжения к защитной земле, общей с компьютером. Если эту причину устранить, то такие устройства практически неубиваемы и живут вечно :)

RA1AGB
11.12.2016, 19:25
что ST-Link надо покупать сразу несколько штук, ибо они часто "умирают".
Не все ST-Link и одинаково полезны . Оригинальный http://www.st.com/en/development-tools/st-link-v2.html служит без каких либо проблем уже 4-года. А вот в китайском варианте, сэкономили на защите, потому и результат такой. Есть даже вариант с опторазвязкой, называется ST-LINK/V2-ISOL. Тут каждый выбирает сам, или дешево или надежно.
Павел
RA1AGB

ut3ib
08.02.2017, 21:30
Плата MiNI-STM32-V3.1 с 2.8 TFT Color LCD Module
Требуется калибровка дисплея (большие погрешности по оси Х)
Прошу рекомендаций