/* 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();
/////Делем старт экрану
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_RESET); //фиксируем питание прибора
ssd1306_Init();
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.
menuPointer=currentData.MENUPOINTER; //читаем текущий пункт из памяти
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();
currentData.MENUPOINTER=menuPointer;
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]