| Микроконтролери и електроника 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: Позлвате на своя отговорност.
|
|||
| Автор: | 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/ |
|