Мигать светодиодом. ARM или не-ARM?
Re: ARM или не-ARM?
Вот еще инфа по семинарам о STM32F4. Завтра (по местному) посещу такой в Миннеаполисе. ST совмемстно с Avnet их каждый год проводит в нескольких местаx.p
http://www.em.avnet.com/en-us/design/trainingandevents/Pages/STMicroelectronics-STM32-Seminars.aspx
http://www.em.avnet.com/en-us/design/trainingandevents/Pages/STMicroelectronics-STM32-Seminars.aspx
- Реклама
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Вот и разница (как в сказке):
ждем отчета
Каждый участник получит комплект бесплатно STM32F401 Discovery.
ждем отчета
Re: ARM или не-ARM?
Отчитываюсь: в общем, было здорово. Это мой четвертый семинар с ST и самый лучший. В прошлом году тоже посетил семинар по STM32F429, но он прошел как-то скомкано, хотя лектор был тот-же самый. Может потому что тема графических драйверов под F429 требует больше времени, или у меня в этом опыта маловато, но как-то мало удалось железки руками пощупать под чутким руководством профессионалов и в коде удовлетворительно разобраться. Там тоже подарили демо-плату под F429, код был написан под SPL но как-то я в него не успел вникнуть как хотелось-бы. Разработка тогда была под IAR. В этот раз все было под Keil и посвящено DSP Audio. Вместо SPL использовали более новый подход, основанный на HAL и разработка его была под системой STM32CubeMX, простота работы с которой народ приятно впечатлила. Привез с семинара демо-плату для F401 и наушники, качество звука на ней меня потрясло не менее качества графики в прошлом году, а может даже и больше. Демо-программы, включая 10-полосный эквалайзер работали просто на ура. Правда, лектор признался, что эти демо-программы разрабатывала группа DSP экспертов фирмы для какой-то выставки. Не скажу, что я на этот раз в коде все понял, но начало положено. Кроме того, кормили завтраком и ланчем лучше - тоже приятно. Вот несколько фоток с семинара.
Здесь можно загрузить слайды презентации (~180 слайдов, около 11 МБ)
Здесь можно загрузить слайды презентации (~180 слайдов, около 11 МБ)
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Спасибо - очень познавательно.
Re: ARM или не-ARM?
Ser60 писал(а):Вместо SPL использовали более новый подход, основанный на HAL
Мля ... этот HAL лицезреть где либо можно? Или STM пошли по идиотскому пути , закрыв либы ?
....
....
О боже ... Это та срань что генерит куб ?
Это та же SPL, мало того теперь хомячки будут ее генерить тыканьем кнопок в кубе .
Да уж прогресс ...
- Реклама
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Да уж куб нагенерил - настройка одного таймера и RTC с прерываниями - после компиляции:
Program Size: Code=4096 RO-data=256 RW-data=24 ZI-data=1120
Зато сделал рабочий проект для Keil - у многих с этим трудности. Можно закоментировать #include "stm32f0xx_hal.h" и нету HALа - далее напрямую с железом.
Program Size: Code=4096 RO-data=256 RW-data=24 ZI-data=1120
Зато сделал рабочий проект для Keil - у многих с этим трудности. Можно закоментировать #include "stm32f0xx_hal.h" и нету HALа - далее напрямую с железом.
Re: ARM или не-ARM?
dosikus писал(а):Мля ... этот HAL лицезреть
HAL это гемор SPL в Кубе...
oleg110592 писал(а):Да уж куб нагенерил - настройка одного таймера и RTC с прерываниями - после компиляции:
Program Size: Code=4096 RO-data=256 RW-data=24 ZI-data=1120
Да уж... впечатляет...
Ты уж нас держи в курсе всех ново-извращений STM...
А как там с гибкостью настройки периферии... или в наличии только основное??? Хуже чем с SPL??? (лень ставить/смотреть)...
"Я не даю готовых решений, я заставляю думать!"(С)
Re: ARM или не-ARM?
Олег, еще раз спасибо за наводку на демо-плату от Cypress выше в этой теме. Получил ее, пойграюсь. Люблю на сон грядущий про новенькое почитать.
А насчет HAL, я сам больше люблю напрямую с железом пообщаться. Медленно, вдумчиво, и размеренно. Однако, насколько я понял, HAL становится стандартным подходом у многих производителей. В апреле и мае я посетил еще 2 аналогичных семинара (BlueTooth LE от Anaren и общий семинар TI с докладами на разные темы) и везде был свой HAL. Да и судя по разговорам с участниками семинаров, работающих в разных фирмах и использующие их продукцию - многие работают с HAL. Скорость выпуска продукции на рынок и гибкость ее адаптации под разные типы МК и прочего железа - одни из основных факторов. Куб, в частности генерирует код где есть зоны для вставки кода пользователя, которые куб гарантированно не будет трогать при переходе на другую модель МК в пределах фирмы. Я не агитирую всех переходить на SPL или HAL, каждый решит это для себя. Похоже, развитие софта для микроконтроллеров начинает идти по тому-же пути, что и для компьютеров. Вы когда-нибудь смотрели, например, на код для GUI, генерируемый Visual Studio? Или драйверы под видеокарты и другое железо, занимающие десятки мегабайт - неужели нельзя было сделать короче и каждая инструкция там действительно важна? Вопросы, конечно, риторические.
А насчет HAL, я сам больше люблю напрямую с железом пообщаться. Медленно, вдумчиво, и размеренно. Однако, насколько я понял, HAL становится стандартным подходом у многих производителей. В апреле и мае я посетил еще 2 аналогичных семинара (BlueTooth LE от Anaren и общий семинар TI с докладами на разные темы) и везде был свой HAL. Да и судя по разговорам с участниками семинаров, работающих в разных фирмах и использующие их продукцию - многие работают с HAL. Скорость выпуска продукции на рынок и гибкость ее адаптации под разные типы МК и прочего железа - одни из основных факторов. Куб, в частности генерирует код где есть зоны для вставки кода пользователя, которые куб гарантированно не будет трогать при переходе на другую модель МК в пределах фирмы. Я не агитирую всех переходить на SPL или HAL, каждый решит это для себя. Похоже, развитие софта для микроконтроллеров начинает идти по тому-же пути, что и для компьютеров. Вы когда-нибудь смотрели, например, на код для GUI, генерируемый Visual Studio? Или драйверы под видеокарты и другое железо, занимающие десятки мегабайт - неужели нельзя было сделать короче и каждая инструкция там действительно важна? Вопросы, конечно, риторические.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Чтобы оценить сложность работы 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 корпусе (всеми новичками любимом), которую можно втыкать типа в панельку многократно, только ноги у нас покрепче будут.
схема:

вид платы:

Файлы Орла:
Индикатор светодиодный есть такой - LFD039BSR - куплено 5 штук по ошибке (женой), зато с точечками, для часов самое то.

Сам микроконтроллер припаяем на отладочную плату, файлы которой в формате Eagle были найдены на просторах (не помню где - спасибо автору). Такая плата - односторонняя, может быть сделана утюжной технологией. Плата была сделана под микроконтроллер STM32F100, но нам пойдет, правда пара пинов порта F попало на питание (35 и 36 нога) - обойдемся, ног и так избыток.
Спаяв плату мы получим практически макро микросхему в DIP корпусе (всеми новичками любимом), которую можно втыкать типа в панельку многократно, только ноги у нас покрепче будут.
схема:
Спойлер

вид платы:
Спойлер

Файлы Орла:
Индикатор светодиодный есть такой - LFD039BSR - куплено 5 штук по ошибке (женой), зато с точечками, для часов самое то.
Спойлер

- КРАМ
- Друг Кота
- Сообщения: 25205
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: ARM или не-ARM?
oleg110592 писал(а):и программу писать на Си, пока с использованием великого и ужасного HAL, (потом можно будет написать и без, но интересно чем так страшен этот HAL)
Олег, я заранее извиняюсь перед тобой - ты все тут правильно делаешь, однако никто не называл HAL ужасным и великим.
Не передергивай. Речь шла лишь о том, что без HAL (или SPL) работа с STM32 для новичка становится совсем не тривиальной.
А при работе с оными абстракциями - проста, но бестолкова в плане обучения. Поскольку новичок не готов понять место абстракций в архитектуре, схемотехнике и алгоритме.
Часы - это очень хорошо, но решить вслед задачу НЕ ПОДДЕРЖАННУЮ либами он никогда не сможет.
Протеус тому подтверждение.
Народ выбирает не интересную элементную базу, а ту, которая есть в моделях Протеуса...
Еще раз извини за офф.
Продолжай.
Re: ARM или не-ARM?
КРАМ, ты уж извиняй нас дремучих. Но то что есть HAL (HardWare Abstraction Level) мы в курсах , где он вменяемый юзаем.
То что предоставили индусы от STM - полная бяка, и уж извиняй но юзать я сие отказываюсь.
Куб - с недельку потыкаю/поиграюсь , надо же знать чем хомячки дышат, но толку от него ноль...
То что предоставили индусы от STM - полная бяка, и уж извиняй но юзать я сие отказываюсь.
Куб - с недельку потыкаю/поиграюсь , надо же знать чем хомячки дышат, но толку от него ноль...
- КРАМ
- Друг Кота
- Сообщения: 25205
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: ARM или не-ARM?
И не продолжай, любезный dosikus...
Я не намерен поддерживать ни твой троллинг, ни твои комплексы.
Пусть лучше Олег делает полезное дело...
ЗЫ. Чтобы тебе быстрее остыть: я ПРИМЕНЯЮ СТМ32...
Я не намерен поддерживать ни твой троллинг, ни твои комплексы.
Пусть лучше Олег делает полезное дело...
ЗЫ. Чтобы тебе быстрее остыть: я ПРИМЕНЯЮ СТМ32...
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Речь шла лишь о том, что без 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 раз.
- КРАМ
- Друг Кота
- Сообщения: 25205
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: ARM или не-ARM?
Олег, а я с этим и не спорю.
Но нужно не обходить такие вопросы, а объяснять ПУТИ ИХ РЕШЕНИЯ.
Проблема не в незнании вообще, а в непонимании ОБЪЕМОВ этого незнания.
Либо начинающему наскучит бездумное тыканье, либо он изучит основы.
Простая архитектура в этом случае - хороший и БЛАГОДАРНЫЙ учебный полигон.
Но нужно не обходить такие вопросы, а объяснять ПУТИ ИХ РЕШЕНИЯ.
Проблема не в незнании вообще, а в непонимании ОБЪЕМОВ этого незнания.
Либо начинающему наскучит бездумное тыканье, либо он изучит основы.
Простая архитектура в этом случае - хороший и БЛАГОДАРНЫЙ учебный полигон.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Продолжим.
Что-бы приступить к программированию нарисуем схему - будет удобнее. Давно использую упрощенную посегментную индикацию - меньше деталей (заказчики вынуждают) да и лень паять 12 резисторов и 4 транзистора. Попробуем и здесь применить.
Поскольку первый проект должен быть "хэлло ворлд" (мигание светодиодом) а у нас в индикаторе есть два отдельных светодиода (точечки) - будем мигать точками.
Запускаем куб. Нажимаем новый проект. Выбираем наш микроконтроллер.

