ST10 - схеми и програми за speccy
ST10.Urok 2. Как да конфигурирате гнездата и LED примигна (140201-140205)
За да се продължи проучването MK (микроконтролер) STM32xx имаме нужда от документация от производителя.
Разпределението Кайл. по-точно от пакетите за продавача. вече включва почти всичко, което ви трябва.
Referense ръководство на чипа и ядрото. фиш.
те се намират физически. например STM32F100RB
\ STM32F1xx_DFP \ 1.0.2 \ Documents 'Papka_gde_ustanovlena_Keil' \ ARM \ Pack \ Кайл
И най-IDE са организирали работата с документацията, че всичко е под ръка, когато се работи с проекта.
IDE → Преглед на меню -> Книги.
Въпреки това, STM на документация често се коригира и актуализира.
Документация достъпен на уебсайта на производителя.
>>> - като чип, монтиран на STM32VL откритие
Освен Referense потребителя и фиш. изключително необходимо да се проучи документите -
Errata, съдържащ описание на хардуерни грешки и начини за заобикаляне на тези грешки.
ES0136: STM32F100xC, STM32F100xD и STM32F100xE висока плътност ограничения стойност линия устройства
Препоръчва се също така да имат под ръка тези документи.
>>> - Как да си направим модули
Брайън Kernighan, Денис Ричи. С език за програмиране
Така че всичко, което трябва, което имаме.
Създаване на модул с GPIO.
Съкращение GPIO с общо предназначение на входа / изхода - входа / изхода от общо назначение
Първо, малко за времето.
По подразбиране системата е настроена на външен кристал - HSE (8MHz) и SYSCLK 24MHz.
GPIOx в STM32F10xx с тактова честота от APB2.
В допълнително конфигуриране, както и ще разгледа източник часовник и честотата. но за сега ние използваме тази информация, за даденост.
Времето по подразбиране (а оттам и работи) изключени всички модули периферия.
За свързването им отговорен RCC модул. специално за GPIO х.
APB2 периферна часовник позволи регистър - APB2ENR.
Open Referense ръководство RM0041 и да намерите описание на този регистър, като се използва
списък с отметки, или търсене.
На STM32VL откритие има два светодиода - син свързан с PC8 и зелени до РС9. Трябва да се контролира бита 8 и 9 на порт С.
Тук аз отделям. Определяне модули себе си и своите регистри в бита заглавната част на файла са stm32f10x.h.
Регистри се сля в структурата на базата на функция.
__IO uint32_t CR;
__IO uint32_t CFGR;
__IO uint32_t CIR;
__IO uint32_t APB2RSTR;
__IO uint32_t APB1RSTR;
__IO uint32_t AHBENR;
__IO uint32_t APB2ENR;
__IO uint32_t APB1ENR;
__IO uint32_t BDCR;
__IO uint32_t КСО;
__IO uint32_t AHBRSTR;
__IO uint32_t CFGR2;
#if дефинирано (STM32F10X_LD_VL) || дефинирано (STM32F10X_MD_VL) || дефинирано (STM32F10X_HD_VL)
__IO uint32_t CFGR2;
# endif / * STM32F10X_LD_VL || STM32F10X_MD_VL || STM32F10X_HD_VL * /
бита дефинирани константи характер и са по същество-битови маски:
#define RCC_APB2ENR_AFIOEN ((uint32_t) 0x00000001) / *! #define RCC_APB2ENR_IOPAEN ((uint32_t) 0x00000004) / *!
#define RCC_APB2ENR_IOPBEN ((uint32_t) 0x00000008) / *!
#define RCC_APB2ENR_IOPCEN ((uint32_t) 0x00000010) / *!
#define RCC_APB2ENR_IOPDEN ((uint32_t) 0x00000020) / *!
#define RCC_APB2ENR_ADC1EN ((uint32_t) 0x00000200) / *! Герой решителност малко съдържа. и регистър единица, в която се бита и малко име, разделени от долна е. Себе си като имена модул, регистри, бита - съкращение. RCC - R ESET и С заключване С ontrol APB2ENR - APB2P eripheral часовник EN състояние R egister За да работите с отделни битове на регистри ще използва следната структура. Reset малко - Var = ( Монтаж - Var | = bitMask; Така че включете часовник порт С. RCC-> APB2ENR | = RCC_ APB2ENR_IOPCEN; Когато променлива се използва като индикатор uetsya е да се регистрирате APB2ENR. Чрез onfiguratsiya пристанищни щифтове. RazdelGPIO 7.1 GPIO употреба Referense функционално описание Чрез onfiguratsiya констатациите, обобщени в малко конфигурация маса Table Table 16. Port задача Bit GPIO конфигурация регистър са дадени в описанието Порт конфигурация регистър висока (GPIOx_CRH) (X = A..G) От пристанището има 16 игли. и всеки болт има конфигурация с 4-битов, има две конфигурация регистър 32bit - CRL и CRH. Имаме нужда от CRH, тъй като заключенията PC8 и РС9 са в него.
За нас желаната опция - Обща цел изход натискане Фул комбинация от битове
Тя трябва да бъде, както следва.
CNFx - 00 - Binary
MODEX - 01 - както в този случай, скоростта на изход не е от значение. излагайте средно.
Ние ще се инсталира необходимата конфигурация на предварително клиринг усилие
предишно състояние. Въпреки че тези регистри и има определено състояние след нулиране чип. но по-добре е да свикнеш да се направи както трябва. конфигурационни терминали
Понякога е необходимо да промените "в движение".
(GPIO_CRH_CNF9 | GPIO_CRH_CNF8 | GPIO_CRH_MODE9 | GPIO_CRH_MODE8);
GPIOC-> CRH | = GPIO_CRH_MODE9_0 | GPIO_CRH_MODE8_0;
Работа с констатациите.
За изходни данни порт съществува в ОРС регистъра.
Има редица начини.
Директен написването на стойност в регистър ОРС
GPIOC-> ОРС | = GPIO_ODR_ODR9; // нулиране на изхода
Но това не е атомна, и в допълнение се съставя в един куп инструкции.
и BRR регистрира BSRR предназначени за атомна достъп до бита ОРС порт
Първият нулиране и настройката бита. на второ място след нулиране.
BSRR регистър символично разделена на две 16-битови. Младши служи за определяне на бит за старши нулиране.
GPIOC-> BSRR = GPIO_BSRR_BR9; // нулиране на изхода
GPIOC-> BSRR = GPIO_BSRR_BS9; // избран изход
За опростяване на писането на кода и за по-удобно възприятие, напиши
определение zameschayushie тези редове.
# определят GreenLED_OFFGPIOC-> BSRR = GPIO_BSRR_BR9
# определят GreenLED_ON GPIOC-> BSRR = GPIO_BSRR_BS9
# определят BlueLED_OFF GPIOC-> BSRR = GPIO_BSRR_BR8
# определят BlueLED_ON GPIOC-> BSRR = GPIO_BSRR_BS8
В резултат на това, работата с продукцията се свежда до:
И това не трябва да се погледне през изходния код, в търсене на това, което е на изхода.
За да стане самостоятелно документиране на код.
Но ако ние нека да контролират светодиодите. Не видяхме нищо.
Заключения се включват при висока скорост и човешкото око не може да хване състоянието на трептенето. Търсите закъснение.
Няма да описвам функцията работа ме е карала напълно. Мога само да кажа, че тя работи в прекъсването на таймер SYSTICK система и ви позволява да създадете времеви интервали, 1 мс. и достатъчно точна. Напълно анализира работните функции в бъдещите уроци.
Събиране на източника Проект → Възстанови всички цели, както в предишния урок.
И аз питам в Flash → Изтегли чип.
Ако компилирането е била успешна и проектът е създаден. на борда ще започне да мига светодиода.
Осъществяване на самия модул.
Нашата код работи. начетен и лесен за използване. Но ако продължим да пиша повече в този стил (всички в един файл).
Това ще отнеме време. завъртане на работа в една рутинна. Трансфер на работата на периферията на модула. и въвеждане на изходни портове на същите периферни устройства,
отделен софтуерен модул - по същество една библиотека.
Предполага се, че вече сте прочели статията Виктор Тимофеев - Как да си направим модулите.
Създаване на led.h модул файл с глава и го запишете в папката вкл. просто създаде източник
led.c и го запишете в папката SRC.
Трансфер на изхода да се определят преминаването заглавни файлове. и заключения инициализация портов суич и функция отделен часовник LED_init () в изходния код.
Свържете заглавни файлове в изходния код Стартиране и се добавят към проекта. както прибавя Стартиране
но само в виртуална КРБ с папки.
С leduyuschie уроци активно ще използва материал от този урок.
Стартиране първи вариант
# определят GreenLED_OFF GPIOC-> BSRR = GPIO_BSRR_BR9
# определят GreenLED_ON GPIOC-> BSRR = GPIO_BSRR_BS9
# определят BlueLED_OFF GPIOC-> BSRR = GPIO_BSRR_BR8
# определят BlueLED_ON GPIOC-> BSRR = GPIO_BSRR_BS8
статичен летливи uint32_t TimingDelay;