STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):Попробуй эти функции заменить на:
Подключил

Код: Выделить всё

#include "stm32f0xx_syscfg.h"
Заменил строчки на предложенные,
Исправил их на такие:

Код: Выделить всё

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);
И проект скомпилировался.
Прошивать не пробовал, т.к. нужно еще с номерами ножек кнопок и светодиодов разобраться.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

А еще вопрос...
Есть ли варианты обработки прерываний? Например, без учета приоритетов прерываний.
Мне в прерывании нужно просто увеличить или уменьшить переменную счетчика.
Вот как сделать так, чтобы это действие занимало минимум тактов процессора.
В любом случае через NVIC?
Т.е. даже в простейшем варианте вызывается функция прерывания с учетом приоритетов, я в этой функции выполняю нужное действие и сбрасываю флаг,.. так?

Знаю, что можно сделать аппаратный счетчик из таймера, но в этом подходе много подводных камней.

И еще... я запутался с привязкой прерываний к портам.
Можно ли сделать так, что прерывание будет возникать при изменении состояния ножки PA0,
но не будет возникать при изменении состояния ножек PB0, PC0 и т.п?
Например, если у меня таймер генерирует сигнал на ножки PD0, PD1, PD2, PD3,
а я хочу, чтобы возникало прерывание при внешнем изменении состояния ножки PA0, но при этом, чтобы на прерывание не влиял таймер выводящий сигнал на PD0?
Для этого придется в процедуре обработки прерывания проверять флаг порта, вызвавшего прерывание?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):Есть ли варианты обработки прерываний? Например, без учета приоритетов прерываний.
По умолчанию все прерывания имеют одинаковый приоритет. Вот тут
NVIC_SetPriority(EXTI1_IRQn, 2);
я меняю приоритет прерывания для второй кнопки.
michael-yurov писал(а):Т.е. даже в простейшем варианте вызывается функция прерывания с учетом приоритетов, я в этой функции выполняю нужное действие и сбрасываю флаг,.. так?
Не совсем. Функция обработчика вызовется, но вот когда - зависит от приоритета прерывания и от наличия других активных прерываний.
Да, после сброса флага можно будет "словить" другое такое прерывания.
michael-yurov писал(а):Знаю, что можно сделать аппаратный счетчик из таймера, но в этом подходе много подводных камней.
пока ничего не понял. Какой счётчик? Что считать?
michael-yurov писал(а):Можно ли сделать так, что прерывание будет возникать при изменении состояния ножки PA0,
но не будет возникать при изменении состояния ножек PB0, PC0 и т.п?
В процессоре есть специальный мультиплексор. Вот этими командами
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);
я как раз с его помощью и подключаю ногу PA0 к линии прерывания EXTI0 и PA1 к EXTI1.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):По умолчанию все прерывания имеют одинаковый приоритет.
А если мне наплевать на приоритеты, но важно, чтобы обработка прерывания заняла минимальное время, можно ли чем то пожертвовать, ради экономии хотя бы одного такта?
UAVpilot писал(а):пока ничего не понял. Какой счётчик? Что считать?
Ой, это отдельная проблемная история, с которой я пока не хочу связываться.
UAVpilot писал(а):я как раз с его помощью и подключаю ногу PA0 к линии прерывания EXTI0 и PA1 к EXTI1.
Так все таки, после этого действия, прерывание будет возникать только при изменении состояния первой или нулевой ноги на порту "A"
и нулевые и первые ноги на других портах не вызовут это прерывание?
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Да, еще! Выяснил, почему у меня не работал прошиватель прямо из CoIDE,
оказалось, я установил CoFlash не в ту же папку, что CoIDE (C:\CooCox) , а в C:\Program Files (x86)\CoFlash\
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Прошил этой программой STM32F4DISCOVERY
Исправлял по мелочи. РАБОТАЕТ, мигает, прерывания срабатывают!
Буду дальше разбираться. Завтра.
СПАСИБО!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):А если мне наплевать на приоритеты, но важно, чтобы обработка прерывания заняла минимальное время, можно ли чем то пожертвовать, ради экономии хотя бы одного такта?
Произошло прерывание - вызвали твой обработчик. Чем тут можно пожертвовать. :)
Если наплевать на приоритеты, то обработка прерывания будет занимать минимальное время, но если не случится других прерываний. Т.е. ты либо гарантируешь отсутствие других прерываний, либо используешь приоритеты. :)

