Explorar el Código

电量检测功能添加

ZhaoSai hace 1 mes
padre
commit
97cef5fbc1

+ 2 - 0
CMakeLists.txt

@@ -41,6 +41,8 @@ add_executable(${CMAKE_PROJECT_NAME}
         Core/Inc/RTC_SLEEP.h
         Core/Src/ring_buffer.c
         Core/Inc/ring_buffer.h
+        Core/Inc/Battery.h
+        Core/Src/Battery.c
 )
 
 # Add STM32CubeMX generated sources

+ 38 - 0
Core/Inc/Battery.h

@@ -0,0 +1,38 @@
+//
+// Created by admin on 2025/10/1.
+//
+
+#ifndef LORA_BL_BATTERY_H
+#define LORA_BL_BATTERY_H
+
+/*
+ ****************************************************************************************************
+ 2025/10/1 计划采用ADC来实现电量检测
+ ****************************************************************************************************
+ */
+#include "stm32f1xx_hal.h"
+
+
+/******************************************************************************************/
+/* ADC¼°Òý½Å ¶¨Òå */
+
+#define ADC_ADCX_CHY_GPIO_PORT              GPIOB
+#define ADC_ADCX_CHY_GPIO_PIN               GPIO_PIN_0
+#define ADC_ADCX_CHY_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)
+
+#define ADC_ADCX                            ADC1
+#define ADC_ADCX_CHY                        ADC_CHANNEL_8
+#define ADC_ADCX_CHY_CLK_ENABLE()           do{ __HAL_RCC_ADC1_CLK_ENABLE(); }while(0)
+
+/******************************************************************************************/
+
+void adc_init(void);
+void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch,uint32_t rank, uint32_t stime);
+uint32_t adc_get_result(uint32_t ch);
+uint32_t adc_get_result_average(uint32_t ch, uint8_t times);
+
+
+
+
+
+#endif //LORA_BL_BATTERY_H

+ 1 - 1
Core/Inc/main.h

@@ -28,7 +28,7 @@ extern "C" {
 
 /* Includes ------------------------------------------------------------------*/
 #include "stm32f1xx_hal.h"
-
+#include "Battery.h"
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
 

+ 1 - 1
Core/Inc/stm32f1xx_hal_conf.h

@@ -34,7 +34,7 @@
   */
 
 #define HAL_MODULE_ENABLED
-  /*#define HAL_ADC_MODULE_ENABLED   */
+#define HAL_ADC_MODULE_ENABLED   
 /*#define HAL_CRYP_MODULE_ENABLED   */
 /*#define HAL_CAN_MODULE_ENABLED   */
 /*#define HAL_CAN_LEGACY_MODULE_ENABLED   */

+ 91 - 0
Core/Src/Battery.c

@@ -0,0 +1,91 @@
+//
+// Created by admin on 2025/10/1.
+//
+#include "Battery.h"
+/*
+ ****************************************************************************************************
+2025/10/1 计划采用ADC来实现电量检测
+*/
+
+ADC_HandleTypeDef g_adc_handle;
+
+void adc_init(void)
+{
+    g_adc_handle.Instance = ADC_ADCX;
+    g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
+    g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE;
+    g_adc_handle.Init.ContinuousConvMode = DISABLE;
+    g_adc_handle.Init.NbrOfConversion = 1;
+    g_adc_handle.Init.DiscontinuousConvMode = DISABLE;
+    g_adc_handle.Init.NbrOfDiscConversion = 0;
+    g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+    HAL_ADC_Init(&g_adc_handle);
+
+    HAL_ADCEx_Calibration_Start(&g_adc_handle);
+}
+
+
+void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
+{
+    if(hadc->Instance == ADC_ADCX)
+    {
+        GPIO_InitTypeDef gpio_init_struct;
+        RCC_PeriphCLKInitTypeDef adc_clk_init = {0};
+
+        ADC_ADCX_CHY_CLK_ENABLE();
+        ADC_ADCX_CHY_GPIO_CLK_ENABLE();
+
+        adc_clk_init.PeriphClockSelection = RCC_PERIPHCLK_ADC;
+        adc_clk_init.AdcClockSelection = RCC_ADCPCLK2_DIV6;
+        HAL_RCCEx_PeriphCLKConfig(&adc_clk_init);
+
+
+        gpio_init_struct.Pin = ADC_ADCX_CHY_GPIO_PIN;
+        gpio_init_struct.Mode = GPIO_MODE_ANALOG;
+        HAL_GPIO_Init(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);
+    }
+}
+
+
+void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime)
+{
+    ADC_ChannelConfTypeDef adc_ch_conf;
+
+    adc_ch_conf.Channel = ch;
+    adc_ch_conf.Rank = rank;
+    adc_ch_conf.SamplingTime = stime;
+    HAL_ADC_ConfigChannel(adc_handle, &adc_ch_conf);
+}
+
+
+uint32_t adc_get_result(uint32_t ch)
+{
+    adc_channel_set(&g_adc_handle , ch, ADC_REGULAR_RANK_1, ADC_SAMPLETIME_239CYCLES_5);
+
+    HAL_ADC_Start(&g_adc_handle);
+    HAL_ADC_PollForConversion(&g_adc_handle, 10);
+    return (uint16_t)HAL_ADC_GetValue(&g_adc_handle);
+}
+
+
+uint32_t adc_get_result_average(uint32_t ch, uint8_t times)
+{
+    uint32_t temp_val = 0;
+    uint8_t t;
+
+    for (t = 0; t < times; t++)
+    {
+        temp_val += adc_get_result(ch);
+        HAL_Delay(5);
+    }
+
+    return temp_val / times;
+}
+
+
+
+
+
+
+
+

