diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 822e527..c8c8690 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - + diff --git a/Core/Inc/flash.h b/Core/Inc/flash.h index eb871f4..08d9215 100644 --- a/Core/Inc/flash.h +++ b/Core/Inc/flash.h @@ -20,5 +20,6 @@ void MX_FLASH_Init(void); +void rdPar(void); #endif /* INC_FLASH_H_ */ diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 9a453cb..f2a3705 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -58,25 +58,25 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ -#define FL_Pin GPIO_PIN_0 -#define FL_GPIO_Port GPIOC -#define STD_Pin GPIO_PIN_1 -#define STD_GPIO_Port GPIOC -#define SCK_Pin GPIO_PIN_2 +#define FL_Pin GPIO_PIN_0 // ФЛ на ЦАП +#define FL_GPIO_Port GPIOC // ФЛ на ЦАП +#define STD_Pin GPIO_PIN_1 // +#define STD_GPIO_Port GPIOC // +#define SCK_Pin GPIO_PIN_2 //STB на ЦАП #define SCK_GPIO_Port GPIOC -#define ON_Pin GPIO_PIN_4 //Был3 +#define ON_Pin GPIO_PIN_4 //Был3 #define ON_GPIO_Port GPIOC -#define OFF_Pin GPIO_PIN_2 -#define OFF_GPIO_Port GPIOA -#define A0_Pin GPIO_PIN_0 +#define OFF_Pin GPIO_PIN_2 //!!!! Не соответсвует схеме!!! PA3 - OFF +#define OFF_GPIO_Port GPIOA //!!! +#define A0_Pin GPIO_PIN_0 //КПР 1 10 0,1 #define A0_GPIO_Port GPIOB -#define A1_Pin GPIO_PIN_1 +#define A1_Pin GPIO_PIN_1 //КПР 1 10 0,1 #define A1_GPIO_Port GPIOB -#define A2_Pin GPIO_PIN_2 +#define A2_Pin GPIO_PIN_2 //ФВЧ #define A2_GPIO_Port GPIOB -#define K10_Pin GPIO_PIN_10 +#define K10_Pin GPIO_PIN_10 //КУС10 #define K10_GPIO_Port GPIOB -#define OK_BTN_Pin GPIO_PIN_12 +#define OK_BTN_Pin GPIO_PIN_12 // #define OK_BTN_GPIO_Port GPIOB #define DN_BTN_Pin GPIO_PIN_13 #define DN_BTN_GPIO_Port GPIOB @@ -88,20 +88,25 @@ void Error_Handler(void); #define USART1_RE_GPIO_Port GPIOA #define RESET_Pin GPIO_PIN_12 #define RESET_GPIO_Port GPIOA -#define A3_Pin GPIO_PIN_3 +#define A3_Pin GPIO_PIN_3 //ФВЧ #define A3_GPIO_Port GPIOB -#define A4_Pin GPIO_PIN_4 +#define A4_Pin GPIO_PIN_4 //КУС 1,2,5,10 #define A4_GPIO_Port GPIOB -#define A5_Pin GPIO_PIN_5 +#define A5_Pin GPIO_PIN_5 //КУС 1,2,5,10 #define A5_GPIO_Port GPIOB -#define A7_Pin GPIO_PIN_6 +#define A6_Pin GPIO_PIN_6 //ФНЧ +#define A6_GPIO_Port GPIOB +#define A7_Pin GPIO_PIN_7 //ФНЧ #define A7_GPIO_Port GPIOB -#define A7B7_Pin GPIO_PIN_7 -#define A7B7_GPIO_Port GPIOB -#define A7B8_Pin GPIO_PIN_8 -#define A7B8_GPIO_Port GPIOB -#define PZ_Pin GPIO_PIN_9 +#define A8_Pin GPIO_PIN_8 //ФВЧ +#define A8_GPIO_Port GPIOB +#define PZ_Pin GPIO_PIN_9 //Плавающая земля #define PZ_GPIO_Port GPIOB + +#define DMA_BUFFSIZE 4096 +#define ADC_BUFFSIZE 8192 + + /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ diff --git a/Core/Inc/my.h b/Core/Inc/my.h index efeccb0..8588ba8 100644 --- a/Core/Inc/my.h +++ b/Core/Inc/my.h @@ -20,15 +20,20 @@ #include #include "flash.h" #include "string.h" - +#include "ssd1306.h" +#include #define LOGO_TIME_MS (500u) #define lo(x) ((uint8_t) ((x) & 0xFF)) #define hi(x) ((uint8_t) (((x) >> 8) & 0xFF)) - #define ABS(x) (((x) < 0)?-(x) :(x)) +typedef enum +{ + CURSOR = Black, + TEXT = White +}typeTEXT; static const uint16_t Crc16Table[256] = { @@ -69,14 +74,35 @@ static const uint16_t Crc16Table[256] = static const uint16_t sendtime[]={ 2400, 1600, 1200, 800, 600, 308, 200, 108, 94, 54 }; static const uint16_t time35[] = { 8, 6, 6, 6, 4, 4, 4, 1, 4, 4 }; - +void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode); typedef enum { CHARGE = 0} typeIIN; typedef enum { Ku0_1 = 0, Ku0_2, Ku0_5, Ku1, Ku2, Ku5, Ku10, Ku20, Ku50, Ku100, Ku200, Ku500 } typeIKU; typedef enum { Hp0_1 = 0, Hp1, Hp2, Hp10 } typeIFV; typedef enum { Lp100 = 0, Lp300, Lp1000, Lp3000, Lp10000, Lp30000, Lp100000 } typeIFN; +typedef enum +{ + WORK = 0, + KPR0 , + KPR1 , + KPR2 , + KPR3 , + KPR4 , + KPRSAVING, + OUT , + FVCH , + FNCH, + GROUND, + SAVING +}mainMenuState; - +int asciiToFloat4(uint16_t str[]); +void sh_SetFnch(uint16_t IFN); +void sh_SetPlavZeml(uint16_t IPZ); +void WRDAC(uint16_t DVD); +void sh_SetFvch(uint16_t IFV); +void sh_SetOutGain(uint16_t IKU); +void sh_applysetting(UserData_TypeDef * currentData, uint16_t DVD); #endif /* INC_MY_H_ */ diff --git a/Core/Inc/struct.h b/Core/Inc/struct.h index fb39d55..2e25669 100644 --- a/Core/Inc/struct.h +++ b/Core/Inc/struct.h @@ -64,26 +64,28 @@ typedef union //********************************************************************************************************************************* typedef struct -{ - uint16_t OWN; // 0,1 4001 - uint16_t BAUD; // 2,3 4002 - uint16_t INFB; // 4,5 4003 +{ //колличкство байт должно делится на 4 иначе не пишет! + uint16_t OWN; // 0,1 4001 // Адрес устройства + uint16_t BAUD; // 2,3 4002 // скорость передачи + uint16_t INFB; // 4,5 4003 //бит четности - uint16_t IIN; // 6,7 5001 - uint16_t IFV; // 8,9 5002 - uint16_t IFN; // 10,11 5003 - uint16_t IKU; // 12,13 5004 - uint16_t IKE; // 14,15 5005 - uint16_t IKD; // 16,17 5006 - uint16_t IKS; // 18,19 5007 - uint16_t IPZ; // 20,21 5008 - uint16_t OPZ; // 22,23 5009 + uint16_t IIN; // 6,7 5001 //тип заряда ACP= + uint16_t IFV; // 8,9 5002 //фильтр верхних частот + uint16_t IFN; // 10,11 5003 //нижних + uint16_t IKU; // 12,13 5004 //Коэф усиления + uint16_t IK0; // 14,15 5005 // знакоместо 0 + uint16_t IK1; // 16,17 5006 // знакоместо 1 + uint16_t IK2; // 18,19 5007 // знакоместо 2 + uint16_t IK3; // 20,21 // знакоместо 3 + uint16_t IK4; // 22,23 // знакоместо 4 - float KCOND; // 24,25,26,27 7501 - float SENS; // 28,29,30,31 7502 - float ACCEL; // 32,33,34,35 7503 -} UserData_TypeDef; // ********LENGTH = 28 bytes*********** + uint16_t IPZ; // 24,25 5008 // плавающая земля + + float KCOND; // 28,29,30,31 7501 // + float SENS; // 32,33,34,35 7502 //дублирование (коэфициэнт преобразования) + +} UserData_TypeDef; // ********LENGTH = 39 bytes*********** diff --git a/Core/Src/adc.c b/Core/Src/adc.c index e510584..00cbd2f 100644 --- a/Core/Src/adc.c +++ b/Core/Src/adc.c @@ -19,7 +19,8 @@ /* Includes ------------------------------------------------------------------*/ #include "adc.h" - +#include "tim.h" +#include "string.h" /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ @@ -27,6 +28,11 @@ ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1; +uint16_t DMA_Buff[DMA_BUFFSIZE]; +uint16_t ADC_Buff[ADC_BUFFSIZE]; +uint32_t ind_buff=0; //для сдвига буфера +uint32_t current_buff=0; //текуший + /* ADC1 init function */ void MX_ADC1_Init(void) { @@ -44,12 +50,12 @@ void MX_ADC1_Init(void) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; - hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; //разрешение ацп hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; - hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO; + hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO; //внешний тригер для запуска конверсии hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = ENABLE; @@ -69,6 +75,9 @@ void MX_ADC1_Init(void) } /* USER CODE BEGIN ADC1_Init 2 */ + HAL_ADC_Start_DMA(&hadc1, (uint32_t *) &DMA_Buff[0], DMA_BUFFSIZE); // ДМА копирует результаты с АЦП в этот массив ///halfword??? как только 1024, то прерывание + HAL_TIM_Base_Start(&htim3); //стартуем таймер + HAL_TIM_GenerateEvent(&htim3, TIM_EVENTSOURCE_UPDATE); // Разрешаем генерить? наверное нужно делать в цикле? //попробовать по соему /* USER CODE END ADC1_Init 2 */ } @@ -147,6 +156,14 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) } /* USER CODE BEGIN 1 */ +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) +{ + memcpy((void *) &ADC_Buff[ind_buff], (void *) DMA_Buff, DMA_BUFFSIZE<<1); //назначение, источник, размер //<< Значит умножить на 2 + current_buff=ind_buff; + if(ind_buff==0) ind_buff=DMA_BUFFSIZE; + else ind_buff=0; +} + /* USER CODE END 1 */ diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 5cd473f..3dd5a33 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -43,7 +43,7 @@ void MX_DMA_Init(void) /* DMA interrupt init */ /* DMA2_Stream0_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0); + HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 2, 0); HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); } diff --git a/Core/Src/flash.c b/Core/Src/flash.c index c4ee25e..d29b637 100644 --- a/Core/Src/flash.c +++ b/Core/Src/flash.c @@ -13,7 +13,7 @@ static FLASH_EraseInitTypeDef FlashEraseInit; -__IO UserData_TypeDef pardata; +__IO extern UserData_TypeDef currentData; __IO uint16_t COUNT_EXT = 0; @@ -50,7 +50,7 @@ uint32_t SECTORError = 0; if(HAL_FLASHEx_Erase(&FlashEraseInit, &SECTORError) == HAL_OK) { Address = USERPAGE; - pData = (uint32_t *) &pardata; + pData = (uint32_t *) ¤tData; for(i = 0; i < lenpar; i++) { HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, *pData++); @@ -69,28 +69,29 @@ uint32_t lenpar; volatile bool rewrite = false; lenpar = sizeof(UserData_TypeDef); - memcpy((void *) &pardata, (void *) USERPAGE, lenpar); + memcpy((void *) ¤tData, (void *) USERPAGE, lenpar); //pardata.OWN = 0xffff;//todo - if(pardata.OWN == 0xffff) + if(currentData.OWN == 0xffff) { - pardata.OWN = 1; //адресс нодбас - pardata.BAUD = 5; - pardata.INFB = 1; + currentData.OWN = 1; //адресс нодбас + currentData.BAUD = 5; + currentData.INFB = 1; - pardata.IIN = CHARGE; - pardata.IFV = Hp0_1; - pardata.IFN = Lp100000; - pardata.IKU = Ku1; - pardata.IKE = 1; - pardata.IKD = 0; - pardata.IKS = 0; - pardata.IPZ = 0; - pardata.OPZ = 0; + currentData.IIN = CHARGE; + currentData.IFV = Hp0_1; + currentData.IFN = Lp100000; + currentData.IKU = Ku1; + currentData.IK0 = 1; + currentData.IK1 = 0; + currentData.IK2 = 0; + currentData.IK3 = 0; + currentData.IK4 = 0; - pardata.KCOND = 1.0f; - pardata.SENS = 1.0f; - pardata.ACCEL = 100.0f; + currentData.IPZ =0; + + currentData.KCOND = 1.0f; + currentData.SENS = 1.0f; rewrite = true; } diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 8878a2e..01ff74e 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -53,8 +53,8 @@ void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, A0_Pin|A1_Pin|A2_Pin|K10_Pin - |A3_Pin|A4_Pin|A5_Pin|A7_Pin - |A7B7_Pin|A7B8_Pin, GPIO_PIN_RESET); + |A3_Pin|A4_Pin|A5_Pin|A6_Pin + |A7_Pin|A8_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, SPI1_CS_Pin|RESET_Pin, GPIO_PIN_SET); @@ -82,8 +82,8 @@ void MX_GPIO_Init(void) PBPin PBPin PBPin PBPin PBPin PBPin PBPin */ GPIO_InitStruct.Pin = A0_Pin|A1_Pin|A2_Pin|K10_Pin - |A3_Pin|A4_Pin|A5_Pin|A7_Pin - |A7B7_Pin|A7B8_Pin|PZ_Pin; + |A3_Pin|A4_Pin|A5_Pin|A6_Pin + |A7_Pin|A8_Pin|PZ_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; diff --git a/Core/Src/main.c b/Core/Src/main.c index dc66358..052eb6f 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -31,359 +31,150 @@ #include #include #include "my.h" - #include "ssd1306.h" +#include "screen.h" +#include "keys.h" +#include "struct.h" +//#include "arm_math.h" + -__IO uint16_t repeat = 0; volatile int needRefresh; /// -typedef enum -{ - CURSOR = Black, - TEXT = White -}typeTEXT; +char pString[16]; +char* FloatToASCII(float Val, int32_t RoundTo); //пока объявлю её тут void SystemClock_Config(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ +int menuPointer = 0; ///Указатель меню 0 - ничего 1-4 цифры Кпр. 5 точка КПР 6-чувств выхода 7-фвч 8 фнч 9 ПЗ; +extern int RefreshScreen; +extern uint32_t ind_buff; //сдвиг буфера!!!! +extern uint32_t current_buff; //текущий элемент буфера -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ +extern uint16_t ADC_Buff[ADC_BUFFSIZE]; +uint16_t meashBuff[DMA_BUFFSIZE]; -/* USER CODE END 0 */ -/** - * @brief The application entry point. - * @retval int - */ +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); -//0,2; 1; 2; 10 фвч -//0,1; 0,3; 1; 3; 10; 30; 100 фнч - - -typedef struct { - int kPr; - int kExit; - int FVCH; - int FNCH; -} set_type; - - -char pString[16] = {0}; - -char* FloatToASCII(float Val, int32_t RoundTo) -{ -uint8_t idx = 0; -int32_t i; -float value, F, I; -uint32_t rnd = 0; - -uint32_t Tmp32 = 0; -uint32_t Int32 = 0; -uint32_t Frac32 = 0; -uint32_t _I32 = 0; -uint32_t _F32 = 0; -uint32_t d = 0, dd = 0; -char tmparray[32]; -volatile bool minus = false; - memset(tmparray, 0, 32); - memset(pString, 0, 16); - - value = Val; - if(value < 0) - minus = true; - - if((Val >= 10000.00000f)/* || (Val <= 0)*/) - { - if(Val <= 0) - { - pString[0] = '0'; - pString[1] = '~'; - pString[2] = '0'; - pString[3] = '\0'; - } - else - { - pString[0] = '1'; - pString[1] = '0'; - pString[2] = '0'; - pString[3] = '0'; - pString[4] = '0'; - pString[5] = '\0'; - } - - return pString; - } - - value = ABS(Val); - rnd = ABS(RoundTo); - if(RoundTo < 0) - { - F = modff(value, &I); - while(rnd) - { - F *= 10.0f; - rnd--; - d++; - } - F = roundf(F); - - dd = 1; - for(i = 0; i < d; i++) - dd *= 10; - - if((uint32_t) F == dd) - { - F = 0; - I += 1; - } - - } - else - { - I = roundf(value); - F = 0.0f; - } - - Int32 = (uint32_t) I; - Frac32 = (uint32_t) F; - _I32 = Int32; - _F32 = Frac32; - - - idx = 0; - tmparray[idx++] = '\0'; - if((Int32 == 0) && (Frac32 == 0)) - { - if(RoundTo < 0) - { - for(i = 0; i < abs(RoundTo); i++) - tmparray[idx++] = '0'; - tmparray[idx++] = '~'; - } - tmparray[idx++] = '0'; - } - else - { - if(RoundTo < 0) - { - for(i = 0; i < abs(RoundTo); i++) - { - Tmp32 = Frac32; - Frac32 /= 10; - Tmp32 = Tmp32 - Frac32 * 10; - tmparray[idx++] = '0' + Tmp32; - } - tmparray[idx++] = '~'; - } - - if(Int32 != 0) - { - while(Int32) - { - Tmp32 = Int32; - Int32 /= 10; - Tmp32 = Tmp32 - Int32 * 10; - tmparray[idx++] = '0' + Tmp32; - } - } - else - tmparray[idx++] = '0'; - - if(minus) - { - if((_I32 != 0) || (_F32 != 0)) - tmparray[idx++] = '-'; - } - } - - for(i = 0; i < idx; i++) - pString[i] = tmparray[idx - i - 1]; - - return pString; -} - - -uint16_t readkey(void) -{ -uint16_t key = 0; - - if(HAL_GPIO_ReadPin(OK_BTN_GPIO_Port, OK_BTN_Pin) == GPIO_PIN_RESET) - key |= OK_BTN_Pin; - if(HAL_GPIO_ReadPin(UP_BTN_GPIO_Port, UP_BTN_Pin) == GPIO_PIN_RESET) - key |= UP_BTN_Pin; - if(HAL_GPIO_ReadPin(DN_BTN_GPIO_Port, DN_BTN_Pin) == GPIO_PIN_RESET) - key |= DN_BTN_Pin; - if(HAL_GPIO_ReadPin(ON_GPIO_Port, ON_Pin) == GPIO_PIN_RESET) - key |= ON_Pin; - - return key; -} - - -uint16_t kbhit(void) -{ -volatile uint16_t key; -static uint32_t dreb = 0; //дребезг -static uint8_t first = 1; //признак первого момента нажатия кнопки -static uint16_t rep = 50; - - do - { - key = readkey(); - - if(!key) - { - if(dreb) - dreb--; - else first = 1; - } - else - { - if(dreb < 3) - dreb++; - } - } - while((dreb > 0) && (dreb < 3)); - - - - if(!key) //если кнопки отпущены - { - first = 1; //достоверно кнопки отпущены - return 0; //вернуть 0 - } - else //иначе - { - if(first) //определить кнопку - { //только один раз - first = 0; //за нажатие - repeat = rep = 32; - return key; //вернуть в главную функцию состояние клавиатуры - } - else - { - if(repeat) - return 0; //имитация свободной клавиатуры - else - { - if(rep > 0) - rep >>= 1; - else rep = 32; - - repeat = rep; - // if(key == KEY_RESET_Pin) - // return 0; - - - return key; - } - } - } -} - -const float exitVar[] = {0.1, 0,2, 0,5, 1, 2, 5, 10, 20, 50, 100, 200, 500}; -const float fvchVar[] = {0.2, 1, 2, 10}; -const float fnchVar[] = {0.1, 0.3, 1, 3, 10, 30, 100}; - -const char string11[] = "Rgh"; -const char string12[] = "gRk/vc2"; - -const char string21[] = "Ds[jl"; -const char string22[] = "vD/vc2"; - -const char string31[] = "ADX"; -const char string32[] = "Uw"; - -const char string41[] = "AYX"; -const char string42[] = "rUw"; - -const char string51[] = "Gthtuheprf!!!"; + UserData_TypeDef currentData; int main(void) { - set_type set; - set.kPr = 22222; - set.kExit =22222; - set.FVCH=22222; - set.FNCH=22222; - - - HAL_Init(); - SystemClock_Config(); - MX_FLASH_Init(); - MX_GPIO_Init(); - MX_DMA_Init(); - MX_ADC1_Init(); - MX_TIM3_Init(); - MX_SPI1_Init(); - MX_TIM7_Init(); - MX_USART1_UART_Init(); - - - /////Мой код здесь - - - ssd1306_Init(); - DrawLogo(); - HAL_Delay(100); - ssd1306_Fill(Black); - ssd1306_UpdateScreen(); - ssd1306_SetCursor(0, 7); - - while (1) - { - FontSet(Segoe_UI_Rus_8); - OLED_DrawStr(string11, 1, 10, TEXT); - OLED_DrawStr(FloatToASCII(2.45f, -3), 40, 10, TEXT); - // OLED_DrawStr(FloatToASCII(2.45f, 0), 40, 10, TEXT); -// OLED_DrawNum(set.kPr, 40, 10, TEXT); - OLED_DrawStr(string12, 80, 10, TEXT); -//////////////////////////// - OLED_DrawStr(string21, 1, 20, TEXT); - OLED_DrawNum(set.kExit, 40, 20, CURSOR); - OLED_DrawStr(string22, 80, 20, TEXT); -//////////////////////////// - OLED_DrawStr(string31, 2, 30, TEXT); - OLED_DrawNum(set.FVCH, 40, 30, TEXT); - OLED_DrawStr(string32, 80, 30, TEXT); -////////////// - OLED_DrawStr(string41, 2, 40, TEXT); - OLED_DrawNum(set.FNCH, 40, 40, TEXT); - OLED_DrawStr(string42, 80, 40, TEXT); -////////////// - OLED_DrawStr(string51, 30, 50, TEXT); - - - //OLED_DrawChar("n", 4, 4, TEXT); - //if(readkey()==OK_BTN_Pin) OLED_DrawStr("jr", 255, 8, White); - //if(readkey()==DN_BTN_Pin) OLED_DrawStr("dybp", 255, 20, White); - //if(readkey()==UP_BTN_Pin) OLED_DrawStr("ddth[", 255, 32, White); - //if(readkey()==ON_Pin) OLED_DrawStr("drk", 255, 44, White); - //HAL_Delay(300); - // ssd1306_Fill(Black); - //; // - //OLED_DrawStr("Ds[jl", 255, 20, White); // - //OLED_DrawStr("adx", 255, 32, White); // Modbus - //OLED_DrawStr("ayx", 255, 44, White); - needRefresh=1; + +/* 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]