/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * *

© Copyright (c) 2023 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "adc.h" #include "dma.h" #include "spi.h" #include "tim.h" #include "usart.h" #include "gpio.h" #include "OLED_Fonts.h" #include "string.h" #include #include #include #include "my.h" #include "ssd1306.h" #include "screen.h" #include "keys.h" #include "struct.h" //#include "arm_math.h" #define ALLWAISRELOAD 0 /// тестовый - всегда перегружен char pString[16]; void SystemClock_Config(void); uint16_t workMode = AMPLIFIER; //CALLIBRATION //AMPLIFIER // по умолчанию норм режим работы, не заводской. int menuPointer = 0; ///Указатель меню 0 - ничего 1-4 цифры Кпр. 5 точка КПР 6-чувств выхода 7-фвч 8 фнч 9 ПЗ; extern int RefreshScreen; extern uint32_t ind_buff; //сдвиг буфера!!!! extern uint32_t current_buff; //текущий элемент буфера volatile int needRefresh; /// extern uint16_t ADC_Buff[ADC_BUFFSIZE]; //буфер ацп uint16_t meashBuff[DMA_BUFFSIZE]; uint8_t buff[16] = {0,}; // буфер для приема extern __IO bool needSave; uint32_t dotPositon; // позиция точки int reload_flag=1; //флаг перегрузки int ignoreOff_flag=1; //игнорирование кнопки питания uint16_t dvd=0xfff; //Дефолтное значение для отправки на цап ОТЛАДКА float kNormToDAC = 0; // К для нормирования согласно чувствительности датчика uint16_t correctedKu[13]; //коэфициэнты коррекции для коэфициэнтов усиления __I uint16_t AVG_ADC = 2100; //среднее ацп //__I - input - то есть константный __I uint16_t HIGH_GATE_ADC = 4030; __I uint16_t LOW_GATE_ADC = 179; void check_reload(void); // todo отнеси на место UserData_TypeDef currentData; int main(void) { HAL_Init(); SystemClock_Config(); MX_FLASH_Init(); MX_GPIO_Init(); MX_DMA_Init(); MX_TIM3_Init(); MX_ADC1_Init(); MX_SPI1_Init(); MX_TIM7_Init(); //currentData.BAUD = 5; // usart.c BAUDRATE[] = {4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 128000, 230400}; //currentData.INFB = 0; MX_USART1_UART_Init(); /////Делем старт экрану ssd1306_Init(); HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_RESET); //фиксируем питание прибора if(HAL_GPIO_ReadPin(OK_BTN_GPIO_Port, OK_BTN_Pin) == GPIO_PIN_RESET){workMode=CALLIBRATION;} // при удерживании кнопки переключаемся в заводской режим работы DrawLogo(); ssd1306_Fill(Black); ssd1306_UpdateScreen(); // if(workMode==NORMAL){screenDraw(); // todo: Убрать костыль!!! Считаем в экране значение на DAC. sh_applysetting(¤tData); }// применяем настройки из стуктуры с ЦАП на всю while (workMode==NORMAL){ if(needSave) { needSave = false; sh_applysetting(¤tData); wrPar(); } HAL_UART_Receive_IT(&huart1, (uint8_t*)buff, 1); //начало цепочки прерываний check_reload(); keysHandler(); if(RefreshScreen){ screenDraw(); ssd1306_UpdateScreen(); ssd1306_Fill(0x00); RefreshScreen=0; } //end if RefreshScreen } //end while if(workMode==CALLIBRATION){ screenDrawCallibration(); // todo: Убрать костыль!!! Считаем в экране значение на DAC. kNormToDAC=1;//todo: посыпались костыли жестко ставим единицу для настройки прибора currentData.SENS =1; currentData.IKU=1; // зачем??)) currentData.IFN=Lp100000; currentData.IFV=Hp0_2; sh_applysetting(¤tData); }// while (workMode==CALLIBRATION){ check_reload(); keysHandlerCallibration(); if(RefreshScreen){ screenDrawCallibration(); ssd1306_UpdateScreen(); ssd1306_Fill(0x00); RefreshScreen=0; } //end if RefreshScreen } //end while } //end main /** * @brief System Clock Configuration * @retval None */ void check_reload(void){ static __IO uint32_t reloadOffTime=0; uint32_t isReloaded=ALLWAISRELOAD; /*__IO uint32_t tick=HAL_GetTick(); //для замеров времени */ memcpy((void *) &meashBuff[0], (void *) &ADC_Buff[current_buff], DMA_BUFFSIZE<<1); for(uint16_t i=0; iHIGH_GATE_ADC||meashBuff[i]