+ 48 - 287
Core/Src/main.c

@@ -262,7 +262,7 @@ int main(void)
   /* USER CODE BEGIN 2 */
 
   powerOn();
-
+  adc_init();
 
   // 启动 USART2 DMA 接收
   HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
@@ -303,302 +303,63 @@ int main(void)
   // 醒来后恢复 SysTick
   // HAL_ResumeTick();
  uint8_t Count = 0;
-      printf("start to sleep\r\n");
-      //进入睡眠模式
-    HAL_SuspendTick();
-    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
-    HAL_ResumeTick();
-    SystemClock_Config(); // STOP 模式后必须恢复时钟
+  uint16_t adcx;
+  float temp;
+    //   printf("start to sleep\r\n");
+    //   //进入睡眠模式
+    // HAL_SuspendTick();
+    // HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
+    // HAL_ResumeTick();
+    // SystemClock_Config(); // STOP 模式后必须恢复时钟
   while (TRUE)
   {
-
-
-    // if (Mac_Addr[0] != 0)
+    //   if (key_pressed_flag)
+    //   {
+    //     key_pressed_flag = 0;  // 清除标志
+    //     Count = 0;
+    //     if (Read_LoRa_Power_Status() == 1)
+    //     {
+    //       E52_CtlPowerOn_Fun();
+    //       HAL_Delay(2000);
+    //     }
+    //     if (Mac_Addr[0] != 0)
+    //     {
+    //       printf("模块被唤醒。开始发送自身MAC地址\r\n");
+    //       E52_Send_MAC_Fun(Mac_Addr, 6);
+    //     }
+    //   }
+    // HAL_Delay(100);
+    // Count++;
+    // if (Count == 100)
     // {
-    //   E52_CtlPowerOn_Fun();
-    //   HAL_Delay(1500);
-    //   // for (uint8_t i = 0; i < 6; i++)
-    //   // {
-    //   //   printf("%02x ", Mac_Addr[i]);
-    //   // }
-    //   // printf("\r\n");
-    //   E52_Send_MAC_Fun(Mac_Addr, 6);
-    //   HAL_Delay(1000);
     //   E52_CtlPowerOff_Fun();
+    //   HAL_SuspendTick();
+    //   HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
+    //   HAL_ResumeTick();
+    //   SystemClock_Config(); // STOP 模式后必须恢复时钟
     // }
-      if (key_pressed_flag)
-      {
-        key_pressed_flag = 0;  // 清除标志
-        Count = 0;
-        if (Read_LoRa_Power_Status() == 1)
-        {
-          E52_CtlPowerOn_Fun();
-          HAL_Delay(2000);
-        }
-        if (Mac_Addr[0] != 0)
-        {
-          printf("模块被唤醒。开始发送自身MAC地址\r\n");
-          E52_Send_MAC_Fun(Mac_Addr, 6);
-        }
-      }
-    HAL_Delay(100);
-    Count++;
-    if (Count == 100)
-    {
-      E52_CtlPowerOff_Fun();
-      HAL_SuspendTick();
-      HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
-      HAL_ResumeTick();
-      SystemClock_Config(); // STOP 模式后必须恢复时钟
-    }
 
+    adcx = adc_get_result_average(ADC_ADCX_CHY, 10);
+    printf("adcx:%d\r\n", adcx);
+    float v_adc = (3.3f * adcx) / 4095.0f; // ADC电压值
+    printf("v_adc:%.4f\r\n", v_adc);
+    float v_bat = v_adc * ( (301.0f + 100.0f) / 100.0f );
+    printf("v_bat:%.4f\r\n", v_bat);
+    printf("v_adc:%.4f, v_bat:%.4f\r\n", v_adc, v_bat);
 
+    // temp = (float)adcx * (3.3 / 4096);
+    // adcx = temp;
+    // printf("整数部分:%d\r\n", adcx);
+    //
+    //
+    // temp -= adcx;
+    // temp *= 1000;
+    // printf("小数部分 :%f\r\n", temp);
 
 
-    // HAL_Delay(1000);
-  }
-  // if (deviceInfo.loraDeviceAddress_H == 0xFF || deviceInfo.loraDeviceAddress_L == 0xFF || deviceInfo.loraDeviceAddress_H == 0x00 || deviceInfo.loraDeviceAddress_L == 0x00) { // 未设置Lora地址,应该是初次启动,配置Lora地址蓝牙等
-  //   HAL_Delay(4000);
-  //   printf("开始初始化\r\n");
-  //   printf("切换为观察者模式\r\n");
-  //   E104_BT5005A_ROLE1_Fun();
-  //   HAL_Delay(2000);
-  //   printf("初始化扫描间隔\r\n");
-  //   E104_BT5005A_SCANINTV_Fun();
-  //   HAL_Delay(2000);
-  //   printf("初始化扫描窗口\r\n");
-  //   E104_BT5005A_SCANWND_Fun();
-  //   HAL_Delay(2000);
-  //
-  //
-  //   printf("初始化复位\r\n");
-  //   E104_BT5005A_RESET_Fun();
-  //   HAL_Delay(2000);
-  //   Device_Info_Init_Fun();
-  //   printf("开启Lora广播模块\r\n");
-  //   E52_CONFIG_BROADCAST_TYPE_FUN(BROADCAST_ALL);
-  //   HAL_Delay(2000);
-  //   const char *lora_msg1 = "AT+TYPE=1";
-  //   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg1, strlen(lora_msg1), HAL_MAX_DELAY);
-  //   HAL_Delay(2000);
-  //   const char *lora_msg3 = "AT+HEAD=0";
-  //   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg3, strlen(lora_msg3), HAL_MAX_DELAY);
-  //   HAL_Delay(2000);
-  //   const char *lora_msg4 = "AT+SRC_ADDR=?";
-  //   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
-  //   HAL_Delay(2000);
-  //
-  //   while (TRUE) {
-  //     if (deviceInfo.loraDeviceAddress_H == 0xFF && deviceInfo.loraDeviceAddress_L == 0xFF) {
-  //       HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
-  //       HAL_Delay(4000);
-  //     }else {
-  //       break;
-  //     }
-  //   }
-  // }else {
-  //   printf("已配置\r\n");
-  // }
-  //
-  // srand(HAL_GetTick());
-  // /* USER CODE END 2 */
-  //
-  // /* Infinite loop */
-  // /* USER CODE BEGIN WHILE */
-  //
-  // printf("Device is ready\r\n");
-  // printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
-  // uint8_t i = 0;
-  // // uint8_t ledShanshuo = 0;
-  // while (1)
-  // {
-  //   /* USER CODE END WHILE */
-  //
-  //   /* USER CODE BEGIN 3 */
-  //
-  //   // 检查是否接收到"心跳"命令,且设备在线
-  //   if (!deviceInfo.isOnline) {
-  //     RTC_TimeTypeDef now = {0};
-  //     HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
-  //
-  //     int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
-  //                        - (Online_struct.Hours * 3600 + Online_struct.Minutes * 60 + Online_struct.Seconds);
-  //     if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
-  //
-  //     // printf("发送上报时间 按下持续时间: %d 秒\r\n", pressedSeconds);
-  //
-  //     if (pressedSeconds >= 10) {
-  //       E52_Heartbeat_Fun();
-  //       // printf("111111\r\n");
-  //       Online_struct = now;  // 记录上报时间
-  //     }
-  //   }
-  //
-  //   if (deviceInfo.isSOS) {
-  //     deviceInfo.isOnline = TRUE;
-  //     RTC_TimeTypeDef now = {0};
-  //     HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
-  //
-  //     int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
-  //                        - (SOS_struct.Hours * 3600 + SOS_struct.Minutes * 60 + SOS_struct.Seconds);
-  //     if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
-  //     printf("SOS按下时间为:%d\r\n",pressedSeconds);
-  //
-  //     if (pressedSeconds >= 20) { //如果出现异常情况,导致SOS一直处于被按下情况,关闭SOS。
-  //       deviceInfo.isSOS = FALSE;
-  //     }
-  //   }
-  //
-  //   if (GET_CMD( deviceInfo.commandFromCloud) == IDLE || GET_STEP(deviceInfo.commandFromCloud) == STEP_INIT) {
-  //     // printf("为idle状态的时间为\r\n");
-  //     RTC_TimeTypeDef now = {0};
-  //     HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
-  //     IDLE_struct = now;  // 记录上报时间
-  //   }else {
-  //     RTC_TimeTypeDef now = {0};
-  //     HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
-  //
-  //     int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
-  //                        - (IDLE_struct.Hours * 3600 + IDLE_struct.Minutes * 60 + IDLE_struct.Seconds);
-  //     if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
-  //     // printf("不为idle状态的时间为:%d\r\n",pressedSeconds);
-  //
-  //     if (pressedSeconds >= 20) {
-  //       deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //       // printf("111111\r\n");
-  //       IDLE_struct = now;  // 记录上报时间
-  //     }
-  //   }
-  //
-  //
-  //
-  //   // 解析后台命令
-  //   if (GET_CMD( deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY) {
-  //     E52_Analyze_Data();
-  //   }
-  //
-  //   // 03:请求蓝牙数据
-  //   if (((GET_CMD(deviceInfo.commandFromCloud) == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline ) || deviceInfo.isSOS))  {
-  //     switch (GET_STEP(deviceInfo.commandFromCloud)) {
-  //       case REQUEST_BLUETOOTH_DATA_SCAN:
-  //         Timer_Managment_Fun(&htim4, TIMER_OP_START);
-  //         deviceInfo.BlDataFlag = BL_START;
-  //         printf("开启蓝牙扫描\r\n");
-  //         break;    //扫描蓝牙阶段
-  //
-  //       case REQUEST_BLUETOOTH_DATA_SEND:
-  //         Timer_Managment_Fun(&htim4, TIMER_OP_STOP);
-  //         deviceInfo.BlDataFlag = BL_STOP;
-  //         i = 0;
-  //         while (receiveBlDataCount > i) {
-  //
-  //           // printf("发送第%d个蓝牙数据给Lora\r\n", i);
-  //           if (deviceInfo.loraSendSuccessFlag == 0) {
-  //             E52_Send_Bl_Data_Fun(i,0x00);
-  //           }else {
-  //             continue;
-  //           }
-  //           memset(totalData[i], 0, sizeof(totalData[i]));
-  //           i++;
-  //         }
-  //         // printf("发送最后一位,开始发送蓝牙数据给Lora\r\n");
-  //         E52_Send_Bl_Data_Fun(i,0x01);
-  //         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
-  //         printf("发送完成\r\n");
-  //         break;          //发送数据阶段
-  //       case STEP_COMPLETE:
-  //         receiveBlDataCount = 0;
-  //         deviceInfo.timeCount = 0;
-  //         deviceInfo.forwardBLAndLoraDataDuration = 0;
-  //         i = 0;
-  //         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //         break;
-  //
-  //       default:
-  //         // 处理未知步骤
-  //         if (deviceInfo.isSOS) {
-  //           // HAL_Delay(1000);
-  //           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);
-  //           rx_buf_uart2[0] = 0x55;
-  //           rx_buf_uart2[1] = 0xBB;
-  //           rx_buf_uart2[2] = 0x03;
-  //           rx_buf_uart2[3] = deviceInfo.loraDeviceAddress_H;
-  //           rx_buf_uart2[4] = deviceInfo.loraDeviceAddress_L;
-  //           rx_buf_uart2[5] = 0x03;
-  //           rx_buf_uart2[6] = 0xE8;
-  //           rx_buf_uart2[7] = 0x00;
-  //           rx_buf_uart2[8] = 0xFF;
-  //           rx_buf_uart2[9] = 0xEE;
-  //         }else {
-  //           receiveBlDataCount = 0;
-  //           deviceInfo.timeCount = 0;
-  //           deviceInfo.forwardBLAndLoraDataDuration = 0;
-  //           i = 0;
-  //           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //         }
-  //         break;
-  //     }
-  //   }
-  //
-  //   // 08:请求心跳数据
-  //   if (GET_CMD( deviceInfo.commandFromCloud)  == E52_HEARTBEAT && deviceInfo.isOnline) {
-  //     switch (GET_STEP(deviceInfo.commandFromCloud)) {
-  //       case HEARTBEAT_SEND:
-  //         if (deviceInfo.loraSendSuccessFlag == 0) {
-  //           E52_Heartbeat_Fun();
-  //         }else {
-  //           continue;
-  //         }
-  //         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
-  //         break;
-  //       case STEP_COMPLETE:
-  //         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //         break;
-  //
-  //       default:
-  //         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //         printf("收到未知步骤,忽略处理\r\n");
-  //         break;
-  //     }
-  //   }
-  //
-  //   // 07:配置E52
-  //   if (GET_CMD( deviceInfo.commandFromCloud)  == CONFIGURE_E52 && deviceInfo.isOnline) {
-  //     switch (GET_STEP(deviceInfo.commandFromCloud)) {
-  //         case CONFIGURE_E52_SET_BROADCAST_TYPE:      //第一步,配置广播类型
-  //             E52_CONFIG_BROADCAST_TYPE_FUN(deviceInfo.broadcast_type);
-  //             HAL_Delay(2000);
-  //             if (deviceInfo.broadcast_type == BROADCAST_ALL) {
-  //               deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, STEP_COMPLETE);       //TODO 广播,直接结束.或者进入测试流程。
-  //             }else {
-  //               deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, CONFIGURE_E52_SET_LORA_ADDRESS); //第三步,配置Lora地址
-  //             }
-  //         break;
-  //
-  //         case CONFIGURE_E52_SET_LORA_ADDRESS:
-  //             E104_BT5005A_DST_ADDR_Fun();
-  //             HAL_Delay(2000);
-  //             deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, STEP_COMPLETE);       //TODO 广播,直接结束.或者进入测试流程。
-  //         break;        //如果是单波,多播,配置目标地址
-  //
-  //         case STEP_COMPLETE:
-  //           if (deviceInfo.loraSendSuccessFlag == 0) {
-  //             E52_Heartbeat_Fun();
-  //           }else {
-  //             continue;
-  //           }
-  //           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //         break;
-  //
-  //         default:
-  //           printf("未知配置命令\r\n");
-  //           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-  //         ;break;
-  //     }
-    // }
 
-  // }
-  /* USER CODE END 3 */
+    HAL_Delay(2000);
+  }
 }
 
 /**

+ 1 - 1
cmake/gcc-arm-none-eabi.cmake

@@ -35,7 +35,7 @@ set(CMAKE_CXX_FLAGS_RELEASE "-Os -g0")
 
 set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics")
 
-set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS}")
+set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS}    -Wl,-u,_printf_float" )
 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T \"${CMAKE_SOURCE_DIR}/STM32F103XX_FLASH.ld\"")
 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs")
 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Wl,--gc-sections")

+ 2 - 0
cmake/stm32cubemx/CMakeLists.txt

@@ -47,6 +47,8 @@ set(STM32_Drivers_Src
     ${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c
     ${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c
     ${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c
+	${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c
+	${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c
 )
 
 # Drivers Midllewares