Compare commits

...

2 Commits

Author SHA1 Message Date
dplimin d9756cf786 new file: Core/Inc/keys.h
new file:   Core/Inc/screen.h
	new file:   Core/Src/keys.c
	new file:   Core/Src/my.c
	new file:   Core/Src/screen.c
2023-10-11 17:33:26 +03:00
dplimin 6eae35ff71 modified: .settings/language.settings.xml
modified:   Core/Inc/flash.h
	modified:   Core/Inc/main.h
	modified:   Core/Inc/my.h
	modified:   Core/Inc/struct.h
	modified:   Core/Src/adc.c
	modified:   Core/Src/dma.c
	modified:   Core/Src/flash.c
	modified:   Core/Src/gpio.c
	modified:   Core/Src/main.c
	modified:   Core/Src/ssd1306.c
	modified:   Core/Src/tim.c
	modified:   STM32F446RE_FLASH.ld
	Core/Inc/keys.h
	Core/Inc/screen.h
	Core/Src/keys.c
	Core/Src/my.c
	Core/Src/screen.c
	"~$\320\235\320\276\320\263\320\270 \320\270 \321\203\321\201\320\270\320\273\320\265\320\275\320\270\320\265.xlsx"
	"\320\235\320\276\320\263\320\270 \320\270 \321\203\321\201\320\270\320\273\320\265\320\275\320\270\320\265.xlsx"
2023-10-11 17:28:58 +03:00
18 changed files with 1200 additions and 421 deletions

View File

@ -4,7 +4,7 @@
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="1761414022695062209" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="1166531618330183916" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>
@ -14,7 +14,7 @@
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="1761414022695062209" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="1166531618330183916" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>

View File

@ -20,5 +20,6 @@
void MX_FLASH_Init(void); void MX_FLASH_Init(void);
void rdPar(void);
#endif /* INC_FLASH_H_ */ #endif /* INC_FLASH_H_ */

6
Core/Inc/keys.h 100644
View File

@ -0,0 +1,6 @@
#include "my.h"
#include "screen.h"
void keysHandler(void);

View File

@ -58,25 +58,25 @@ void Error_Handler(void);
/* USER CODE END EFP */ /* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/
#define FL_Pin GPIO_PIN_0 #define FL_Pin GPIO_PIN_0 // ÔË íà ÖÀÏ
#define FL_GPIO_Port GPIOC #define FL_GPIO_Port GPIOC // ÔË íà ÖÀÏ
#define STD_Pin GPIO_PIN_1 #define STD_Pin GPIO_PIN_1 //
#define STD_GPIO_Port GPIOC #define STD_GPIO_Port GPIOC //
#define SCK_Pin GPIO_PIN_2 #define SCK_Pin GPIO_PIN_2 //STB íà ÖÀÏ
#define SCK_GPIO_Port GPIOC #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 ON_GPIO_Port GPIOC
#define OFF_Pin GPIO_PIN_2 #define OFF_Pin GPIO_PIN_2 //!!!! Íå ñîîòâåòñâóåò ñõåìå!!! PA3 - OFF
#define OFF_GPIO_Port GPIOA #define OFF_GPIO_Port GPIOA //!!!
#define A0_Pin GPIO_PIN_0 #define A0_Pin GPIO_PIN_0 //ÊÏÐ 1 10 0,1
#define A0_GPIO_Port GPIOB #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 A1_GPIO_Port GPIOB
#define A2_Pin GPIO_PIN_2 #define A2_Pin GPIO_PIN_2 //ÔÂ×
#define A2_GPIO_Port GPIOB #define A2_GPIO_Port GPIOB
#define K10_Pin GPIO_PIN_10 #define K10_Pin GPIO_PIN_10 //ÊÓÑ10
#define K10_GPIO_Port GPIOB #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 OK_BTN_GPIO_Port GPIOB
#define DN_BTN_Pin GPIO_PIN_13 #define DN_BTN_Pin GPIO_PIN_13
#define DN_BTN_GPIO_Port GPIOB #define DN_BTN_GPIO_Port GPIOB
@ -88,20 +88,25 @@ void Error_Handler(void);
#define USART1_RE_GPIO_Port GPIOA #define USART1_RE_GPIO_Port GPIOA
#define RESET_Pin GPIO_PIN_12 #define RESET_Pin GPIO_PIN_12
#define RESET_GPIO_Port GPIOA #define RESET_GPIO_Port GPIOA
#define A3_Pin GPIO_PIN_3 #define A3_Pin GPIO_PIN_3 //ÔÂ×
#define A3_GPIO_Port GPIOB #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 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 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 A7_GPIO_Port GPIOB
#define A7B7_Pin GPIO_PIN_7 #define A8_Pin GPIO_PIN_8 //ÔÂ×
#define A7B7_GPIO_Port GPIOB #define A8_GPIO_Port GPIOB
#define A7B8_Pin GPIO_PIN_8 #define PZ_Pin GPIO_PIN_9 //Ïëàâàþùàÿ çåìëÿ
#define A7B8_GPIO_Port GPIOB
#define PZ_Pin GPIO_PIN_9
#define PZ_GPIO_Port GPIOB #define PZ_GPIO_Port GPIOB
#define DMA_BUFFSIZE 4096
#define ADC_BUFFSIZE 8192
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */ /* USER CODE END Private defines */

