/* 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"
volatile int needRefresh; ///
char pString[16];
char* FloatToASCII(float Val, int32_t RoundTo); //пока объявлю её тут
void SystemClock_Config(void);
int menuPointer = 0; ///Указатель меню 0 - ничего 1-4 цифры Кпр. 5 точка КПР 6-чувств выхода 7-фвч 8 фнч 9 ПЗ;
extern int RefreshScreen;
extern uint32_t ind_buff; //сдвиг буфера!!!!
extern uint32_t current_buff; //текущий элемент буфера
extern uint16_t ADC_Buff[ADC_BUFFSIZE];
uint16_t meashBuff[DMA_BUFFSIZE];
int sourceDac=0;
int reload_flag=0;
int ignoreOff_flag=1;
uint16_t dvd=0xfff;
__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);
UserData_TypeDef currentData;
int main(void)
{
/* currentData.OWN; // 0,1 4001 // Адрес устройства
currentData.BAUD; // 2,3 4002 // скорость передачи
currentData.INFB; // 4,5 4003 //бит четности
currentData.IIN; // 6,7 5001 //тип заряда ACP=
currentData.IFV =Hp0_1; // 8,9 5002 //фильтр верхних частот
currentData.IFN=Lp100; // 10,11 5003 //нижних
currentData.IKU=Ku0_1; // 12,13 5004 //Коэф усиления
currentData.IK0=1; // 14,15 5005 // знакоместо 0
currentData.IK1='~'; // 16,17 5006 // знакоместо 1
currentData.IK2=5; // 18,19 5007 // знакоместо 2
currentData.IK3=4; // знакоместо 3
currentData.IK4=4; // знакоместо 4
currentData.IPZ; // 20,21 5008 // плавающая земля
currentData.KCOND; // 24,25,26,27 7501 //
currentData.SENS; // 28,29,30,31 7502 //дублирование (коэфициэнт преобразования)
currentData.ACCEL; // 32,33,34,35 7503 //
*/
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();
MX_USART1_UART_Init();
/////Делем старт экрану
ssd1306_Init();
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_RESET); //фиксируем питание прибора
DrawLogo();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
sh_applysetting(¤tData, dvd); // применяем настройки из стуктуры с ЦАП на всю
while (1){
check_reload();
keysHandler();
if(RefreshScreen){
screenDraw();
ssd1306_UpdateScreen();
ssd1306_Fill(0x00);
RefreshScreen=0;
}
}
}
/**
* @brief System Clock Configuration
* @retval None
*/
void check_reload(void){
static __IO uint32_t reloadOffTime=0;
uint32_t isReloaded=0;
/*__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]