Июн 022012
 

На данный момент последняя версия библиотек StdPeriph_lib для серии STM32L – это версия 1.1.1. В моих архивах с примерами проектов находятся библиотеки версии 1.1.0. Торопиться обновлять библиотеки не спешите, если работаете с платой STM32L-DISCOVERY, используйте библиотеки из моих проектов, хуже точно не будет. Далее объясняю почему лучше пользоваться предыдущей версией, и какие изменения коснулись библиотек.

Изменился файл хедера stm32l1xx.h, если раньше там был прописан только один тип микроконтроллеров серии STM32L, а именно MD — Medium-density devices, то теперь добавилось еще два: MDP — Medium-density Plus devices и HD — High-density devices. Если будете использовать новую библиотеку, теперь, как и для серии STM32F, придется делать выбор нужного варианта. Для этого надо в следующих строках файла stm32l1xx.h, оставить не закомментированной только одну строку, ту что соответствует используемому микроконтроллеру

#if !defined (STM32L1XX_MD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_HD)
  /* #define STM32L1XX_MD  */   /*!< STM32L1XX_MD: STM32L Ultra Low Power Medium-density devices */
  /* #define STM32L1XX_MDP */   /*!< STM32L1XX_MDP: STM32L Ultra Low Power Medium-density Plus devices */
  #define STM32L1XX_HD    /*!< STM32L1XX_HD: STM32L Ultra Low Power High-density devices */
#endif

Как видите, по умолчанию используется High-density, а на плате DISCOVERY микроконтроллер Medium-density. То есть, надо будет вносить изменения. Какие отличия задаются в этих определениях:

  • Medium-density devices. Объем флэш-памяти от 64 КБайт до 128 КБайт
  • Medium-density Plus devices. Объем флэш-памяти 256 КБайт
  • High-density devices. Объем флэш-памяти 384 КБайт

Кроме того есть отличия и при задании регистров периферии и их адресов. Выбор типа микроконтроллера можно осуществить также в настройках среды разработки IDE.

Но еще и структуру и названия некоторых каталогов поменяли, и перетасовали кое-какие файлы в архиве с новой библиотекой. Вот это уж не понимаю зачем делать было и что это изменило к лучшему. В тех же pdf файлах описания настройки IAR ничего не поменялось, возможно возникнет путаница. У себя в статьях и примерах проектов также пока не тороплюсь вносить изменений, неизвестно надолго ли текущая версия библиотек будет актуальна. Однажды уже размещал ссылки на их архивы библиотек, очень быстро они стали нерабочими, эти архивы переместились на другие адреса.

В общем, при работе с платой STM32L-DISCOVERY лучше используйте те библиотеки, что идут в моих примерах проектов. Они “рафинированные”, сделаны лишь под семейство Medium-density devices, а STM32L152RBT6 отладочной платы к этому типу и относится. К тому же эта библиотека еще не устарела особо – предпоследняя версия.

Другие статьи:

  5 Responses to “STM32L. Библиотеки от STMicroelectronics”

  1. Подскажите подалуйста, что означает дописка «_t» иногда идущая после переменных или имен регистров?

    Например:

    __IO uint32_t SR;
    __IO uint32_t CR1;
    __IO uint32_t CR2;
    __IO uint32_t SMPR1;
    __IO uint32_t SMPR2;
    __IO uint32_t SMPR3;
    __IO uint32_t JOFR1;
    __IO uint32_t JOFR2;
    __IO uint32_t JOFR3;
    __IO uint32_t JOFR4;
    __IO uint32_t HTR;
    __IO uint32_t LTR;
    __IO uint32_t SQR1;

    • Погуглил на эту тему, так и не нашел ответа, что же означает буква t, да думаю это и не так уж важно знать. Такой тип данных определяет значение со строго фиксированной размерностью в стандарте С99 языка Си, в файле stdint.h можно посмотреть и другие возможные варианты задания типов целочисленных данных. Если интересно, то можно подробней почитать о всех возможных вариантах типов данных для стандарта С99 вот здесь http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1336.pdf

  2. Здравствуйте! Столкнулся со следующей проблемой при работе с STM32L1xx_StdPeriph_Lib_V1.2.0. Не могу разобраться с функциями, где передача параметров происходит через структуры. Например функция: void TIM_OC1Init ( TIM_TypeDef * TIMx, TIM_OCInitTypeDef * TIM_OCInitStruct ). В ней есть структура TIM_OCInitStruct, которая имеет TIM_OCInitTypeDef. Рассмотрим одно из полей структуры, например: uint16_t TIM_OCMode.
    Это поле может принимать следующее значения:
    00184 #define TIM_OCMode_Timing ((uint16_t)0x0000)
    00185 #define TIM_OCMode_Active ((uint16_t)0x0010)
    00186 #define TIM_OCMode_Inactive ((uint16_t)0x0020)
    00187 #define TIM_OCMode_Toggle ((uint16_t)0x0030)
    00188 #define TIM_OCMode_PWM1 ((uint16_t)0x0060)
    00189 #define TIM_OCMode_PWM2 ((uint16_t)0x0070)
    Скопировал из файла stm32l1xx_tim.h.
    Проблема заключается в следующем. Как понять что значит каждый режим (как модуль работает в данном режиме)? Не всегда понятно из названия(. Насколько я понимаю, объявленную здесь константу нужно связать с регистрами и посмотреть референс мануал. Но непонятно к какому регистру относится константа.

  3. Reference manual, готовые примеры из библиотек. В принципе, большинство функций понятны, когда знаешь режимы работы модуля и структуру регистров.