View File

@ -20,15 +20,20 @@
#include <math.h> #include <math.h>
#include "flash.h" #include "flash.h"
#include "string.h" #include "string.h"
#include "ssd1306.h"
#include <stdlib.h>
#define LOGO_TIME_MS (500u) #define LOGO_TIME_MS (500u)
#define lo(x) ((uint8_t) ((x) & 0xFF)) #define lo(x) ((uint8_t) ((x) & 0xFF))
#define hi(x) ((uint8_t) (((x) >> 8) & 0xFF)) #define hi(x) ((uint8_t) (((x) >> 8) & 0xFF))
#define ABS(x) (((x) < 0)?-(x) :(x)) #define ABS(x) (((x) < 0)?-(x) :(x))
typedef enum
{
CURSOR = Black,
TEXT = White
}typeTEXT;
static const uint16_t Crc16Table[256] = 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 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 }; 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 { CHARGE = 0} typeIIN;
typedef enum { Ku0_1 = 0, Ku0_2, Ku0_5, Ku1, Ku2, Ku5, Ku10, Ku20, Ku50, Ku100, Ku200, Ku500 } typeIKU; 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 { Hp0_1 = 0, Hp1, Hp2, Hp10 } typeIFV;
typedef enum { Lp100 = 0, Lp300, Lp1000, Lp3000, Lp10000, Lp30000, Lp100000 } typeIFN; 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_ */ #endif /* INC_MY_H_ */

View File

@ -0,0 +1,9 @@
#include "my.h"
#include "ssd1306.h"
#include "OLED_Fonts.h"
void screenDraw(void);

View File

@ -64,26 +64,28 @@ typedef union
//********************************************************************************************************************************* //*********************************************************************************************************************************
typedef struct typedef struct
{ { //колличкство байт должно делится на 4 иначе не пишет!
uint16_t OWN; // 0,1 4001 uint16_t OWN; // 0,1 4001 // Адрес устройства
uint16_t BAUD; // 2,3 4002 uint16_t BAUD; // 2,3 4002 // скорость передачи
uint16_t INFB; // 4,5 4003 uint16_t INFB; // 4,5 4003 //бит четности
uint16_t IIN; // 6,7 5001 uint16_t IIN; // 6,7 5001 //тип заряда ACP=
uint16_t IFV; // 8,9 5002 uint16_t IFV; // 8,9 5002 //фильтр верхних частот
uint16_t IFN; // 10,11 5003 uint16_t IFN; // 10,11 5003 //нижних
uint16_t IKU; // 12,13 5004 uint16_t IKU; // 12,13 5004 //Коэф усиления
uint16_t IKE; // 14,15 5005 uint16_t IK0; // 14,15 5005 // знакоместо 0
uint16_t IKD; // 16,17 5006 uint16_t IK1; // 16,17 5006 // знакоместо 1
uint16_t IKS; // 18,19 5007 uint16_t IK2; // 18,19 5007 // знакоместо 2
uint16_t IPZ; // 20,21 5008 uint16_t IK3; // 20,21 // знакоместо 3
uint16_t OPZ; // 22,23 5009 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***********

View File

@ -19,7 +19,8 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "adc.h" #include "adc.h"
#include "tim.h"
#include "string.h"
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
/* USER CODE END 0 */ /* USER CODE END 0 */
@ -27,6 +28,11 @@
ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1; 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 */ /* ADC1 init function */
void MX_ADC1_Init(void) void MX_ADC1_Init(void)
{ {
@ -44,12 +50,12 @@ void MX_ADC1_Init(void)
*/ */
hadc1.Instance = ADC1; hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; 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.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; 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.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1; hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = ENABLE; hadc1.Init.DMAContinuousRequests = ENABLE;
@ -69,6 +75,9 @@ void MX_ADC1_Init(void)
} }
/* USER CODE BEGIN ADC1_Init 2 */ /* 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 */ /* USER CODE END ADC1_Init 2 */
} }
@ -147,6 +156,14 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
} }
/* USER CODE BEGIN 1 */ /* 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 */ /* USER CODE END 1 */

View File

