STM32F4. Урок 17 — Управление LIS302DL через SPI

На плате Discovery установлен 3х-осевой датчик ускорения (LIS302DL). Примечание: «новые» платы оснащены микросхемами LIS3DSH, библиотека для работы с ними есть в блоге автора. Данный датчик позволяет измерять ускорение по осям X, Y и Z. Датчик имеет разрядность 8 бит и разрешение +/-2g или +/-8g. Данная библиотека позволяет легко использовать микросхему, достаточно циклически вызывать функцию «UB_LIS302_Read ()» и получить значение ускорения всех трех осей (в примере используется две оси в диапазоне значений от -2000 до 2000). Датчик может быть использован через опрос по прерыванию, но для разъяснения работы необходимо связаться с автором. Внимание: в руководстве пользователя к плате STM32F4 Discovery ошибка, как чипселект указан вывод PE2, на самом деле используется PE3. Для работы микросхемы необходима библиотека STM32_UB_SPI1.

Демонстрация работы:

lis302

Используемые выводы:

SCK как PA5
MOSI как PA7
MISO как PA6
ChipSelect как PE3

Требования:

   Подключаемые модули CooCox-IDE: GPIO.
   Поддерживаемые библиотеки: STM32_UB_SPI1.

Перечисления:

 typedef enum {   SCALE_2G =0,    // Разрешение +/- 2g   SCALE_8G        // Разрешение +/- 8g }LIS302_SCALE_t;  typedef enum {   FILTER_OFF =0,  // ФВЧ отключен   FILTER_2Hz,     // Фильтр включен (2 Гц)   FILTER_1Hz,     // Фильтр включен (1 Гц)   FILTER_500mHz,  // Фильтр включен (0,5 Гц)   FILTER_250mHz   // Фильтр включен (0,25 Гц) }LIS302_FILTER_t;

Функции:

 ErrorStatus UB_LIS302_Init(LIS302_SCALE_t scale);  // инициализация LIS302DL void UB_LIS302_Read(void);                         // зачитать значение ускорения void UB_LIS302_SetFilter(LIS302_FILTER_t filter);  // настройка фильтра

Пример использования:

 //-------------------------------------------------------------- // File     : main.c // Datum    : 06.03.2013 // Version  : 1.0 // Autor    : UB // EMail    : mc-4u(@)t-online.de // Web      : www.mikrocontroller-4u.de // CPU      : STM32F4 // IDE      : CooCox CoIDE 1.7.0 // Module   : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der LIS302DL Library // Hinweis  : Diese zwei Files muessen auf 8MHz stehen //              "cmsis_boot/stm32f4xx.h" //              "cmsis_boot/system_stm32f4xx.c" //--------------------------------------------------------------  #include "main.h" #include "stm32_ub_lis302dl.h" #include "stm32_ub_led.h"  int main(void) {   ErrorStatus check;    SystemInit(); // Инициализация настроек кварца    UB_Led_Init(); // Инициализация светодиодов    // Инициализация LIS302 (с разрешением +/-2G)   check=UB_LIS302_Init(SCALE_2G);    if(check==ERROR) { 	  // LIS302 не найден 	  // включить красный и зеленый светодиоды 	  UB_Led_On(LED_RED); 	  UB_Led_On(LED_GREEN); 	  // СТОП 	  while(1);   }    while(1)   { 	  // выбрать LIS302 	  UB_LIS302_Read(); 	  // когда отладочная плата наклонена влево, включить красный светодиод 	  if(LIS302.y_achse>250) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED); 	  // когда отладочная плата наклонена вправо, включить зеленый светодиод 	  if(LIS302.y_achse<-250) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN); 	  // когда отладочная плата наклонена назад, включить синий светодиод 	  if(LIS302.x_achse>250) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE); 	  // когда отладочная плата наклонена вперед, включить желтый светодиод 	  if(LIS302.x_achse<-250) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE);    } } 

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.