]> begriffs open source - cmsis-driver-validation/blob - Boards/Keil/MCBSTM32F200/main.c
Update GitHub Actions runner to ubuntu-22.04 (#18)
[cmsis-driver-validation] / Boards / Keil / MCBSTM32F200 / main.c
1 /*----------------------------------------------------------------------------
2  * Name:    main.c
3  *----------------------------------------------------------------------------*/
4
5 #include "stm32f2xx_hal.h"              // Keil::Device:STM32Cube HAL:Common
6 #include "cmsis_dv.h"                   // ARM.API::CMSIS Driver Validation:Framework
7
8 #ifdef RTE_CMSIS_RTOS_RTX
9 extern uint32_t os_time;
10
11 uint32_t HAL_GetTick(void) { 
12   return os_time; 
13 }
14 #endif
15
16 #ifdef RTE_CMSIS_RTOS2
17 /**
18   * Override default HAL_GetTick function
19   */
20 uint32_t HAL_GetTick (void) {
21   static uint32_t ticks = 0U;
22          uint32_t i;
23
24   if (osKernelGetState () == osKernelRunning) {
25     return ((uint32_t)osKernelGetTickCount ());
26   }
27
28   /* If Kernel is not running wait approximately 1 ms then increment 
29      and return auxiliary tick counter value */
30   for (i = (SystemCoreClock >> 14U); i > 0U; i--) {
31     __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
32     __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
33   }
34   return ++ticks;
35 }
36 #endif
37
38 /*----------------------------------------------------------------------------
39  * SystemClock_Config: System Clock Configuration
40  *----------------------------------------------------------------------------*/
41 void SystemClock_Config(void);
42 void SystemClock_Config(void) {
43   RCC_OscInitTypeDef RCC_OscInitStruct;
44   RCC_ClkInitTypeDef RCC_ClkInitStruct;
45
46   /* Enable HSE Oscillator and activate PLL with HSE as source */
47   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
48   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
49   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
50   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
51   RCC_OscInitStruct.PLL.PLLM = 25;
52   RCC_OscInitStruct.PLL.PLLN = 240;
53   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
54   RCC_OscInitStruct.PLL.PLLQ = 5;
55   HAL_RCC_OscConfig(&RCC_OscInitStruct);
56
57   /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
58      clocks dividers */
59   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
60                                 RCC_CLOCKTYPE_PCLK1  | RCC_CLOCKTYPE_PCLK2;
61   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
62   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
63   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
64   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
65   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
66 }
67
68 /**
69   * @brief  Main program
70   * @param  None
71   * @retval None
72   */
73 int main(void)
74 {
75
76   HAL_Init();                           // Initialize the HAL Library
77
78   SystemClock_Config();                 // Configure the System Clock
79
80   osKernelInitialize ();                // Initialize CMSIS-RTOS2
81   osThreadNew (cmsis_dv, NULL, NULL);   // Create validation main thread
82   osKernelStart ();                     // Start thread execution
83
84   for (;;) {}
85 }