@ -43,7 +43,7 @@ void MX_DMA_Init(void)
/* DMA interrupt init */ /* DMA interrupt init */
/* DMA2_Stream0_IRQn interrupt configuration */ /* 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); HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
} }

View File

@ -13,7 +13,7 @@
static FLASH_EraseInitTypeDef FlashEraseInit; static FLASH_EraseInitTypeDef FlashEraseInit;
__IO UserData_TypeDef pardata; __IO extern UserData_TypeDef currentData;
__IO uint16_t COUNT_EXT = 0; __IO uint16_t COUNT_EXT = 0;
@ -50,7 +50,7 @@ uint32_t SECTORError = 0;
if(HAL_FLASHEx_Erase(&FlashEraseInit, &SECTORError) == HAL_OK) if(HAL_FLASHEx_Erase(&FlashEraseInit, &SECTORError) == HAL_OK)
{ {
Address = USERPAGE; Address = USERPAGE;
pData = (uint32_t *) &pardata; pData = (uint32_t *) &currentData;
for(i = 0; i < lenpar; i++) for(i = 0; i < lenpar; i++)
{ {
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, *pData++); HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, *pData++);
@ -69,28 +69,29 @@ uint32_t lenpar;
volatile bool rewrite = false; volatile bool rewrite = false;
lenpar = sizeof(UserData_TypeDef); lenpar = sizeof(UserData_TypeDef);
memcpy((void *) &pardata, (void *) USERPAGE, lenpar); memcpy((void *) &currentData, (void *) USERPAGE, lenpar);
//pardata.OWN = 0xffff;//todo //pardata.OWN = 0xffff;//todo
if(pardata.OWN == 0xffff) if(currentData.OWN == 0xffff)
{ {
pardata.OWN = 1; //àäðåññ íîäáàñ currentData.OWN = 1; //àäðåññ íîäáàñ
pardata.BAUD = 5; currentData.BAUD = 5;
pardata.INFB = 1; currentData.INFB = 1;
pardata.IIN = CHARGE; currentData.IIN = CHARGE;
pardata.IFV = Hp0_1; currentData.IFV = Hp0_1;
pardata.IFN = Lp100000; currentData.IFN = Lp100000;
pardata.IKU = Ku1; currentData.IKU = Ku1;
pardata.IKE = 1; currentData.IK0 = 1;
pardata.IKD = 0; currentData.IK1 = 0;
pardata.IKS = 0; currentData.IK2 = 0;
pardata.IPZ = 0; currentData.IK3 = 0;
pardata.OPZ = 0; currentData.IK4 = 0;
pardata.KCOND = 1.0f; currentData.IPZ =0;
pardata.SENS = 1.0f;
pardata.ACCEL = 100.0f; currentData.KCOND = 1.0f;
currentData.SENS = 1.0f;
rewrite = true; rewrite = true;
} }

View File

@ -53,8 +53,8 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, A0_Pin|A1_Pin|A2_Pin|K10_Pin HAL_GPIO_WritePin(GPIOB, A0_Pin|A1_Pin|A2_Pin|K10_Pin
|A3_Pin|A4_Pin|A5_Pin|A7_Pin |A3_Pin|A4_Pin|A5_Pin|A6_Pin
|A7B7_Pin|A7B8_Pin, GPIO_PIN_RESET); |A7_Pin|A8_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, SPI1_CS_Pin|RESET_Pin, GPIO_PIN_SET); 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 PBPin
PBPin PBPin PBPin */ PBPin PBPin PBPin */
GPIO_InitStruct.Pin = A0_Pin|A1_Pin|A2_Pin|K10_Pin GPIO_InitStruct.Pin = A0_Pin|A1_Pin|A2_Pin|K10_Pin
|A3_Pin|A4_Pin|A5_Pin|A7_Pin |A3_Pin|A4_Pin|A5_Pin|A6_Pin
|A7B7_Pin|A7B8_Pin|PZ_Pin; |A7_Pin|A8_Pin|PZ_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

153
Core/Src/keys.c 100644
View File

