STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Chip115 »

isx писал(а):Я так и сделал, просто думал может там есть что-то типа флага, который фиксирует от какого фронта произошло оно... :dont_know:
Фронт только один. front переводится как перед, передний. А то, что многие называют "задний фронт" - это является спадом или срезом.
Прерывание по фронту, прерывание по спаду, а "задний фронт" вызывает усмешку у грамотных людей. Бомбануло. Ну реально, бесит.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Chip115 писал(а): Ну реально, бесит.
Плюсую , тем более в оригинале ни о каких фронтах и речи нет . Edge грань , спад и подъем ...
Реклама
alexf58
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

Re: STM32 новичку в ARM что к чему

Сообщение alexf58 »

Абсолютно согласен насчет фронта и спада. Но не меньше бесит то, что очень многие не знают что глагол "пользовать" означает ЛЕЧИТЬ. А не использовать или пользоватьСЯ.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Chip115 писал(а):а "задний фронт" вызывает усмешку у грамотных людей.
Не знал :dont_know: . Просто как начал изучать по статьям программирование МК, так и засело в голове. В даташатах и мануалах обычно используются "rise" и "fall".

Как всё таки сделать прервание по изменению счётчика энкодера? Мне начинает казаться, что это невозможно.
И вообще, сижу я тут и размышляю: можно ведь просто, взять два канала внешних прерываний и подцепить туда энкодер, сделать прерывание по изменению лог состояния каждого из выводов и обработать направление вращения с помощью операций сравнения и двух исключающих "или". Неужели этот код будет заметно уступать по быстродействию аппаратному энкодеру? Стоило ли из-за этого создавать отдельный интерфейс?

И ещё вопрос :) .
Как всегда, теоретические рассуждения встретились с практикой.
Появилась задача записать в нулевой бит переменной значение GPIOA->IDR & GPIO_IDR_0, а в первый бит значение GPIOA->IDR & GPIO_IDR_1. В АВР было просто: обратился к PINA.0, он тебе выдал текущее значение этого пина (лог0 или лог1), а тут возвращается либо лог0, либо номер пина. Можно конечно замутить структуры из IF или SWITCH для преобразования в единицу значения, отличного от нуля, но может есть более изящный и менее затратный по ресурсам способ?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

isx,

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

temp =(GPIOA->IDR) & 0x0003
В АВР было просто:
AVR это диагноз...
Реклама
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

dosikus писал(а):temp =(GPIOA->IDR) & 0x0003
Ооо.. Спасибо, я а то чёт не допёр :) .
dosikus писал(а):AVR это диагноз...
Ну, знаете ли, всё когда-то с чего-то начинали, хотя я иногда ими ещё пользуюсь (если нужна возможность заменить чип без пайки) :roll:
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

isx, не обращай внимания - это мысли вслух... :)))
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Блин, я с этим энкодером весь вымотался... :facepalm:
Решил сделать прерывание по переполнению. Поставил ARR в 1 (при нуле совсем прерывания не работают), в итоге прерывание срабатывает в одну сторону за 1/4 щелчка, а в другую за 1/2. Если изначально переполнить таймер, то прерывание возникнет только при совпадении значений CNT и ARR.
Похоже надо завязывать с этим....
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: STM32 новичку в ARM что к чему

Сообщение Pavel_1978 »

Блин все украдено, тоесть написано до нас : http://chipenable.ru/index.php/how-conn ... oller.html
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

У меня вопрос по аппаратному интерфейсу был...
Так и не найдя решения этой проблемы подключил энкодер через внешние прерывания. Теперь прерывание генерится каждые 1/4 щелчка :) .
Обработчик прерывания (может кому пригодится):

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

void EXTI0_1_IRQHandler(void)
   {
	
		  EXTI->PR |= EXTI_PR_PR0;
			EXTI->PR |= EXTI_PR_PR1; 
			                
	newbits = (GPIOA->IDR) & 0x0003;										
	dir = (newbits & 1) ^ (oldbits >> 1);
	oldbits = newbits;
		 if (dir) {counter1++;} else {counter1--;};		 
 
   }
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

