STM32F4. Урок 22 - Системна перевірка

Дана бібліотека дозволяє реалізувати систему перевірки помилок в вихідному коді на платі STM32F4. В H-файлі в визначенні повинні бути вказані необхідні активні тести.

Тест тактування: за допомогою цієї функції можна виконати перевірку правильності установки системного тактування та впевнитися в узгодженості всіх тактових частот (HCLK, PCLK1, PCLK2, SYSCLK), (в проектах автора всі тактові частоти встановлені на максимум).

Режим підтвердження: в даному режимі помилки ініціалізації визначаються під час виконання. Наприклад, коли під час ініціалізації тактування SPI ви вибрали невірну шину. Або якщо забули встановити параметри швидкості під час ініціалізації GPIO. Ці помилки призводять до "підтвердження", яке дозволяє визначити, в якій функції сталася помилка, і якщо вона сталася, то визначити рядок вихідного коду. Ця інформація зберігається в структурі.
Примітка: Щоб включити цей режим, в файлі "cmsis_boot / stm32f4xx_conf.h" - "USE_FULL_ASSERT" встановити в 1 (за замовчуванням 0).

Вимоги:

Підключені модулі CooCox-IDE: RCC.
Підтримувані бібліотеки: відсутні.

Перерахування:

typedef enum {
  SYSCHECK_OK =0, // помилок немає
  CLKSOURCE_ERR,  // помилка джерела тактових імпульсів
  HCLK_ERR,       // помилка частоти HCLK
  PCLK1_ERR,      // помилка частоти PCLK1
  PCLK2_ERR,      // помилка частоти PCLK2
  SYSCLK_ERR,     // помилка частоти SYSCLK
  ASSERT_ERR      // помилка підтвердження
}SYSCHECK_t;

Функції:

SYSCHECK_t UB_SysCheck_Clock(void);  // перевірка джерела тактування та всі частоти
void UB_SysCheck_Assert_Init(void);  // ініціалізація режиму підтвердження
SYSCHECK_t UB_SysCheck_Assert(void); // перевірка наявності помилки підтвердження

Приклад використання:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 23.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 бібліотеки SysCheck (Помилка тактування)
// Hinweis  : Ці два файли повинні стояти на 8MHz
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_syscheck.h"
#include "stm32_ub_led.h"

int main(void)
{
  SYSCHECK_t check;

  SystemInit(); // Ініціалізація налаштувань кварца

  // Ініціалізація світлодіодів
  UB_Led_Init();

  // Перевірка налаштувань тактування
  check=UB_SysCheck_Clock();

  if(check==SYSCHECK_OK) {
	// помилок немає
    UB_Led_On(LED_GREEN);
  }
  else {
	// помилка
	UB_Led_On(LED_RED);
  }

  while(1)
  {

  }
}

Приклад використання (підтвердження):

//--------------------------------------------------------------
// File     : main.c
// Datum    : 10.04.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 бібліотеки SysCheck (Помилка підтвердження)
// Hinweis  : Ці два файли повинні стояти на 8MHz
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_syscheck.h"
#include "stm32_ub_led.h"


int main(void)
{
  SYSCHECK_t check;

  SystemInit(); // Ініціалізація налаштувань кварца

  // Ініціалізація світлодіодів
  UB_Led_Init();

  // ініціалізація режиму підтвердження
  UB_SysCheck_Assert_Init();

  //------------------------------------------
  // Намірено вставлена помилка
  //-----------------------------------------
  // Тактування SPI від вибраної шини
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);


  // Перевірка на помилку підтвердження
  check=UB_SysCheck_Assert();

  if(check==SYSCHECK_OK) {
	// помилок немає
    UB_Led_On(LED_GREEN);
  }
  else {
	// сталася помилка підтвердження
	// в режимі налагодження підсвічує ім'я файлу
	// і номер рядка з помилкою
	UB_Led_On(LED_RED);
  }


  while(1)
  {

  }
}

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

Оригінал статті

Прикреплені файли:

Top