@ -0,0 +1,153 @@
#include "keys.h"
#include "screen.h"
#include "struct.h"
#include "my.h"
extern UserData_TypeDef currentData;
extern int menuPointer;
extern uint16_t dvd;
extern int ignoreOff_flag;
uint16_t kpr_temp[5];
__IO uint16_t KEY_STATE = 0;
void keysHandler(void){
uint16_t key = KEY_STATE;
KEY_STATE = 0;
if(HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_RESET) ignoreOff_flag=0; //êàê òîëüêî êíîïêó âêëþ÷åíèÿ îòïóñòèëè, ïåðåñòà¸ì å¸ èãíîðèðîâàòü
if((HAL_GPIO_ReadPin(OFF_GPIO_Port, OFF_Pin) == GPIO_PIN_SET)&&(ignoreOff_flag==0))
{HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET);} //
if(key==OK_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
//if(menuPointer==GROUND){menuPointer=WORK;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ ê ðàáîòå
menuPointer++; //èíà÷å ñëåäóþùèé ïóíêò
}
switch (menuPointer){
case KPR0:
if(key==UP_BTN_Pin) {
if((currentData.IK0<9)&&(currentData.IK0>=0)) currentData.IK0++;
else if(currentData.IK0=='~') currentData.IK0=0;
else if(currentData.IK0==9) currentData.IK0='~';
};
if((key==DN_BTN_Pin)) {
if(currentData.IK0==0) currentData.IK0='~';
else if ((currentData.IK0<=9)&&(currentData.IK0>0)) currentData.IK0--;
else if(currentData.IK0='~') currentData.IK0=9;
}
break;
case KPR1:
if((key==UP_BTN_Pin)) {
if((currentData.IK1<9)&&(currentData.IK1>=0)) currentData.IK1++;
else if(currentData.IK1=='~') currentData.IK1=0;
else if(currentData.IK1==9) currentData.IK1='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK1==0) currentData.IK1='~';
else if ((currentData.IK1<=9)&&(currentData.IK1>0)) currentData.IK1--;
else if(currentData.IK1='~') currentData.IK1=9;
}
break;
case KPR2:
if((key==UP_BTN_Pin)) {
if((currentData.IK2<9)&&(currentData.IK2>=0)) currentData.IK2++;
else if(currentData.IK2=='~') currentData.IK2=0;
else if(currentData.IK2==9) currentData.IK2='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK2==0) currentData.IK2='~';
else if ((currentData.IK2<=9)&&(currentData.IK2>0)) currentData.IK2--;
else if(currentData.IK2='~') currentData.IK2=9;
}
break;
case KPR3:
if((key==UP_BTN_Pin)) {
if((currentData.IK3<9)&&(currentData.IK3>=0)) currentData.IK3++;
else if(currentData.IK3=='~') currentData.IK3=0;
else if(currentData.IK3==9) currentData.IK3='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK3==0) currentData.IK3='~';
else if ((currentData.IK3<=9)&&(currentData.IK3>0)) currentData.IK3--;
else if(currentData.IK3='~') currentData.IK3=9;
}
break;
if((key==UP_BTN_Pin)) {
if((currentData.IK4<9)&&(currentData.IK4>=0)) currentData.IK4++;
else if(currentData.IK4=='~') currentData.IK4=0;
else if(currentData.IK4==9) currentData.IK4='~';
}
case KPR4:
if((key==DN_BTN_Pin)) {
if(currentData.IK4==0) currentData.IK4='~';
else if ((currentData.IK4<=9)&&(currentData.IK4>0)) currentData.IK4--;
else if(currentData.IK4='~') currentData.IK4=9;
}
break;
case KPRSAVING:
kpr_temp[0]=currentData.IK0;
kpr_temp[1]=currentData.IK1;
kpr_temp[2]=currentData.IK2;
kpr_temp[3]=currentData.IK3;
kpr_temp[4]=currentData.IK4;
asciiToFloat4(kpr_temp);
if (asciiToFloat4(kpr_temp)||currentData.SENS<0.001||currentData.SENS>1000){
currentData.IK0=kpr_temp[0];
currentData.IK1=kpr_temp[1];
currentData.IK2=kpr_temp[2];
currentData.IK3=kpr_temp[3];
currentData.IK4=kpr_temp[4];
menuPointer=WORK; // ÏÅÐÅÑÊÎ×ÈÒ ÑÀÌ
//ïèøåì ÷òî çíà÷åíèÿ íå âåðíû
//ðèñóåì íóëè
};
menuPointer++;
break;
case OUT:
if((key==UP_BTN_Pin)&&(currentData.IKU<Ku500)) {currentData.IKU++; sh_applysetting(&currentData, dvd);}
if((key==DN_BTN_Pin)&&(currentData.IKU>Ku0_1)) {currentData.IKU--; sh_applysetting(&currentData, dvd);}
break;
case FVCH:
if((key==UP_BTN_Pin)&&(currentData.IFV<Hp10)) {currentData.IFV++; sh_applysetting(&currentData, dvd);}
if((key==DN_BTN_Pin)&&(currentData.IFV>Hp0_1)) {currentData.IFV--; sh_applysetting(&currentData, dvd);}
break;
case FNCH:
if((key==UP_BTN_Pin)&&(currentData.IFN<Lp100000)) {currentData.IFN++; sh_applysetting(&currentData, dvd);}
if((key==DN_BTN_Pin)&&(currentData.IFN>Lp100)) {currentData.IFN--; sh_applysetting(&currentData, dvd);}
break;
case GROUND:
if((key==UP_BTN_Pin)) {currentData.IPZ=1; sh_applysetting(&currentData, dvd);}
if((key==DN_BTN_Pin)) {currentData.IPZ=0; sh_applysetting(&currentData, dvd);}
break;
case SAVING:
wrPar();
menuPointer=WORK;
sh_applysetting(&currentData, dvd);//todo Ñäåëàòü ïî íîðìàëüíîìó.
break;
} //close switch
}; //close keysHandler

View File

