Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Ответ
Опции темы
Непрочитано 21.07.2015, 19:10   #4451
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Цитата:
Реализация довольно простая: через таймер TIM2 и DMA, разве что сброс происходит через прерывание (но эта процедура выполняется один раз перед отправкой пакета данных, так что не страшно).
И почему не до конца было доделать, непонятно. Что в том сбросе такого?
Цитата:
Канал 4 таймера TIM2 используется одновременно как выход и вход: TIM2_CH4 работает в режиме ШИМ-выхода, а TIM2_CH3 — в режиме ШИМ-захвата.
А смысл в захвате? Какая разница что разбирать, длительность импульса или состояние порта? С состоянием порта ИМХО меньше головняка.
Цитата:
По истечению захвата DMA генерирует прерывание, внутри обработчика которого отключается все ненужное и устанавливается флаг готовности принятых данных.
Если есть прерывание, то это уже не хардварно, это полухардварно.

В принципе, тебе нравится - и ладно!
Реклама:
STM32F0 вне форума   Ответить с цитированием
Непрочитано 21.07.2015, 20:22   #4452
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от STM32F0 Посмотреть сообщение
Что в том сбросе такого?
Одиночный запуск — нет особого смысла (зачем одну-единственную посылку через DMA гнать, тем паче, что все равно вручную ARR придется выставить?).
Сообщение от STM32F0 Посмотреть сообщение
Какая разница что разбирать, длительность импульса или состояние порта?
Для измерения состояния порта пришлось бы все равно еще один канал таймера активировать, чтобы после установки в 1 дать время датчику пискнуть.
Сообщение от STM32F0 Посмотреть сообщение
Если есть прерывание, то это уже не хардварно, это полухардварно.
Можно и без прерывания: просто мониторить состояние DMA: как только отработало, перерабатывать данные. Но с прерыванием меньше дергатни.
Сообщение от STM32F0 Посмотреть сообщение
В принципе, тебе нравится - и ладно!
Ага. 1-wire — довольно-таки тормозная штука (особенно если работать не с DS18S20, а с DS18B20 в 12-битном режиме), поэтому лучше все-таки выполнять связанные с нею операции с минимальным отвлечением от основных функций (а то ведь можно и профукать что-нибудь).
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 21.07.2015, 20:45   #4453
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
Одиночный запуск — нет особого смысла (зачем одну-единственную посылку через DMA гнать, тем паче, что все равно вручную ARR придется выставить?).
Зачем вручную? Через DMAR. Тогда точно всё аппаратно.
Сообщение от eddy Посмотреть сообщение
Для измерения состояния порта пришлось бы все равно еще один канал таймера активировать, чтобы после установки в 1 дать время датчику пискнуть.
При многоканалке проще состояние порта сохранять/парсить. А так нужно кучу длительностей запоминать.
Сообщение от eddy Посмотреть сообщение
Можно и без прерывания: просто мониторить состояние DMA: как только отработало, перерабатывать данные. Но с прерыванием меньше дергатни.
Так прерывание не одно, а два? Прерывание по окончанию трансфера это святое. Если больше ничего не нужно особенного, то в нём всё остальное можно и мутить. Делал так несколько датчиков бегущей строкой, майн практически пустой, с вечным циклом в конце.
Сообщение от eddy Посмотреть сообщение
1-wire — довольно-таки тормозная штука (особенно если работать не с DS18S20, а с DS18B20 в 12-битном режиме), поэтому лучше все-таки выполнять связанные с нею операции с минимальным отвлечением от основных функций (а то ведь можно и профукать что-нибудь).
Если всё уж так плохо, то тогда надо делать всё на ДМА, без прерываний, полностью хардварно.
STM32F0 вне форума   Ответить с цитированием
Непрочитано 21.07.2015, 20:55   #4454
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от STM32F0 Посмотреть сообщение
надо делать всё на ДМА, без прерываний, полностью хардварно.
Не, в теле прерываний почти ничего особенного же: просто флаги устанавливаются/снимаются. Вот прерывания DMA: DMA1 канал 7 просто отрубает DMA, как отработало; DMA1 канал 1 устанавливает флаг готовности, отрубает DMA и таймер.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 21.07.2015, 21:13   #4455
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Зачем? Вся прелесть полной хардварности - 1-wire крутится самостоятельно, дисплей - самостоятельно. Всё без прерываний и отключений/манипуляций. В майне или прерывании только обработка и пересылка нужных данных.
STM32F0 вне форума   Ответить с цитированием
Непрочитано 21.07.2015, 23:46   #4456
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Кстати, никто не натыкался на онлайновый "генератор" структур для инициализации USB? Я поковырял сегодня пример HID (мышка) из opencm3, захотелось туда еще клаву добавить. Но как все эти дескрипторы совместить — ума не приложу!