а пример энкодера из снипетсов для F0 (папка \10_EncoderInterface) не работает?
- This example configures the TIM1 in order to manage an external encoder
connected directly to the MCU without external interface logic.
Both inputs TI1 and TI2 are active on both rising and falling edges.
The GPIO PA8 and PA9, corresponding respectively to TIM1_CH1 and TIM1_CH2,
are configured as alternate function and the AFR2 is selected.
alexf58
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

Re: STM32 новичку в ARM что к чему

Сообщение alexf58 »

Meтодов много. Главное не забывать, что у механических контактов есть дребезг. И даже нормируется его время. Скажем 10 мсек. Если щелчки идут не чаще скажем 10 раз в секунду, можно по таймеру читать состояние двух ножек раз а 20 мсек (50 Гц). Тогда между двумя выборками дребезг успокоится.

Но мне больше нравится использование того факта, что пока один дребезжит, второй контакт стоит мертво. Пусть, например, оба в нуле. Включим прерывание по фронту А. Когда оно случится, читаем B. Например B=1. Включаем прерывание ТОЛЬКО по спаду B. Читаем А и включаем прерывание по переходу А в противоположное состояние. Одновременно на каждом прерывании +/- 1 в счетчик. В этом случае мы не зависим ни от времени дребезга, ни от скорости вращения.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

alexf58 писал(а):Главное не забывать, что у механических контактов есть дребезг
Я щас над оптическим экспериментирую :) ..
alexf58 писал(а):Если щелчки идут не чаще скажем 10 раз в секунду
Я потому к прерываниям и прицепился, что у меня около 1000 щелчков в секунду, и каждый щелчок имеет 4 состояния, и обрабатывать надо абсолютно каждое значение (система позиционирования как-никак :dont_know: ).
alexf58 писал(а):Включим прерывание по фронту А. Когда оно случится, читаем B. Например B=1. Включаем прерывание ТОЛЬКО по спаду B. Читаем А и включаем прерывание по переходу А в противоположное состояние.
А это нормально, менять настройки события прерывания в каждом прерывании? :dont_know:
alexf58
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

Re: STM32 новичку в ARM что к чему

Сообщение alexf58 »

isx писал(а): А это нормально, менять настройки события прерывания в каждом прерывании? :dont_know:
Вполне. И быстро.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32 новичку в ARM что к чему

Сообщение HHIMERA »

Весь этот изврат интересен для STM если уже по другому никак... т.е. как крайний случай...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

alexf58 писал(а):Вполне. И быстро.
Не знал... Спасибо за инфу :) .
gessor
Встал на лапы
Сообщения: 115
Зарегистрирован: Ср дек 12, 2012 20:08:08
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение gessor »

Вчера приобрел для обучения и отработки навыков платку Discovery4 и уже появляются элементарные вопросы. Поставил программу STM32 ST-LINK Utility. После первого включения она считала содержимое памяти, а потом перестала это делать и окно device memory остается пустым, хотя устройство подключается успешно. Обновление программы проблему не решило.
И так и не понял, как запустить демо пример с MEMS мышью :dont_know:
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: STM32 новичку в ARM что к чему

Сообщение paskal »

Чем можно прошить кортекс, какой софт?
Железо имеется - ULINK2. Зашивать надо не в среде, а автономно - просто залить hex или elf файл.
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: STM32 новичку в ARM что к чему

Сообщение Pavel_1978 »

Какой именно кортекс? Просто залить прошивку можно через UART или USB.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

День добрый)
Вообщем маркетаню я энкодер на STM. Напечатал диск с рисками и поставил два щелевых оптодатчика, на выходе каждого, при вращении диска с одинаковой скоростью, появляется нормальный синус с размахом от 0.3В до 2.8В (питается это дело вместе с STM32 от 3В). Сдвинул я эти два синуса друг от друга на 90 градусов (как и положено в инкрементальном энкодере) и подал на внешнее прерывание в STM32 (интерфейс энкодера не подходит), но МК регистрирует то неверный отсчёт, то неверное направление (особенно если крутануть рукой по сильнее).
В чём может быть причина?

И ещё вопрос, связанный с первым. Этот график применяется в случае, если пин настроен на внешнее прерывание? И что значит "Undefined"? В этот момент на пине сохраняется значение предыдущего состояния неизменным, либо там может быть что угодно?
Изображение
Ответить

Вернуться в «ARM»