@ -31,289 +31,72 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include "my.h" #include "my.h"
#include "ssd1306.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; /// volatile int needRefresh; ///
typedef enum char pString[16];
{ char* FloatToASCII(float Val, int32_t RoundTo); //ïîêà îáúÿâëþ å¸ òóò
CURSOR = Black,
TEXT = White
}typeTEXT;
void SystemClock_Config(void); 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 ---------------------------------------------------------*/ extern uint16_t ADC_Buff[ADC_BUFFSIZE];
/* USER CODE BEGIN 0 */ uint16_t meashBuff[DMA_BUFFSIZE];
/* USER CODE END 0 */
/** int sourceDac=0;
* @brief The application entry point. int reload_flag=0;
* @retval int 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); UserData_TypeDef currentData;
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!!!";
int main(void) int main(void)
{ {
set_type set;
set.kPr = 22222;
set.kExit =22222;
set.FVCH=22222;
set.FNCH=22222; /* 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(); HAL_Init();
@ -321,69 +104,77 @@ int main(void)
MX_FLASH_Init(); MX_FLASH_Init();
MX_GPIO_Init(); MX_GPIO_Init();
MX_DMA_Init(); MX_DMA_Init();
MX_ADC1_Init();
MX_TIM3_Init(); MX_TIM3_Init();
MX_ADC1_Init();
MX_SPI1_Init(); MX_SPI1_Init();
MX_TIM7_Init(); MX_TIM7_Init();
MX_USART1_UART_Init(); MX_USART1_UART_Init();
/////Ìîé êîä çäåñü /////Äåëåì ñòàðò ýêðàíó
ssd1306_Init(); ssd1306_Init();
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_RESET); //ôèêñèðóåì ïèòàíèå ïðèáîðà
DrawLogo(); DrawLogo();
HAL_Delay(100);
ssd1306_Fill(Black); ssd1306_Fill(Black);
ssd1306_UpdateScreen(); ssd1306_UpdateScreen();
ssd1306_SetCursor(0, 7); sh_applysetting(&currentData, dvd); // ïðèìåíÿåì íàñòðîéêè èç ñòóêòóðû ñ ÖÀÏ íà âñþ
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); while (1){
//HAL_Delay(300); check_reload();
// ssd1306_Fill(Black);
//; // keysHandler();
//OLED_DrawStr("Ds[jl", 255, 20, White); // if(RefreshScreen){
//OLED_DrawStr("adx", 255, 32, White); // Modbus screenDraw();
//OLED_DrawStr("ayx", 255, 44, White); ssd1306_UpdateScreen();
needRefresh=1; ssd1306_Fill(0x00);
RefreshScreen=0;
} }
} }
}
/** /**
* @brief System Clock Configuration * @brief System Clock Configuration
* @retval None * @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; i<DMA_BUFFSIZE; i++ ){
if (meashBuff[i]>HIGH_GATE_ADC||meashBuff[i]<LOW_GATE_ADC){ //åñëè íàõîäèì ïîðîãîâîå çíà÷åíèå
isReloaded=1; //âûñòàâëÿåì ôëàã ïåðåãóçêè
break; //âûâàëèâàåìñÿ
}
}
if(isReloaded==1){ //åñëè íàøëè ïîðîãîâîå çíà÷åíèå
reload_flag=1; //âçâîäèì ãëîáàëüíûé ôëàã ïåðåãðóçêè
reloadOffTime=HAL_GetTick()+2000; //óñòàíàâëèâàåì òàéìåð ñáðîñà ïåðåãðóçêè +2 ñåê
}
uint32_t tick = HAL_GetTick();
if(reloadOffTime<tick){reload_flag=0;} // åñëè ïðîøëî 2 ñåêóíäû îò ïåðåãðóçêè ñáðàñûâàåì ãëîáàëüíûé ôëàã
/*tick=HAL_GetTick()-tick;
tick=0; //äëÿ çàìåðà âðåìåíè*/
}
void SystemClock_Config(void) void SystemClock_Config(void)
{ {
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_OscInitTypeDef RCC_OscInitStruct = {0};
@ -402,10 +193,10 @@ void SystemClock_Config(void)
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 60; RCC_OscInitStruct.PLL.PLLN = 96;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 2; RCC_OscInitStruct.PLL.PLLQ = 2;
RCC_OscInitStruct.PLL.PLLR = 5; RCC_OscInitStruct.PLL.PLLR = 2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
@ -416,10 +207,10 @@ void SystemClock_Config(void)
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLRCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLRCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
} }

513
Core/Src/my.c 100644
View File

