Третьим этапом конфигурации после распределения тактовых импульсов и конфигурации выводов является периферийная конфигурация. Стандартная библиотека микропрограмм предлагает стандартный шаблон для процесса конфигурации. Мы уже видели это с конфигурацией GPIO, где структура устройства была заполнена набором параметров, и один или несколько выводов для данного порта были инициализированы:
GPIO_StructInit(&GPIO_InitStructure); ... fill in structure ... GPIO_Init(GPIOx , &GPIO_InitStructure);
Функция DeInit сбрасывает периферийные регистры, но не отключает периферийные часы — для этого требуется отдельный вызов команды часов (с DISABLE, заменяющим ENABLE). Этот шаблон — структура инициализации, функция init и функция de-init повторяются в стандартной периферийной библиотеке. Основное соглашение об именах для периферийного устройства «ppp»:
Files stm32f10x_ppp.[c|h] Init Structure ppp_InitTypeDef Zero Structure ppp_StructInit(ppp_InitTypeDef*) Initialize Peripheral ppp_Init([sub-device,] ppp_InitTypeDef*) De-initialize Peripheral ppp_DeInit([sub-device])
Примерами устройств с дополнительным «вспомогательным устройством» являются USART, SPI, I2C. Таймеры — это довольно сложный случай, потому что каждый таймер обычно состоит из нескольких устройств: «база времени» (time base) , ноль или более выходных сравнений, ноль или более входных захватов. Существуют и другие исключения, но в основном для периферийных устройств, которые не поддерживаются в частях строки значений.
Конфигурация без стандартной периферийной библиотеки
Код должен выглядеть так:
main()
{
// configure button
// configure led
while (1)
{
if (read(button))
led = on;
else
led = off;
}
}