Слева видим список внутренней периферии (впечатляет), справа наш микроконтроллер в графическом виде. Клацаем на нужных нам ногах микроконтроллера (B11 и B12) и настраиваем на вывод.

Идем в Configuration и жмем GPIO - делаем опять настройки.

Идем Clock configuration и настраиваем тактовую частоту микроконтроллера на максимум 48 МГц (за что деньги плачены) включаем PLL x 12 - круто, обгоним стареньких.

Идем в меню Project -> Settings настраиваем пути и имя проекта.

Нажимаем в меню Project -> Generate code - куб начинает думать (медленно - на джаве написан) и наконец рапортует о создании проекта и предлагает открыть - открываем, запускается Keil (или что вы выбрали). Смотрим - все красиво в проекте разложено по папкам. Компилируем - все прекрасно компилируется. Запускаем дебаг и все запускается - настроено уже сразу под STLink. И так все внутри, в том числе и порты настроены, осталось написать код для мигания:
добавим три строчки кода:
Проверяем в железе и о чудо - все мигает. Ура.


исходник:
з.ы. Протеус в данном случае нервно курит в сторонке - благодаря отладчику и прекрасному иде Keil видим все процессы в реальном железе. Судя по темам в форумах AVR и PIC пользы от Протеуса нет никакой. В теме армов все красиво и культурно.
Что-бы приступить к программированию нарисуем схему - будет удобнее. Давно использую упрощенную посегментную индикацию - меньше деталей (заказчики вынуждают) да и лень паять 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 пользы от Протеуса нет никакой. В теме армов все красиво и культурно.
Re: ARM или не-ARM?
КРАМ писал(а):Проблема не в незнании вообще, а в непонимании ОБЪЕМОВ этого незнания.
Либо начинающему наскучит бездумное тыканье, либо он изучит основы.
Простая архитектура в этом случае - хороший и БЛАГОДАРНЫЙ учебный полигон.
Прекращай своё старческое нытьё...
Объёмы понимания/непонимания у нормального эмбэддера присутствуют постоянно...
Как там... "Чем больше я знаю..."(С)...
Простая архитектура, как и Васик. могут просто убить желание развиваться... тогда объёмы непонимания только возрастут...
Причина простая... не было желания и смысла что-то изучать... и состояние временной эйфории лихо разбивается об стену внезапных объёмов незнания... Пример... любители Кодэвижн не могут перейти на GCC или что-то другое... устойчивые комплексы...
И потом... многие не хотят учиться ездить на велосипеде... просто идут в автошколу...
"Я не даю готовых решений, я заставляю думать!"(С)
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
Продолжим.
Многие скажут не красиво так мигать светодиодом - во время HAL_Delay(500); микроконтроллер ничего не делает, не хорошо. Исправим сей недостаток - пусть мигает в прерывании, в это время (между прерываниями) можно делать много чего полезного. Заодно настроим остальные ноги микроконтроллера.