@ -0,0 +1,513 @@
#include "my.h"
#include "main.h"
#include "stm32f4xx_hal.h"
#include "struct.h"
#include "ssd1306.h"
extern UserData_TypeDef currentData;
char pString[16] = {0}; //Íóæíà äëÿ FloatToASCII
void sh_applysetting(UserData_TypeDef * currentData, uint16_t DVD){
sh_SetOutGain(currentData->IKU);
sh_SetFvch(currentData->IFV);
sh_SetFnch(currentData->IFN);
sh_SetPlavZeml(currentData->IPZ);
WRDAC(DVD);
}
void sh_SetOutGain(uint16_t IKU){
switch (IKU){
case Ku0_1:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);
break;
case Ku0_2:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);
break;
case Ku0_5:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);
break;
case Ku1:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);
break;
/*HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);//âàðèê äëÿ ïðîâåðêè
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);*/
case Ku2:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);
break;
case Ku5:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);
break;
case Ku10:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
/*HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);*/
break;
case Ku20:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
break;
case Ku50:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
break;
case Ku100:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
/* HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); */
break;
case Ku200:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
break;
case Ku500:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
break;
/* case Ku1000:
HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);
break; */
}
};
void sh_SetFvch(uint16_t IFV){ //DA9 IA2 IA3
switch (IFV){
case Hp0_1:
HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_RESET);
break;
case Hp1:
HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_RESET);
break;
case Hp2:
HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_SET);
break;
case Hp10:
HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_SET);
break;
}
};
void sh_SetFnch(uint16_t IFN){
// IA6 IA7 IA8
//{0.1, 0.3, 1, 3, 10, 30, 100};
//Lp100, Lp300, Lp1000, Lp3000, Lp10000, Lp30000, Lp100000
switch (IFN){
case Lp100:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET);
break;
case Lp300:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET);
break;
case Lp1000:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET);
break;
case Lp3000:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET);
break;
case Lp10000:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_SET);
break;
case Lp30000:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_SET);
break;
case Lp100000:
HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_SET);
break;
}
};
void sh_SetPlavZeml(uint16_t IPZ){
if(IPZ==1){
HAL_GPIO_WritePin(PZ_GPIO_Port, PZ_Pin, GPIO_PIN_RESET);}
else
if(IPZ==0){
HAL_GPIO_WritePin(PZ_GPIO_Port, PZ_Pin, GPIO_PIN_SET);}
};
void WRDAC(uint16_t DVD)
{
uint8_t i;
uint16_t dvd = DVD;
dvd <<= 4;
for(i = 0; i < 12; i++)
{
if(dvd & 0x8000)
HAL_GPIO_WritePin(STD_GPIO_Port, STD_Pin, GPIO_PIN_SET);
else HAL_GPIO_WritePin(STD_GPIO_Port, STD_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_SET);
dvd <<= 1;
}
HAL_GPIO_WritePin(FL_GPIO_Port, FL_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(FL_GPIO_Port, FL_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(STD_GPIO_Port, STD_Pin, GPIO_PIN_SET);
}
void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){
if (some<10) OLED_DrawNum(some, x, y, mode);
else OLED_DrawChar(some, x, y, mode);
}
int asciiToFloat4(uint16_t str[]){
/////îïðåäåëÿåì ãäå òî÷êà
float res=0;
int dotFounded=0;
int dotPos=0;
for (int i=0; i<=4; i++){
if (str[i]=='~'){ ///todo ñäåëàòü ïðîâåðêó íà íåñêîëüêî òî÷åê
if(dotFounded==0){dotFounded=1; dotPos=i;} //ñòàâèì ôëàã íàéäåííîé òî÷êè ïðèñâàèâàåì ïîçèöèþ
else return 1; //èíà÷å âîçâðàùàåì îøèáêó 1
}
}
float symbol[5];
symbol[0]=str[0];
symbol[1]=str[1];
symbol[2]=str[2];
symbol[3]=str[3];
symbol[4]=str[4];
if(dotFounded==0){
res=(float)symbol[0]*10000+(float)symbol[1]*1000+(float)symbol[2]*100+(float)symbol[3]*10+(float)symbol[4];
memcpy(&currentData.SENS, &res, sizeof(float)); ///äåëàåì ïðÿìîå êîïèðîâàíèå èíà÷å âîçâðàùàåò íåïîíÿòíî ÷òî
return 0;
}
switch(dotPos){
case 0:
res=(float)symbol[1]/(float)10+symbol[2]/(float)100+symbol[3]/(float)1000+symbol[4]/(float)10000;
break;
case 1:
res=symbol[0]+(float)symbol[2]/10+(float)symbol[3]/100+(float)symbol[4]/1000;
break;
case 2:
res=symbol[0]*10+(float)symbol[1]+(float)symbol[3]/10+(float)symbol[4]/100;
break;
case 3:
res=symbol[0]*(float)100+symbol[1]*(float)10+symbol[2]+(float)symbol[4]/10;
break;
case 4:
res=symbol[0]*1000+(float)symbol[1]*100+(float)symbol[2]*10+(float)symbol[3];
break;
default:
break;
}
memcpy(&currentData.SENS, &res, sizeof(float));
return 0;
}
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) //todo: íîðìàëüíî ñäåëàòü êíîïêó âêëþ÷åíèÿ
// key |= ON_Pin;
return key;
}
__IO uint16_t repeat = 0;
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++;
}
//////
//for(int i=30000; i>0; i--){;} /// ïîêà ÷òî âìåñòî àíòèäðåáåçãà
//////
}
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;
}
}
}
}
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;
}

216
Core/Src/screen.c 100644
View File

@ -0,0 +1,216 @@
#include "screen.h"
#include "struct.h"
#include "my.h"
extern int menuPointer;
extern int reload_flag;
extern char* kPrToDispl;
extern UserData_TypeDef currentData;
const char STRING_KPR[] = "Rgh";
const char STRING_PKL_MS2[] = "gRk/vc2";
const char STRING_VIHOD[] = "Ds[jl";
const char STRING_MV_MS2[] = "vD/vc2";
const char STRING_FVCH[] = "ADX";
const char STRING_GC[] = "Uw";
const char STRING_FNCH[] = "AYX";
const char STRING_KGC[] = "rUw";
const char STRING_PEREGRUZKA[] = "Gthtuheprf";
const char STRING_OBSHAJA_ZEMLJA[] = "JP";
const char STRING_PLAVAJUSHAJA_ZEMLA[] = "GP";
const char STRING_Ku0_1[] = "0~1";
const char STRING_Ku0_2[] = "0~2";
const char STRING_Ku0_5[] = "0~5";
const char STRING_Ku1[] = "1";
const char STRING_Ku2[] = "2";
const char STRING_Ku5[] = "5";
const char STRING_Ku10[] = "10";
const char STRING_Ku20[] = "20";
const char STRING_Ku50[] = "50";
const char STRING_Ku100[] = "100";
const char STRING_Ku200[] = "200";
const char STRING_Ku500[] = "500";
const char STRING_Hp0_1[] = "0~1";
const char STRING_Hp1[] = "1";
const char STRING_Hp2[] = "2";
const char STRING_Hp10[] = "10";
/////Çíà÷åíèÿ LP â Êãö
const char STRING_Lp100[] = "0~1";
const char STRING_Lp300[] = "0~3";
const char STRING_Lp1000[] = "1";
const char STRING_Lp3000[] = "3";
const char STRING_Lp10000[] = "10";
const char STRING_Lp30000[] = "30";
const char STRING_Lp100000[] = "100";
char* kuToDispl;
char* fvchTODisp;
char* fnchTODisp;
char* plavZemlToDisp;
void screenDraw(void)
{
///////ïðîâåðÿåì ÊÓ/çíà÷åíèå âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
switch(currentData.IKU){ ///ñäåëàòü èíëàéí ôóíêöèþ
case Ku0_1:
kuToDispl=STRING_Ku0_1;
break;
case Ku0_2:
kuToDispl=STRING_Ku0_2;
break;
case Ku0_5:
kuToDispl=STRING_Ku0_5;
break;
case Ku1:
kuToDispl=STRING_Ku1;
break;
case Ku2:
kuToDispl=STRING_Ku2;
break;
case Ku5:
kuToDispl=STRING_Ku5;
break;
case Ku10:
kuToDispl=STRING_Ku10;
break;
case Ku20:
kuToDispl=STRING_Ku20;
break;
case Ku50:
kuToDispl=STRING_Ku50;
break;
case Ku100:
kuToDispl=STRING_Ku100;
break;
case Ku200:
kuToDispl=STRING_Ku200;
break;
case Ku500:
kuToDispl=STRING_Ku500;
break;
}
///////ïðîâåðÿåì ÔÂ× âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
switch(currentData.IFV){
case Hp0_1:
fvchTODisp=STRING_Hp0_1;
break;
case Hp1:
fvchTODisp=STRING_Hp1;
break;
case Hp2:
fvchTODisp=STRING_Hp2;
break;
case Hp10:
fvchTODisp=STRING_Hp10;
break;
}
switch(currentData.IFN){
case Lp100:
fnchTODisp=STRING_Lp100;
break;
case Lp300:
fnchTODisp=STRING_Lp300;
break;
case Lp1000:
fnchTODisp=STRING_Lp1000;
break;
case Lp3000:
fnchTODisp=STRING_Lp3000;
break;
case Lp10000:
fnchTODisp=STRING_Lp10000;
break;
case Lp30000:
fnchTODisp=STRING_Lp30000;
break;
case Lp100000:
fnchTODisp=STRING_Lp100000;
break;
}
switch(currentData.IPZ){
case 0:
plavZemlToDisp=STRING_OBSHAJA_ZEMLJA;
break;
case 1:
plavZemlToDisp=STRING_PLAVAJUSHAJA_ZEMLA;
break;
}
FontSet(Segoe_UI_Rus_10);
OLED_DrawStr(STRING_KPR, 1, 10, TEXT);
if(menuPointer==KPR0) DrawSome(currentData.IK0, 40, 10, CURSOR);
else {DrawSome(currentData.IK0, 40, 10, TEXT);
}
if(menuPointer==KPR1) DrawSome(currentData.IK1, 47, 10, CURSOR);
else {DrawSome(currentData.IK1, 47, 10, TEXT);
}
if(menuPointer==KPR2) DrawSome(currentData.IK2, 54, 10, CURSOR);
else {DrawSome(currentData.IK2, 54, 10, TEXT);
}
if(menuPointer==KPR3) DrawSome(currentData.IK3, 61, 10, CURSOR);
else {DrawSome(currentData.IK3, 61, 10, TEXT);
}
if(menuPointer==KPR4) DrawSome(currentData.IK4, 68, 10, CURSOR);
else {DrawSome(currentData.IK4, 68, 10, TEXT);
}
OLED_DrawStr(STRING_PKL_MS2, 80, 10, TEXT);
////////////////////////////
OLED_DrawStr(STRING_VIHOD, 1, 24, TEXT);
if(menuPointer==OUT)OLED_DrawStr(kuToDispl, 40, 24, CURSOR);
else OLED_DrawStr(kuToDispl, 40, 24, TEXT);
OLED_DrawStr(STRING_MV_MS2, 60, 24, TEXT);
////////////////////////////
OLED_DrawStr(STRING_FVCH, 2, 36, TEXT);
if(menuPointer==FVCH) OLED_DrawStr(fvchTODisp, 26, 36, CURSOR);
else OLED_DrawStr(fvchTODisp, 26, 36, TEXT);
OLED_DrawStr(STRING_GC, 42, 36, TEXT);
//////////////
OLED_DrawStr(STRING_FNCH, 58, 36, TEXT);
if(menuPointer==FNCH) OLED_DrawStr(fnchTODisp, 83, 36, CURSOR);
else OLED_DrawStr(fnchTODisp, 83, 36, TEXT);
OLED_DrawStr(STRING_KGC, 103, 36, TEXT);
//////////////
if(menuPointer==GROUND) OLED_DrawStr(plavZemlToDisp, 20, 48, CURSOR);
else OLED_DrawStr(plavZemlToDisp, 20, 48, TEXT);
if(reload_flag){OLED_DrawStr(STRING_PEREGRUZKA, 50, 48, CURSOR);}
/*
if((menuPointer==GROUND)&&(set.plavZeml==0)) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, CURSOR);
else if(set.plavZeml==0) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, TEXT);
if((menuPointer==GROUND)&&(set.plavZeml==1)) OLED_DrawStr(STRING_PLAVAJUSHAJA_ZEMLA, CENTER, 48, CURSOR);
else if(set.plavZeml==1) OLED_DrawStr(STRING_PLAVAJUSHAJA_ZEMLA, CENTER, 48, TEXT);
*/
}