Так все таки, после этого действия, прерывание будет возникать только при изменении состояния первой или нулевой ноги на порту "A"
и нулевые и первые ноги на других портах не вызовут это прерывание?
Нет, подключается конкретная нога конкретного порта. Неподключенные к контроллеру прерываний ноги прерываний не вызывают.
Ещё нужно учитывать, что например к линии EXTI0 можно подключать только PA0, PB0, PC0, ... и нельзя подключить другие ноги. Т.е. нельзя например PA2 подключить к EXTI5.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):Если наплевать на приоритеты, то обработка прерывания будет занимать минимальное время, но если не случится других прерываний. Т.е. ты либо гарантируешь отсутствие других прерываний, либо используешь приоритеты.
А как в CoIDE можно посмотреть, сколько тактов выполняется то или иное действие?
UAVpilot писал(а):Нет, подключается конкретная нога конкретного порта. Неподключенные к контроллеру прерываний ноги прерываний не вызывают.
Круто! Мне нравится STM32!
UAVpilot писал(а):Ещё нужно учитывать, что например к линии EXTI0 можно подключать только PA0, PB0, PC0, ... и нельзя подключить другие ноги. Т.е. нельзя например PA2 подключить к EXTI5.
Это я понял.
Также понял, что ноги начиная с 5 уже объединяются с соседними, и в процедуре обработки уже будет нужно разбираться, какая именно нога его вызвала. И понял, что на одной линии прерывания обычно висит несколько разных устройств, и нужно либо исключать одновременное использование, либо разбираться, кто именно вызвал прерывание.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):А как в CoIDE можно посмотреть, сколько тактов выполняется то или иное действие?
Скорее всего никак. Просто сдением документации - там можно раскопать сколько тактов занимает каждая команда. :)
Да и такты, а циклы синхронизации - это несколько иное.
Конкретно по прерываниям: первая инструкция обработчика выполняется спустя 12 циклов (сохранение регистров, доставание адреза обработчика и т.п.), возврат - аналогично.
michael-yurov писал(а):и нужно либо исключать одновременное использование, либо разбираться, кто именно вызвал прерывание.
Просто обработчик первым делом опрашивает состояние перефирийных блоков подключённых к одной линии прерывания и выясняет какои именно вызвал прерывание.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot, А чем отличается EXTI_ClearITPendingBit(EXTI_Line0); от EXTI_ClearFlag(EXTI_Line0);
Описание у практически одинаковое

* @brief Clears the EXTI's line pending bits.
* @param EXTI_Line: specifies the EXTI lines to clear.
* This parameter can be any combination of EXTI_Linex where x can be (0..22)
* @retval None


* @brief Clears the EXTI's line pending flags.
* @param EXTI_Line: specifies the EXTI lines flags to clear.
* This parameter can be any combination of EXTI_Linex where x can be (0..22)
* @retval None
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Ничем. У них и внутренности одинаковые.
Просто некоторым нравится биты сбрасывать, а некоторым флаги очищать - почему-бы не уважить и тех и других? :)
Тем более, что по ресурсам это всего лишь несколько лишних байт на диске PC.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot, А нет ли у тебя какой-нибудь простейшей платки для Cortex-M3 на 48 ножек?
Мне для STM32F100C8T6B или STM32F100C4T6B
Или ссылки на что-то подобное. (я встречал, но найти не могу снова)

Или просто, скажи, какие ножки как нужно развести, чтобы правильно подать питание, подключить кварц, и вывести линии на разъем для программирования.
Я ни разу не делал этого и боюсь, что что-то забуду.

В основном волнует - какие линии нужно вывести для программатора.

Могу картинку нарисовать, как я это представляю, чтобы можно было проверить и поправить меня.

Я так понимаю, что нужно смотреть вот на эти выделенные цветом ножки:
Untitled-1.png (3341 просмотр) <a class='original' href='./download/file.php?id=15393&sid=2b4bae8a666f994cef48bb8aa61f562e&mode=view' target=_blank>Загрузить оригинал (160.69 КБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Ну да, этого в принципе достаточно. Вообще вся информация есть в даташите: http://www.st.com/web/catalog/mmc/FM141 ... 5/PF216839
на стр. 12/88 есть общая блоксхема, на ней обозначены всевозможные выводы разных блоков МК, сюта можно смотреть, чтоб ничего не забыть.
на стр. 24/88 начинается таблица соответствия сигналов МК номерам ног.
на стр. 31/88 и чуть ниже описано как надо подавать питание (блокировочных конденсаторов много не бывает :) )
со страницы 44/88 начинается описание как подключать кварцы и т.п.
Ну и там ниже про ресет и всё остальное.
С JTAG/SWD тоже просто - находишь распиновку своего программатора или нагугливаешь общепринятую, там есть названия сигналов, которые ты найдёшь в таблице на 24/88.

