Отчитываюсь: в общем, было здорово. Это мой четвертый семинар с ST и самый лучший. В прошлом году тоже посетил семинар по STM32F429, но он прошел как-то скомкано, хотя лектор был тот-же самый. Может потому что тема графических драйверов под F429 требует больше времени, или у меня в этом опыта маловато, но как-то мало удалось железки руками пощупать под чутким руководством профессионалов и в коде удовлетворительно разобраться. Там тоже подарили демо-плату под F429, код был написан под SPL но как-то я в него не успел вникнуть как хотелось-бы. Разработка тогда была под IAR. В этот раз все было под Keil и посвящено DSP Audio. Вместо SPL использовали более новый подход, основанный на HAL и разработка его была под системой STM32CubeMX, простота работы с которой народ приятно впечатлила. Привез с семинара демо-плату для F401 и наушники, качество звука на ней меня потрясло не менее качества графики в прошлом году, а может даже и больше. Демо-программы, включая 10-полосный эквалайзер работали просто на ура. Правда, лектор признался, что эти демо-программы разрабатывала группа DSP экспертов фирмы для какой-то выставки. Не скажу, что я на этот раз в коде все понял, но начало положено. Кроме того, кормили завтраком и ланчем лучше - тоже приятно. Вот несколько фоток с семинара. Спойлер Здесь можно загрузить слайды презентации (~180 слайдов, около 11 МБ)
Да уж куб нагенерил - настройка одного таймера и RTC с прерываниями - после компиляции: Program Size: Code=4096 RO-data=256 RW-data=24 ZI-data=1120 Зато сделал рабочий проект для Keil - у многих с этим трудности. Можно закоментировать #include "stm32f0xx_hal.h" и нету HALа - далее напрямую с железом.
Да уж куб нагенерил - настройка одного таймера и RTC с прерываниями - после компиляции: Program Size: Code=4096 RO-data=256 RW-data=24 ZI-data=1120
Да уж... впечатляет... Ты уж нас держи в курсе всех ново-извращений STM... А как там с гибкостью настройки периферии... или в наличии только основное??? Хуже чем с SPL??? (лень ставить/смотреть)...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Олег, еще раз спасибо за наводку на демо-плату от Cypress выше в этой теме. Получил ее, пойграюсь. Люблю на сон грядущий про новенькое почитать. Спойлер А насчет HAL, я сам больше люблю напрямую с железом пообщаться. Медленно, вдумчиво, и размеренно. Однако, насколько я понял, HAL становится стандартным подходом у многих производителей. В апреле и мае я посетил еще 2 аналогичных семинара (BlueTooth LE от Anaren и общий семинар TI с докладами на разные темы) и везде был свой HAL. Да и судя по разговорам с участниками семинаров, работающих в разных фирмах и использующие их продукцию - многие работают с HAL. Скорость выпуска продукции на рынок и гибкость ее адаптации под разные типы МК и прочего железа - одни из основных факторов. Куб, в частности генерирует код где есть зоны для вставки кода пользователя, которые куб гарантированно не будет трогать при переходе на другую модель МК в пределах фирмы. Я не агитирую всех переходить на SPL или HAL, каждый решит это для себя. Похоже, развитие софта для микроконтроллеров начинает идти по тому-же пути, что и для компьютеров. Вы когда-нибудь смотрели, например, на код для GUI, генерируемый Visual Studio? Или драйверы под видеокарты и другое железо, занимающие десятки мегабайт - неужели нельзя было сделать короче и каждая инструкция там действительно важна? Вопросы, конечно, риторические.
Чтобы оценить сложность работы c микроконтроллерами на ядре ARM, в сравнении с другими микроконтроллерами, попробуем написать часы наподобие ув. BOB51, тему которого я так испоганил (тема уже подчищена - спасибо модератору). Только часы будем делать на светодиодном индикаторе (как и положено часам, шобы издалека видно было) и программу писать на Си, пока с использованием великого и ужасного HAL, (потом можно будет написать и без, но интересно чем так страшен этот HAL). Для начала возьмем рядовой микроконтроллер STM32F051C6T6, 48 ножек, корпус LQFP48, 32K FLASH , 8K RAM. Покупаем недорого у нашей жлобской конторы на радиорынке (от 1 шт 26,75 Грн.). Избыточно, но потом (в серийном изделии ) можно применить более дешевый STM32F030C6 (цена тут посмотреть: http://ru.farnell.com/stmicroelectronic ... dp/2393632) или в меньшем корпусе еще дешевле. Ближайший конкурент из старичков, например Atmel AVR - ATmega324PA-AU (хотя бы по по размеру FLASH 32K, правда 2K RAM), стоит от 1 шт 36,75 Грн. Разницу в цене используем в личных целях - выпить там пивка иль 100 грамм - должно хватить . Сам микроконтроллер припаяем на отладочную плату, файлы которой в формате Eagle были найдены на просторах (не помню где - спасибо автору). Такая плата - односторонняя, может быть сделана утюжной технологией. Плата была сделана под микроконтроллер STM32F100, но нам пойдет, правда пара пинов порта F попало на питание (35 и 36 нога) - обойдемся, ног и так избыток. Спаяв плату мы получим практически макро микросхему в DIP корпусе (всеми новичками любимом), которую можно втыкать типа в панельку многократно, только ноги у нас покрепче будут. схема: Спойлер вид платы: Спойлер Файлы Орла:
и программу писать на Си, пока с использованием великого и ужасного HAL, (потом можно будет написать и без, но интересно чем так страшен этот HAL)
Олег, я заранее извиняюсь перед тобой - ты все тут правильно делаешь, однако никто не называл HAL ужасным и великим. Не передергивай. Речь шла лишь о том, что без HAL (или SPL) работа с STM32 для новичка становится совсем не тривиальной. А при работе с оными абстракциями - проста, но бестолкова в плане обучения. Поскольку новичок не готов понять место абстракций в архитектуре, схемотехнике и алгоритме. Часы - это очень хорошо, но решить вслед задачу НЕ ПОДДЕРЖАННУЮ либами он никогда не сможет. Протеус тому подтверждение. Народ выбирает не интересную элементную базу, а ту, которая есть в моделях Протеуса... Еще раз извини за офф. Продолжай.
КРАМ, ты уж извиняй нас дремучих. Но то что есть HAL (HardWare Abstraction Level) мы в курсах , где он вменяемый юзаем. То что предоставили индусы от STM - полная бяка, и уж извиняй но юзать я сие отказываюсь. Куб - с недельку потыкаю/поиграюсь , надо же знать чем хомячки дышат, но толку от него ноль...
И не продолжай, любезный dosikus... Я не намерен поддерживать ни твой троллинг, ни твои комплексы. Пусть лучше Олег делает полезное дело... ЗЫ. Чтобы тебе быстрее остыть: я ПРИМЕНЯЮ СТМ32...
Речь шла лишь о том, что без HAL (или SPL) работа с STM32 для новичка становится совсем не тривиальной.
Для местных новичков не только стм32 а все остальное тоже не тривиально - стоит посмотреть заголовки форума, например AVR и ужаснуться:
Цитата:
.... Проблема с AVR910 (не могу прошить) PORTx сбрасываются в 0 (ATmega88PA) UART постоянно шлет мусор в TXD АЦП в ATTINY13 настройка Ищу проект часов на ATMega48 Attiny2313A-SU страшный глюк Программатор для avr uniprof неопознает atmega8a.! Не работает. Первый запуск. Помогите настроить таймер 1 на AT90USB162 Ацп (ADC0) atmega8 нуждаюсь в помощи Помогите с проектом на attiny 2313A-PU. Не работает параллельное программирование в Dragon AVR. ...
речь идет не о новичках а людях которые что-то могут - тема то изначально была в теме BOB51, а он с опытом
Последний раз редактировалось oleg110592 Вс июн 29, 2014 11:32:39, всего редактировалось 1 раз.
Олег, а я с этим и не спорю. Но нужно не обходить такие вопросы, а объяснять ПУТИ ИХ РЕШЕНИЯ. Проблема не в незнании вообще, а в непонимании ОБЪЕМОВ этого незнания. Либо начинающему наскучит бездумное тыканье, либо он изучит основы. Простая архитектура в этом случае - хороший и БЛАГОДАРНЫЙ учебный полигон.
Продолжим. Что-бы приступить к программированию нарисуем схему - будет удобнее. Давно использую упрощенную посегментную индикацию - меньше деталей (заказчики вынуждают) да и лень паять 12 резисторов и 4 транзистора. Попробуем и здесь применить.
Поскольку первый проект должен быть "хэлло ворлд" (мигание светодиодом) а у нас в индикаторе есть два отдельных светодиода (точечки) - будем мигать точками. Запускаем куб. Нажимаем новый проект. Выбираем наш микроконтроллер. Спойлер Слева видим список внутренней периферии (впечатляет), справа наш микроконтроллер в графическом виде. Клацаем на нужных нам ногах микроконтроллера (B11 и B12) и настраиваем на вывод. Спойлер Идем в Configuration и жмем GPIO - делаем опять настройки. Спойлер Идем Clock configuration и настраиваем тактовую частоту микроконтроллера на максимум 48 МГц (за что деньги плачены) включаем PLL x 12 - круто, обгоним стареньких. Спойлер Идем в меню Project -> Settings настраиваем пути и имя проекта. Спойлер Нажимаем в меню Project -> Generate code - куб начинает думать (медленно - на джаве написан) и наконец рапортует о создании проекта и предлагает открыть - открываем, запускается Keil (или что вы выбрали). Смотрим - все красиво в проекте разложено по папкам. Компилируем - все прекрасно компилируется. Запускаем дебаг и все запускается - настроено уже сразу под STLink. И так все внутри, в том числе и порты настроены, осталось написать код для мигания: добавим три строчки кода:
Код:
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_12); // делаем единицу на В12 //бесконечный цикл while (1) { HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_11); // инвертируем пин В11 HAL_Delay(500); // задержка 500 мс }
Проверяем в железе и о чудо - все мигает. Ура. Спойлер исходник:
з.ы. Протеус в данном случае нервно курит в сторонке - благодаря отладчику и прекрасному иде Keil видим все процессы в реальном железе. Судя по темам в форумах AVR и PIC пользы от Протеуса нет никакой. В теме армов все красиво и культурно.
Проблема не в незнании вообще, а в непонимании ОБЪЕМОВ этого незнания. Либо начинающему наскучит бездумное тыканье, либо он изучит основы. Простая архитектура в этом случае - хороший и БЛАГОДАРНЫЙ учебный полигон.
Прекращай своё старческое нытьё... Объёмы понимания/непонимания у нормального эмбэддера присутствуют постоянно... Как там... "Чем больше я знаю..."(С)... Простая архитектура, как и Васик. могут просто убить желание развиваться... тогда объёмы непонимания только возрастут... Причина простая... не было желания и смысла что-то изучать... и состояние временной эйфории лихо разбивается об стену внезапных объёмов незнания... Пример... любители Кодэвижн не могут перейти на GCC или что-то другое... устойчивые комплексы... И потом... многие не хотят учиться ездить на велосипеде... просто идут в автошколу...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Продолжим. Многие скажут не красиво так мигать светодиодом - во время HAL_Delay(500); микроконтроллер ничего не делает, не хорошо. Исправим сей недостаток - пусть мигает в прерывании, в это время (между прерываниями) можно делать много чего полезного. Заодно настроим остальные ноги микроконтроллера. Спойлер Увидим, что заняв ноги мы "убили" функции I2C и функции ног таймера 3. I2C нам не пригодится, а таймеров еще немеряно. Используем тогда таймер 3 для прерываний - прерываться будем раз в 0.5 сек или 500 мс, чтоб инвертировать B11. Настраиваем таймер:
Код:
/* TIM3 init function */ void MX_TIM3_Init(void) { htim3.Instance = TIM3; htim3.Init.Prescaler = 48000-1; // делим 48МГц на 48000 получаем 1000 Гц или 1 мс htim3.Init.CounterMode = TIM_COUNTERMODE_UP; // таймер считает вверх htim3.Init.Period = 500-1; // считать будет до 500, т.е. через 500 мс произойдет прерывание htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // частоту входную не делим - нам хватает HAL_TIM_Base_Init(&htim3); /*##-2- Start the TIM Base generation in interrupt mode ####################*/ /* Start Channel1 */ HAL_TIM_Base_Start_IT(&htim3); // настраиваем прерывания таймера 3 }
Основной цикл пока пустой - там теперь можно решать супер-пупер задачи, а точечки будут независимо мигать. Компилируем, запускаем - опять мигает, да что же это за HAL такой - просто наХАЛ. И не надо никаких протеусов - можем остановить выполнение программы в любой момент, посмотреть регистры и много много чего, а впрочем, "это уже совсем другая история". Пока время для конструкции выходного дня закончилось, но продолжение будет...
и ради чего??? Но ИМХО главный ахтунг впереди... и как понять какому таймеру это принадлежит... ну совсем как бы неочевидно... Бесплатная прокачка мусора через мозг...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
можно и там все делать или перенести в main, но почему-то в примере так было. Не нашел информации в документации как это правильно делать, если прерываний от таймеров несколько. Не нашел описания как работать с этим новым HAL, в SPL с этим получше. В общем ощущение с новым HAL еще все очень сыро - обкатывают на народе. Полного управления всем железом нет - например функций таймера в режиме энкодера пока нет, в документации наметки есть. Использовать имхо еще рано. Делали бы библиотеку уже на си++ как в ардуине.
Продолжим. Проверим не потеряли мы ли контроль над железом - отказываемся от услуг HAL, настраиваем периферию напрямую:
Код:
//======================= // TIM3 Interrupt Handler //======================= void TIM3_IRQHandler(void) { if(TIM3->SR & TIM_SR_UIF) // if UIF flag is set { TIM3->SR &= ~TIM_SR_UIF; // clear UIF flag GPIOB->ODR ^=GPIO_ODR_11; } }
int main(void) { //HAL_Init();
/* Configure the system clock */ SystemClock_Config();
/* System interrupt init*/ //HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/* GPIOB Periph clock enable */ RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIOB->MODER |= (GPIO_MODER_MODER11_0 | GPIO_MODER_MODER12_0) ; /* Configure PB11 and PB12 output mode */ GPIOB->OTYPER &= ~(GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_12) ; // Ensure push pull mode selected--default GPIOB->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR11|GPIO_OSPEEDER_OSPEEDR12); //Ensure maximum speed setting (even though it is unnecessary) GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPDR11|GPIO_PUPDR_PUPDR12); //Ensure all pull up pull down resistors are disabled GPIOB->BSRRL = GPIO_BRR_BR_12; // Set /* TIM3 clock enable */ RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; TIM3->PSC = 48000 - 1; // Set prescaler to 48000 = 48 000 000Hz/48000 = 1000 Hz = 1 ms TIM3->ARR = 500 - 1; // Auto reload value 500 = 500mS TIM3->DIER = TIM_DIER_UIE; // Enable update interrupt (timer level) TIM3->CR1 = TIM_CR1_CEN; // Enable timer NVIC_EnableIRQ(TIM3_IRQn); // Enable interrupt from TIM3 (NVIC level)
while (1) {
} }
Проверяем - точки мигают. Ну и в принципе непонятно, почему считается настройка периферии в стм32 сложной, по сравнению с авр пик ... Наоборот у авр и пик такой разнобой в периферии - у новичка должна кружиться голова. Недавно тут начинающий не знал, что у тини13 внутренний генератор 9.6 МГц, обычно то - 8 МГц. У MSP430, насколько помню (делал один проект, нашару даже отладчик остался), тоже нет такого безобразия. Для примера настройка порта и таймера авр: Спойлер
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения