Просмотр исходного кода

Don't link HAL sources when using LL.

Blinky example using LL.
Konstantin Oblaukhov 5 лет назад
Родитель
Сommit
aad75627d3
3 измененных файлов с 96 добавлено и 1 удалено
  1. 1 1
      cmake/FindHAL.cmake
  2. 35 0
      examples/blinky-ll/CMakeLists.txt
  3. 60 0
      examples/blinky-ll/blinky.c

+ 1 - 1
cmake/FindHAL.cmake

@@ -334,7 +334,7 @@ foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES})
         set(HAL_${DRV_COMP}_FOUND TRUE)
         if(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV})))
             add_library(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE IMPORTED)
-            target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE HAL::STM32::${FAMILY}${CORE_C})
+            target_include_directories(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}")
             target_sources(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE}")
         endif()
     endforeach()

+ 35 - 0
examples/blinky-ll/CMakeLists.txt

@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.13)
+set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake)
+
+project(stm32-blinky-ll C ASM)
+set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
+
+find_package(CMSIS COMPONENTS STM32L0 STM32F1 STM32F4 REQUIRED)
+find_package(HAL COMPONENTS STM32L0 STM32F1 STM32F4 LL_RCC LL_GPIO REQUIRED)
+
+# STM32F4-Discovery
+add_executable(stm32-blinky-f4 blinky.c)
+target_link_libraries(stm32-blinky-f4 
+    HAL::STM32::F4::LL_RCC
+    HAL::STM32::F4::LL_GPIO
+    CMSIS::STM32::F407VG
+    STM32::NoSys 
+)
+
+# STM32VL-Discovery
+add_executable(stm32-blinky-f1 blinky.c)
+target_link_libraries(stm32-blinky-f1
+    HAL::STM32::F1::LL_RCC
+    HAL::STM32::F1::LL_GPIO
+    CMSIS::STM32::F100RB
+    STM32::NoSys
+)
+
+# STM32L0538-Discovery
+add_executable(stm32-blinky-l0 blinky.c)
+target_link_libraries(stm32-blinky-l0
+    HAL::STM32::L0::LL_RCC
+    HAL::STM32::L0::LL_GPIO
+    CMSIS::STM32::L053C8
+    STM32::NoSys
+)

+ 60 - 0
examples/blinky-ll/blinky.c

@@ -0,0 +1,60 @@
+#if defined STM32L0
+    #include <stm32l0xx_ll_gpio.h>
+    #include <stm32l0xx_ll_cortex.h>
+    #include <stm32l0xx_ll_rcc.h>
+
+    // STM32L0538-Discovery green led - PB4
+    #define LED_PORT                GPIOB
+    #define LED_PIN                 LL_GPIO_PIN_4
+    #define LED_PORT_CLK_ENABLE()   { RCC->IOPENR |= RCC_IOPENR_GPIOBEN; }
+#elif defined STM32F1
+    #include <stm32f1xx_ll_gpio.h>
+    #include <stm32f1xx_ll_cortex.h>
+    #include <stm32f1xx_ll_rcc.h>
+
+    // STM32VL-Discovery green led - PC9
+    #define LED_PORT                GPIOC
+    #define LED_PIN                 LL_GPIO_PIN_9
+    #define LED_PORT_CLK_ENABLE()   { RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; }
+#elif defined STM32F4
+    #include <stm32f4xx_ll_gpio.h>
+    #include <stm32f4xx_ll_cortex.h>
+    #include <stm32f4xx_ll_rcc.h>
+
+    // STM32F4-Discovery green led - PD12
+    #define LED_PORT                GPIOD
+    #define LED_PIN                 LL_GPIO_PIN_12
+    #define LED_PORT_CLK_ENABLE()   { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; }
+#endif
+
+void SysTick_Handler(void)
+{
+    static int counter = 0;
+    counter++;
+
+    // 1 Hz blinking
+    if ((counter % 500) == 0)
+        LL_GPIO_TogglePin(LED_PORT, LED_PIN);
+}
+
+void initGPIO()
+{
+    LED_PORT_CLK_ENABLE();
+
+    LL_GPIO_SetPinMode(LED_PORT, LED_PIN, LL_GPIO_MODE_OUTPUT);
+    LL_GPIO_SetPinOutputType(LED_PORT, LED_PIN, LL_GPIO_OUTPUT_PUSHPULL);
+}
+
+int main(void)
+{
+    initGPIO();
+
+    // 1kHz ticks
+    SystemCoreClockUpdate();
+    SysTick_Config(SystemCoreClock / 1000);
+
+    for (;;)
+        __WFI();
+
+    return 0;
+}