View File

@ -9,7 +9,7 @@
extern __IO bool por; extern __IO bool por;
extern __IO bool clbr; extern __IO bool clbr;
const char SERIAL[] ={'0','2','3'}; const char SERIAL[] ={'0','2','3'};
extern __IO UserData_TypeDef pardata, pardata_old; extern __IO UserData_TypeDef currentData, pardata_old;
__IO uint8_t DMA_Ready = 0; __IO uint8_t DMA_Ready = 0;
@ -241,24 +241,24 @@ char str[10];
ssd1306_WriteString((char *) SERIAL, Font_6x8, White); ssd1306_WriteString((char *) SERIAL, Font_6x8, White);
strcpy(str, "Flhtc "); strcpy(str, "Flhtc "); // íàïèñàíî àäðåñ
if(pardata.OWN < 10) if(currentData.OWN < 10)
{ {
str[6] = (char) (pardata.OWN + 48); str[6] = (char) (currentData.OWN + 48);
str[7] = 0; str[7] = 0;
} }
else else
if(pardata.OWN < 100) if(currentData.OWN < 100)
{ {
str[6] = (char) ((pardata.OWN / 10) + 48); str[6] = (char) ((currentData.OWN / 10) + 48);
str[7] = (char) ((pardata.OWN % 10) + 48); str[7] = (char) ((currentData.OWN % 10) + 48);
str[8] = 0; str[8] = 0;
} }
else else
{ {
str[6] = (char) ((pardata.OWN / 100) + 48); str[6] = (char) ((currentData.OWN / 100) + 48);
str[7] = (char) ((pardata.OWN % 100 / 10) + 48); str[7] = (char) ((currentData.OWN % 100 / 10) + 48);
str[8] = (char) ((pardata.OWN % 100 % 10) + 48); str[8] = (char) ((currentData.OWN % 100 % 10) + 48);
str[9] = 0; str[9] = 0;
} }
OLED_DrawStr(str, 2, 51, White); OLED_DrawStr(str, 2, 51, White);

View File

@ -29,6 +29,16 @@ extern int needRefresh;
TIM_HandleTypeDef htim3; TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim7; TIM_HandleTypeDef htim7;
__IO int RefreshScreen = 0;
__IO uint32_t TimerRefreshScreen = 2;
uint32_t TimerKeys = 2;
extern __IO uint16_t repeat;
extern __IO uint16_t KEY_STATE;
/* TIM3 init function */ /* TIM3 init function */
void MX_TIM3_Init(void) void MX_TIM3_Init(void)
{ {
@ -46,7 +56,7 @@ void MX_TIM3_Init(void)
htim3.Instance = TIM3; htim3.Instance = TIM3;
htim3.Init.Prescaler = 0; htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 499; htim3.Init.Period = 239;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK) if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
@ -83,7 +93,7 @@ void MX_TIM7_Init(void)
/* USER CODE END TIM7_Init 1 */ /* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7; htim7.Instance = TIM7;
htim7.Init.Prescaler = 999; htim7.Init.Prescaler = 1999;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP; htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 239; htim7.Init.Period = 239;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@ -113,6 +123,8 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */
/* TIM3 clock enable */ /* TIM3 clock enable */
__HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_TIM3_CLK_ENABLE();
/* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */
@ -126,7 +138,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_TIM7_CLK_ENABLE(); __HAL_RCC_TIM7_CLK_ENABLE();
/* TIM7 interrupt Init */ /* TIM7 interrupt Init */
HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); HAL_NVIC_SetPriority(TIM7_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(TIM7_IRQn); HAL_NVIC_EnableIRQ(TIM7_IRQn);
/* USER CODE BEGIN TIM7_MspInit 1 */ /* USER CODE BEGIN TIM7_MspInit 1 */
@ -165,13 +177,40 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
} }
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
{
if(needRefresh==1) {//ssd1306_Fill(0x00);
ssd1306_UpdateScreen(); __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
needRefresh=0;
if(TimerRefreshScreen)
TimerRefreshScreen--;
else
{
TimerRefreshScreen = 20;
RefreshScreen = 1;
} }
/*
if(needRefresh==1) {ssd1306_UpdateScreen();
ssd1306_Fill(0x00);
///OFill áëàñê
needRefresh=0; ///ñ÷åò÷èê, åñëè ìåíüøå 20 òî ++
}
*/
if(TimerKeys)
TimerKeys--;
else
{
TimerKeys = 5;
if(!KEY_STATE) {
KEY_STATE = kbhit();
}
}
if(repeat)
repeat--;
} }
/* USER CODE END 1 */ /* USER CODE END 1 */

View File

@ -55,8 +55,8 @@ ENTRY(Reset_Handler)
/* Highest address of the user mode stack */ /* Highest address of the user mode stack */
_estack = 0x20020000; /* end of RAM */ _estack = 0x20020000; /* end of RAM */
/* Generate a link error if heap and stack don't fit into RAM */ /* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x200; /* required amount of heap */ _Min_Heap_Size = 0x800; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */ _Min_Stack_Size = 0x800; /* required amount of stack */
/* Specify the memory areas */ /* Specify the memory areas */
MEMORY MEMORY