Увидим, что заняв ноги мы "убили" функции I2C и функции ног таймера 3. I2C нам не пригодится, а таймеров еще немеряно. Используем тогда таймер 3 для прерываний - прерываться будем раз в 0.5 сек или 500 мс, чтоб инвертировать B11. Настраиваем таймер:
Прерывание таймера:
Основной цикл пока пустой - там теперь можно решать супер-пупер задачи, а точечки будут независимо мигать.
Компилируем, запускаем - опять мигает, да что же это за HAL такой - просто наХАЛ. И не надо никаких протеусов - можем остановить выполнение программы в любой момент, посмотреть регистры и много много чего, а впрочем, "это уже совсем другая история".
Пока время для конструкции выходного дня закончилось, но продолжение будет...
Многие скажут не красиво так мигать светодиодом - во время 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
}Прерывание таймера:
Код: Выделить всё
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_11);
}Основной цикл пока пустой - там теперь можно решать супер-пупер задачи, а точечки будут независимо мигать.
Компилируем, запускаем - опять мигает, да что же это за HAL такой - просто наХАЛ. И не надо никаких протеусов - можем остановить выполнение программы в любой момент, посмотреть регистры и много много чего, а впрочем, "это уже совсем другая история".
Пока время для конструкции выходного дня закончилось, но продолжение будет...
Re: ARM или не-ARM?
Писец... беспросветный...
Это ж сколько надо бестолковых букв набить...
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
и ради чего???
Но ИМХО главный ахтунг впереди... и как понять какому таймеру это принадлежит... ну совсем как бы неочевидно...
Бесплатная прокачка мусора через мозг...
Это ж сколько надо бестолковых букв набить...
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
и ради чего???
Но ИМХО главный ахтунг впереди... и как понять какому таймеру это принадлежит... ну совсем как бы неочевидно...
Бесплатная прокачка мусора через мозг...

"Я не даю готовых решений, я заставляю думать!"(С)
- КРАМ
- Друг Кота
- Сообщения: 25205
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: ARM или не-ARM?
HHIMERA писал(а):Писец... беспросветный...![]()
...главный ахтунг впереди... и как понять какому таймеру это принадлежит...
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: ARM или не-ARM?
тоже сразу зацепил этот вопрос - там в файле stm32f0xx_it.c есть обработчик:и как понять какому таймеру это принадлежит
Код: Выделить всё
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&htim3);
}можно и там все делать или перенести в 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, насколько помню (делал один проект, нашару даже отладчик остался), тоже нет такого безобразия.
Для примера настройка порта и таймера авр:
Спойлер
Код: Выделить всё
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Port B initialization
// Function: Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=(1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 9,984 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x4D;
OCR0B=0x00;