Рисуй схему, глянем. Только давай в pdf или картинкой.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):Ну и там ниже про ресет и всё остальное.
А зачем он нужен?
Т.е. он нужен для программирования?, или для чего-то еще?
Что мне с ним делать то на плате в плане подключения?
UAVpilot писал(а):С JTAG/SWD тоже просто
А нужен ли он мне? Отлаживать я пока не умею, да и не представляю, как это можно сделать для программ, работающих в реальном времени. Мне бы просто запрограммировать.

Хотелось бы сначала сделать более/менее рабочий вариант платы, а потом уже разбираться, зачем это мне нужно. :hehehe:

Там вот 2 разных ресета,
куча разных пинов питания,
пин для батарейного питания...
Что с этим со всем делать?

Т.е. куда плюс, куда ноль, и куда блокировочные конденсаторы, я, вроде, понимаю...
Как кварц подключить - тоже ясно,
а что вот с пином батарейного питания делать?
Что с ресетами?
С разъемом SWD, вроде бы, понял, что куда.

Я понимаю, что все это написано, но мне пока тяжеловато все это переварить.
А информации то мне в итоге нужно не так уж много.
Последний раз редактировалось michael-yurov 13 июн 2013, 00:22, всего редактировалось 1 раз.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

О! что-то нашел на более понятном языке:
http://chipspace.ru/stm32-discovery-st-link/
http://habrahabr.ru/post/125994/
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):А зачем он нужен?
Ну если не нужен, то подтянуть к 1, чтоб всякие помехи не ресетили МК.
michael-yurov писал(а):А нужен ли он мне? Отлаживать я пока не умею, да и не представляю, как это можно сделать для программ, работающих в реальном времени. Мне бы просто запрограммировать.
Ну так через него программируют. :)
michael-yurov писал(а):Там вот 2 разных ресета,
куча разных пинов питания,
пин для батарейного питания...
Что с этим со всем делать?
Для ядра и для АЦП может использоваться разное питание.
Батарейка нужна если надо, чтоб аппаратные часы тикали и без питания.
michael-yurov писал(а):Я понимаю, что все это написано, но мне пока тяжеловато все это переварить.
А информации то мне в итоге нужно не так уж много.
Привыкай читать даташиты, хотя-бы по диагонали. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11625
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):Ну если не нужен, то подтянуть к 1, чтоб всякие помехи не ресетили МК.
Ок, ясно, подтяну к «1».
Оба сброса подтянуть к единице? И NRST и BOOT0?
UAVpilot писал(а):Батарейка нужна если надо, чтоб аппаратные часы тикали и без питания.
С этим выводом нужно что-то делать? К питанию подключать, или к нолю?
UAVpilot писал(а):Привыкай читать даташиты, хотя-бы по диагонали.
Я уже давно привык, но здесь даташиты ужасные - все в разных местах, И невозможно понять, что относится к твоему микроконтроллеру, а что к другим контроллерам этого семейства. Жуть просто. Того что нужно нет, а того, что не нужно - 95%.

Решил вырезать платку из этой статьи: http://habrahabr.ru/post/125994/
Платка оказалась ужасная, корявая и косячная.
Я ее поправил до приемлемого состояния. Может быть кому-то пригодится (в архиве есть вектор в DXF и файл Corel):
STM32_LQFP48.zip
(630.16 КБ) 372 скачивания
плата.png (3254 просмотра) <a class='original' href='./download/file.php?id=15412&sid=2b4bae8a666f994cef48bb8aa61f562e&mode=view' target=_blank>Загрузить оригинал (273.94 КБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):Оба сброса подтянуть к единице? И NRST и BOOT0?
Да.
michael-yurov писал(а):С этим выводом нужно что-то делать? К питанию подключать, или к нолю?
Если эти часы не используешь, то никуда не подключай.
michael-yurov писал(а):Я уже давно привык, но здесь даташиты ужасные - все в разных местах, И невозможно понять, что относится к твоему микроконтроллеру, а что к другим контроллерам этого семейства. Жуть просто. Того что нужно нет, а того, что не нужно - 95%.
Да ладно! Одни из самых вменяемых даташитов. Попробуй по CPLD/FPGA почитать, вот где ребус-то - jtag в одном наборе даташитов, питалово в другом, тактирование в третьем, и т.д. и в каждом наборе надо ещё "фильтровать базар" по линейкам чипов, а в пределах линейки ещё и по корпусам. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6192
Откуда: Казахстан.
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение aftaev »

Ноги у STM32 слаботочные или как, SMD светодиоды на них можно напрямую повесить?
Сколько можно светодиодов повесить на каждую ногу STM32?
100 светодиодов потянет, по одному светодиоду на одной ноге STM32 ?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Impartial »

aftaev писал(а):100 светодиодов потянет, по одному светодиоду на одной ноге STM32 ?
Потянет, если ток через каждый будет 0,25ма.
Ответить

Вернуться в «Электроника»