/* 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]