// придумал прикольную фигню, чтобы народ пугать: сделать "квазифлешку" (там надо-то по-минимуму, а уж USB1.1 вполне возможно, что даже на внутреннем RC-генераторе заведется). Втыкаем ее в компьютер и курсор мыши начинает бешено мотыляться по кругу, а в активное текстовое поле пишется какая-нибудь тарабарщина. Ну и, конечно, можно что-нибудь полезное придумать..
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 22.07.2015, 09:21   #4457
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,359
Сказал спасибо: 85
Сказали Спасибо 616 раз(а) в 372 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Дескрипторов и репортов клавы и мыши вроде валом в инете.
Как понимаю, в самом начале ставится другое кол-во интерфейсов (в 2 раза больше), и тупо в конец добавляются дескрипторы.
Ну и к репортам добавляет еще репорт.
По крайней мере на кипарисе у меня такое прокатывало.
Получается составное устройство.
pambaru на форуме   Ответить с цитированием
Непрочитано 22.07.2015, 11:16   #4458
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
Кстати, никто не натыкался на онлайновый "генератор" структур для инициализации USB?
http://www.usb.org/developers/hidpag...criptor%20Tool
omercury вне форума   Ответить с цитированием
Непрочитано 22.07.2015, 12:52   #4459
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

omercury, не вижу. Там только какой-то зип скачать предлагают, а я онлайн хочу найти, потому что нафиг мне этот зип с кучей непонятных файлов внутри? Ладно бы, исходники были, чтобы собрать утилитку...

По поводу составного устройства частично разобрался. По systick дергаю мышу, чтобы она перемещалась по квадрату, а в каждом углу хочу еще и слово "hello" печатать. И вот тут-то косяк, код
Код:
void send_key(){
	int8_t wrd[] = {11, 8, 15, 15, 18, 0}, *ptr = wrd-1; // hello
	int8_t buf[9] = {2,0,0,0,0,0,0,0,0};
	do{
		buf[3] = *(++ptr);
		usbd_ep_write_packet(usbd_dev, 0x81, buf, 9);
		buf[3] = 0;
	}while(*ptr);
}
Запускается один раз и выдает кучу букв 'h'. Если на нормальной клавиатуре нажать клавишу, то выдача прекращается.
Похоже, слишком шустро пытаюсь писать — буфер-то асинхронно считывается по инициализации компьютера. Видимо, надо или паузы добавить или еще что придумать.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Непрочитано 22.07.2015, 13:15   #4460
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Все, разобрался: надо было просто ждать, пока буфер точно не передастся + уменьшить интервал опроса (чтобы поменьше ждать). Вот что получилось:
Код:
void send_key(){
	int8_t wrd[] = {11, 8, 15, 15, 18, 0}, *ptr = wrd; // hello
	int8_t buf[9] = {2,0,0,0,0,0,0,0,0};
	do{
		buf[3] = *ptr;
		while(9 != usbd_ep_write_packet(usbd_dev, 0x81, buf, 9));
		buf[3] = 0;
		while(9 != usbd_ep_write_packet(usbd_dev, 0x81, buf, 9));
	}while(*(++ptr));
}
В принципе, можно сразу по нескольку клавиш отправлять, главное — чтобы не повторялись коды (если коды повторяются, надо послать ноль).
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума   Ответить с цитированием
Сказали "Спасибо" eddy
woroba (28.07.2015)
Ответ

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 19:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot