Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

STM32: Generator for a lightweight DIO driver.
http://mcu-bg.com/mcu_site/viewtopic.php?f=22&t=10609
Страница 1 от 1

Автор:  tolstolob [ Пон Окт 22, 2012 10:39 pm ]
Заглавие:  STM32: Generator for a lightweight DIO driver.

Преди няколко дни стигнах до писането по GPIO-та, а това при мен винаги е свързано с рутиране/пин мапинг. Което си е една досадна дейност. От мързел ми светна, че тая работа може да става и автоматично, затова сглобих едно малко програмче за тая цел.

Идеята: Абстракция на физическите пинове.

Как работи?
1.0. Тръгваме от вече готова пин конфигурация, правена с тула на ST - MicroXplorer (*.ioc). Там се дефинира кой пин като какъв ще играе - периферия, GPIO и т.н.
1.1. Създаваме си нова DIO конфигурация в нашето тулче (от файл менюто).
1.2. MicroXplorer-ската IOC конфигурация се импортва в генератора (от файл менюто-> импорт). В долните два групбокса излизат наличните портове и пинове (но само тези, които са конфигурирани като GPIO в *.ioc файла!).
1.3. Създаваме логичеки порт(ове) (от дървото в ляво, с контекстното меню).
1.4. Има 2 основни типа логически портове: входни и изходни. Това се настройва от пропърти грида.
1.5. От десния групбокс избираме пинове и влачим в порта. Ако порта е входен, всички дропнати OUTPUT пинове ще бъдат отсвирени и обратно.
1.6. Повтаряме действията от т.3 докато е необходимо.
1.7. Пиновете в даден логически порт могат да се местят. (Също и портовете.)
1.8. Настройват се дебаунс времена и активно ниво (за входните пинове)
1.9. Проверяваме дали конфигурацията е ОК от менюто Action.
1.10. Сейвваме конфигурацията като *.dio. Импортнатата информация от *.ioc файла се запазва в *.dio-то, така че при следващо отваряне импорт не е необходим. (Освен ако няма промяна в GPIO пиновете.)

Опции:
1.11 Използваните от тула типове могат да се настроят на вкус ( във втория таб ). Те също влизат в *.dio конфига.
1.12 Могат да се включат и допълнителни хедъри в сорса. Това става от главния нод -> Headers. Кавичките или скобите трябва да присъстват също.

Резултата?
2.1. Два файла: DIO_Drv.с и DIO_Drv.h.
2.2. За всеки дефиниран изходен порт, във файловете трябва да има по една Get и Set функции и комплект маски за съдържащите се вътре логически пинове.
2.3. За входните портове се генерират само Get функции и маски.
2.4. Не се разчита на стандартната библиотека на СТ. Нужен е единствено файла с дефинициите на регистрите.
2.5. Писането в изходите се прави чрез BSRR регистрите, уж да е atomic :)
2.6. Четенето е през IDR и ODR регистрите.

Ограниченията:
3.1 Общия брой дебаунсвани пинове (сумарно за всички дефинирани групи) не може да надвишава 32.

Използване:
4.0 Доколкото знам, регистрите, които се използват от драйвера са едни и същи при всички линии STM32 , така че би трябвало да върви навсякъде.
4.1 DIO_Init() се вика еднократно след като вече GPIO-тата са инициализирани. Аз лично инициализирам целия хардуер накуп, затова не съм мислил GPIO-тата да се инициализират от тула.
4.2 Дебаунсването се прави в DIO_Task(), затова трябва да се вика циклично. Времето се настройва в главния нод на *.dio конфигурацията.

Системни изисквания: .NET 4.0.
Disclaimer: Позлвате на своя отговорност. :D

Прикачени файлове:
Коментар на файл: DIO driver generator.
DIO_Driver_Gen.zip [134.07 KiB]
318 пъти

Автор:  tolstolob [ Пон Апр 01, 2013 10:51 pm ]
Заглавие:  Re: STM32: Generator for a lightweight DIO driver.

Реших да пусна тулчето по широкия свят, затова му направих малък ъпдейт.
Може да го свалите оттук: DioDriverGeneratorSTM32.

Автор:  bongo_x2 [ Сря Май 22, 2013 8:22 pm ]
Заглавие:  Re: STM32: Generator for a lightweight DIO driver.

Nescafe те изпревариха ама тяхното е голямо менте: http://www.youtube.com/watch?v=PRfNJ6DJpp4
Оригиналът е тук: http://www.youtube.com/watch?v=PRfNJ6DJpp4
:)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/