modified: A1210.ioc

modified:   Core/Inc/flash.h
	modified:   Core/Inc/my.h
	modified:   Core/Inc/struct.h
	modified:   Core/Src/flash.c
	modified:   Core/Src/keys.c
	modified:   Core/Src/main.c
	modified:   Core/Src/my.c
	modified:   Core/Src/screen.c
	modified:   Core/Src/usart.c
main
dplimin 2023-10-24 16:48:53 +03:00
parent d9756cf786
commit d289acf169
10 changed files with 776 additions and 124 deletions

View File

@ -249,48 +249,49 @@ ProjectManager.TargetToolchain=TrueSTUDIO
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_TIM7_Init-TIM7-false-HAL-true,8-MX_USART1_UART_Init-USART1-false-HAL-true
RCC.AHBFreq_Value=24000000
RCC.AHBFreq_Value=96000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
RCC.APB1Freq_Value=24000000
RCC.APB1TimFreq_Value=24000000
RCC.APB2Freq_Value=24000000
RCC.APB2TimFreq_Value=24000000
RCC.APB1TimFreq_Value=48000000
RCC.APB2CLKDivider=RCC_HCLK_DIV2
RCC.APB2Freq_Value=48000000
RCC.APB2TimFreq_Value=96000000
RCC.CECFreq_Value=32786.88524590164
RCC.CortexFreq_Value=24000000
RCC.FCLKCortexFreq_Value=24000000
RCC.CortexFreq_Value=96000000
RCC.FCLKCortexFreq_Value=96000000
RCC.FMPI2C1Freq_Value=24000000
RCC.FamilyName=M
RCC.HCLKFreq_Value=24000000
RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FMPI2C1Freq_Value,FamilyName,HCLKFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLR,PLLRCLKFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PWRFreq_Value,SAIAFreq_Value,SAIBFreq_Value,SDIOFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USBFreq_Value,VCOI2SInputFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIInputFreq_Value,VCOSAIOutputFreq_Value
RCC.MCO2PinFreq_Value=24000000
RCC.PLLCLKFreq_Value=60000000
RCC.HCLKFreq_Value=96000000
RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FMPI2C1Freq_Value,FamilyName,HCLKFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLRCLKFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PWRFreq_Value,SAIAFreq_Value,SAIBFreq_Value,SDIOFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USBFreq_Value,VCOI2SInputFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIInputFreq_Value,VCOSAIOutputFreq_Value
RCC.MCO2PinFreq_Value=96000000
RCC.PLLCLKFreq_Value=96000000
RCC.PLLI2SPCLKFreq_Value=96000000
RCC.PLLI2SQCLKFreq_Value=96000000
RCC.PLLI2SRCLKFreq_Value=96000000
RCC.PLLM=8
RCC.PLLN=60
RCC.PLLQCLKFreq_Value=60000000
RCC.PLLR=5
RCC.PLLRCLKFreq_Value=24000000
RCC.PLLN=96
RCC.PLLQCLKFreq_Value=96000000
RCC.PLLRCLKFreq_Value=96000000
RCC.PLLSAIPCLKFreq_Value=96000000
RCC.PLLSAIQCLKFreq_Value=96000000
RCC.PWRFreq_Value=24000000
RCC.PWRFreq_Value=96000000
RCC.SAIAFreq_Value=96000000
RCC.SAIBFreq_Value=96000000
RCC.SDIOFreq_Value=60000000
RCC.SPDIFRXFreq_Value=24000000
RCC.SYSCLKFreq_VALUE=24000000
RCC.SDIOFreq_Value=96000000
RCC.SPDIFRXFreq_Value=96000000
RCC.SYSCLKFreq_VALUE=96000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLRCLK
RCC.USBFreq_Value=60000000
RCC.USBFreq_Value=96000000
RCC.VCOI2SInputFreq_Value=1000000
RCC.VCOI2SOutputFreq_Value=192000000
RCC.VCOInputFreq_Value=2000000
RCC.VCOOutputFreq_Value=120000000
RCC.VCOOutputFreq_Value=192000000
RCC.VCOSAIInputFreq_Value=1000000
RCC.VCOSAIOutputFreq_Value=192000000
SH.ADCx_IN0.0=ADC1_IN0,IN0
SH.ADCx_IN0.ConfNb=1
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8
SPI1.CalculateBaudRate=3.0 MBits/s
SPI1.CalculateBaudRate=6.0 MBits/s
SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler
SPI1.Mode=SPI_MODE_MASTER

View File

@ -14,12 +14,13 @@
#include "main.h"
#define USERPAGE ((uint32_t) 0x08060000)
#define USERPAGECOR ((uint32_t) 0x08040000)
#define USERPAGEPAR ((uint32_t) 0x08060000)
void MX_FLASH_Init(void);
void rdPar(void);
#endif /* INC_FLASH_H_ */

View File

@ -76,12 +76,19 @@ 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 { Ku0_1 = 0, Ku0_2, Ku0_5, Ku1, Ku2, Ku5, Ku10, Ku20, Ku50, Ku100, Ku200, Ku500, Ku1000 } typeIKU;
typedef enum { Hp0_2 = 0, Hp1, Hp2, Hp10 } typeIFV;
typedef enum { Lp100 = 0, Lp300, Lp1000, Lp3000, Lp10000, Lp30000, Lp100000 } typeIFN;
typedef enum
{
AMPLIFIER = 0,
CALLIBRATION
}workModeEnum;
typedef enum //ïåðå÷èñëåíèå äëÿ îñíîâíîãî ìåíþ
{
WORK = 0,
KPR0 ,
@ -89,7 +96,9 @@ typedef enum
KPR2 ,
KPR3 ,
KPR4 ,
KPR5 ,
KPRSAVING,
UNITSELECT,
OUT ,
FVCH ,
FNCH,
@ -97,12 +106,29 @@ typedef enum
SAVING
}mainMenuState;
int asciiToFloat4(uint16_t str[]);
typedef enum //ïåðå÷èñëåíèå äëÿ ñåðâèñíîãî ìåíþ
{
KUSET = 0,
DAC0SET ,
DAC1SET ,
DAC2SET ,
DAC3SET ,
SAVE
}callibrationMenuState;
typedef enum{ //ïåðå÷èñëåíèÿ äëÿ åäèíèö èçìåðåíèÿ
MS2=0,
PA,
H
} unit;
int asciiToFloat4(uint16_t str[]); //todo: çàïðàâèòü ôóíêöèè íå èñïîëüçóþùèåñÿ âíå
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);
void sh_applysetting(UserData_TypeDef * currentData);
#endif /* INC_MY_H_ */

View File

@ -78,17 +78,34 @@ typedef struct
uint16_t IK2; // 18,19 5007 // знакоместо 2
uint16_t IK3; // 20,21 // знакоместо 3
uint16_t IK4; // 22,23 // знакоместо 4
uint16_t IK5; // 22,23 // çíàêîìåñòî 4
uint16_t IPZ; // 24,25 5008 // плавающая земля
float KCOND; // 28,29,30,31 7501 //
float SENS; // 32,33,34,35 7502 //дублирование (коэфициэнт преобразования)
uint16_t UNIT; //Îòîáðàæàåìûå âåëè÷èíû íà ýêðàíå
} UserData_TypeDef; // ********LENGTH = 39 bytes***********
typedef struct {
uint16_t Ku0_1;
uint16_t Ku0_2;
uint16_t Ku0_5;
uint16_t Ku1;
uint16_t Ku2;
uint16_t Ku5;
uint16_t Ku10;
uint16_t Ku20;
uint16_t Ku50;
uint16_t Ku100;
uint16_t Ku200;
uint16_t Ku500;
uint16_t Ku1000;
} CorrectonKuStruct_TypeDef;

View File

@ -12,9 +12,17 @@
#include "stm32f4xx_hal_flash_ex.h"
static FLASH_EraseInitTypeDef FlashEraseInit;
//ÿ õî÷ó ïèñàòü êîððåêöèþ è ïàðàìåòðû íà ðàçíûõ ñòðàíèöàõ. Îíè ïî 128ê, ýòî íå ðàöèîíàëüíî.
static FLASH_EraseInitTypeDef FlashEraseInitPar; // ñòðóêòóðà äëÿ ñòèðàíèÿ ïàðàìåòðîâ
static FLASH_EraseInitTypeDef FlashEraseInitCor; // ñòðóêòóðà äëÿ ñòèðàèÿ êîððåêöèè
__IO extern UserData_TypeDef currentData;
__IO extern uint16_t correctedKu[13]; // ìîÿ ñòðóêòóðà ñ êîððåêöèÿìè
__IO uint16_t COUNT_EXT = 0;
@ -24,16 +32,24 @@ void MX_FLASH_Init(void)
{
__HAL_RCC_SYSCFG_CLK_ENABLE();
FlashEraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;
FlashEraseInit.Banks = FLASH_BANK_1;
FlashEraseInit.Sector = FLASH_SECTOR_7;
FlashEraseInit.NbSectors = 1;
FlashEraseInit.VoltageRange = FLASH_VOLTAGE_RANGE_3;
FlashEraseInitPar.TypeErase = FLASH_TYPEERASE_SECTORS;
FlashEraseInitPar.Banks = FLASH_BANK_1;
FlashEraseInitPar.Sector = FLASH_SECTOR_7;
FlashEraseInitPar.NbSectors = 1;
FlashEraseInitPar.VoltageRange = FLASH_VOLTAGE_RANGE_3;
FlashEraseInitCor.TypeErase = FLASH_TYPEERASE_SECTORS;
FlashEraseInitCor.Banks = FLASH_BANK_1;
FlashEraseInitCor.Sector = FLASH_SECTOR_6;
FlashEraseInitCor.NbSectors = 1;
FlashEraseInitCor.VoltageRange = FLASH_VOLTAGE_RANGE_3;
rdPar();
rdCor();
}
void wrPar(void)
{
__IO uint32_t Address, lenpar, i;
@ -41,15 +57,15 @@ __IO uint32_t *pData;
uint32_t SECTORError = 0;
lenpar = sizeof(UserData_TypeDef);
while(lenpar % 4) {
while(lenpar % 4) { //äîïîëíÿåì ñòðîêó äî òåõ ïîð ïîêà îíà íå ñòàíåò äåëèòñÿ íà 4
lenpar++;
}
lenpar >>= 2;
lenpar >>= 2; //äåëèì íà 4
HAL_FLASH_Unlock();
if(HAL_FLASHEx_Erase(&FlashEraseInit, &SECTORError) == HAL_OK)
HAL_FLASH_Unlock(); //îòêðûâàåì ïàìÿòü íà çàïèñü
if(HAL_FLASHEx_Erase(&FlashEraseInitPar, &SECTORError) == HAL_OK) //
{
Address = USERPAGE;
Address = USERPAGEPAR;
pData = (uint32_t *) &currentData;
for(i = 0; i < lenpar; i++)
{
@ -61,6 +77,32 @@ uint32_t SECTORError = 0;
}
void wrCor(void) ///ïîïðîáóåì ïåðåïèñàòü ýòî ïîä ìîé ìàññèâ
{
__IO uint32_t Address, lenpar, i;
__IO uint32_t *pData;
uint32_t SECTORError = 0;
lenpar = sizeof(correctedKu); // èçìåðÿåì äëèííó ìàññèâà
while(lenpar % 4) { //äîïîëíÿåì ñòðîêó äî òåõ ïîð ïîêà îíà íå ñòàíåò äåëèòñÿ íà 4
lenpar++;
}
lenpar >>= 2; //äåëèì íà 4
HAL_FLASH_Unlock(); //îòêðûâàåì ïàìÿòü íà çàïèñü
if(HAL_FLASHEx_Erase(&FlashEraseInitCor, &SECTORError) == HAL_OK) //ñòèðàåì ñòðàíèöó ïî ñòðóêòóðå
{
Address = USERPAGECOR;
pData = (uint32_t *) &correctedKu;
for(i = 0; i < lenpar; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, *pData++);
Address += 4;
}
}
HAL_FLASH_Lock();
}
void rdPar(void)
{
@ -69,30 +111,33 @@ uint32_t lenpar;
volatile bool rewrite = false;
lenpar = sizeof(UserData_TypeDef);
memcpy((void *) &currentData, (void *) USERPAGE, lenpar);
memcpy((void *) &currentData, (void *) USERPAGEPAR, lenpar);
//pardata.OWN = 0xffff;//todo
if(currentData.OWN == 0xffff)
//pardata.OWN = 0xffff;//todo //ñêîðððåêòèðîâàòü áèòûå çíà÷åíèÿ
if(currentData.OWN == 0xffff) //åñëè ïåðâàÿ çàïèñü è âåçäå ïóñòî
{
currentData.OWN = 1; //àäðåññ íîäáàñ
currentData.OWN = 1; //ñòàâèì ïàðàìåòðû ïî óìîë÷àíèþ
currentData.BAUD = 5;
currentData.INFB = 1;
currentData.IIN = CHARGE;
currentData.IFV = Hp0_1;
currentData.IFV = Hp0_2;
currentData.IFN = Lp100000;
currentData.IKU = Ku1;
currentData.IK0 = 1;
currentData.IK1 = 0;
currentData.IK2 = 0;
currentData.IK2 = '~';
currentData.IK3 = 0;
currentData.IK4 = 0;
currentData.IK5 = 0;
currentData.IPZ =0;
currentData.KCOND = 1.0f;
currentData.SENS = 1.0f;
currentData.UNIT =MS2;
rewrite = true;
}
@ -105,6 +150,53 @@ volatile bool rewrite = false;
}
void rdCor(void)
{
uint8_t i;
uint32_t lenpar;
volatile bool rewrite = false;
lenpar = sizeof(correctedKu);
memcpy((void *) &correctedKu, (void *) USERPAGECOR, lenpar);
//pardata.OWN = 0xffff;//todo //åñëè çíà÷åíèÿ áîëüøå 4095 òî ïåðåïèñàòü íà îáû÷íûå 4095
/*
if(currentData.OWN == 0xffff) //åñëè ïåðâàÿ çàïèñü è âåçäå ïóñòî
{
currentData.OWN = 1; //ñòàâèì ïàðàìåòðû ïî óìîë÷àíèþ
currentData.BAUD = 5;
currentData.INFB = 1;
currentData.IIN = CHARGE;
currentData.IFV = Hp0_2;
currentData.IFN = Lp100000;
currentData.IKU = Ku1;
currentData.IK0 = 1;
currentData.IK1 = 0;
currentData.IK2 = '~';
currentData.IK3 = 0;
currentData.IK4 = 0;
currentData.IK5 = 0;
currentData.IPZ =0;
currentData.KCOND = 1.0f;
currentData.SENS = 1.0f;
currentData.UNIT =MS2;
rewrite = true;
}
////////////////////
if(rewrite)
{
rewrite = false;
wrCor();
}
*/
}

View File

@ -8,7 +8,9 @@ extern UserData_TypeDef currentData;
extern int menuPointer;
extern uint16_t dvd;
extern int ignoreOff_flag;
uint16_t kpr_temp[5];
uint16_t kpr_temp[6];
extern uint16_t correctedKu[13];
__IO uint16_t KEY_STATE = 0;
@ -26,6 +28,8 @@ void keysHandler(void){
menuPointer++; //číŕ÷ĺ ńëĺäóţůčé ďóíęň
}
switch (menuPointer){
case KPR0:
@ -83,13 +87,16 @@ void keysHandler(void){
}
break;
case KPR4:
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--;
@ -97,57 +104,167 @@ void keysHandler(void){
}
break;
case KPR5:
if((key==UP_BTN_Pin)) {
if((currentData.IK5<9)&&(currentData.IK5>=0)) currentData.IK5++;
else if(currentData.IK5=='~') currentData.IK5=0;
else if(currentData.IK5==9) currentData.IK5='~';
}
if((key==DN_BTN_Pin)) {
if(currentData.IK5==0) currentData.IK5='~';
else if ((currentData.IK5<=9)&&(currentData.IK5>0)) currentData.IK5--;
else if(currentData.IK5='~') currentData.IK5=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){
kpr_temp[5]=currentData.IK5;
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; // ÏÅÐÅÑÊÎ×ÈÒ ÑÀÌ
currentData.IK5=kpr_temp[5];
menuPointer=KPR0; // ÏÅÐÅÑÊÎ×ÈÒ ÑÀÌ
//ďčřĺě ÷ňî çíŕ÷ĺíč˙ íĺ âĺđíű
//đčńóĺě íóëč
};
menuPointer++;
}
else
{sh_applysetting(&currentData);
menuPointer++;}
break;
case UNITSELECT:
if((key==UP_BTN_Pin)&&(currentData.UNIT<H)) {currentData.UNIT++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.UNIT>MS2)) {currentData.UNIT--; sh_applysetting(&currentData);}
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);}
if((key==UP_BTN_Pin)&&(currentData.IKU<Ku1000)) {currentData.IKU++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IKU>Ku0_1)) {currentData.IKU--; sh_applysetting(&currentData);}
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);}
if((key==UP_BTN_Pin)&&(currentData.IFV<Hp10)) {currentData.IFV++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IFV>Hp0_2)) {currentData.IFV--; sh_applysetting(&currentData);}
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);}
if((key==UP_BTN_Pin)&&(currentData.IFN<Lp100000)) {currentData.IFN++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IFN>Lp100)) {currentData.IFN--; sh_applysetting(&currentData);}
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);}
if((key==UP_BTN_Pin)) {currentData.IPZ=1; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)) {currentData.IPZ=0; sh_applysetting(&currentData);}
break;
case SAVING:
wrPar();
menuPointer=WORK;
sh_applysetting(&currentData, dvd);//todo Ñäåëàòü ïî íîðìàëüíîìó.
sh_applysetting(&currentData);//todo Ñäåëàòü ïî íîðìàëüíîìó.
break;
} //close switch
}; //close keysHandler
void keysHandlerCallibration(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))
{ wrCor();
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_SET);} //
if(key==OK_BTN_Pin){ //Ïî íàæàòèþ ÎÊ
//if(menuPointer==GROUND){menuPointer=WORK;} //todo ñäåëàé ñîõðàíåíèå //Åñëè êðàéíèé ïóíêò ìåíþ òî âîçâðàùàåìñÿ ê ðàáîòå
sh_applysetting(&currentData);
menuPointer++; //èíà÷å ñëåäóþùèé ïóíêò
}
switch (menuPointer){
case KUSET:
if((key==UP_BTN_Pin)&&(currentData.IKU<Ku1000)) {currentData.IKU++; sh_applysetting(&currentData);}
if((key==DN_BTN_Pin)&&(currentData.IKU>Ku0_1)) {currentData.IKU--; sh_applysetting(&currentData);}
break;
case DAC0SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+1000<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+1000;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-1000>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-1000;
sh_applysetting(&currentData);
}
break;
case DAC1SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+100<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+100;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-100>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-100;
sh_applysetting(&currentData);
}
break;
case DAC2SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+10<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+10;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-10>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-10;
sh_applysetting(&currentData);
}
break;
case DAC3SET:
if(key==UP_BTN_Pin) {
if((correctedKu[currentData.IKU]+1<=4095)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]+1;
sh_applysetting(&currentData);
};
if((key==DN_BTN_Pin)) {
if((correctedKu[currentData.IKU]-1>=1)) correctedKu[currentData.IKU]=correctedKu[currentData.IKU]-1;
sh_applysetting(&currentData);
}
break;
case SAVE:
wrCor();
sh_applysetting(&currentData);//todo Ñäåëàòü ïî íîðìàëüíîìó.
menuPointer=KUSET;
break;
} //close switch
}; //close keysHandlerCallibration

View File

@ -39,41 +39,42 @@
volatile int needRefresh; ///
char pString[16];
char* FloatToASCII(float Val, int32_t RoundTo); //ïîêà îáúÿâëþ å¸ òóò
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; //òåêóùèé ýëåìåíò áóôåðà
extern uint16_t ADC_Buff[ADC_BUFFSIZE];
volatile int needRefresh; ///
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;
uint32_t dotPositon; // ïîçèöèÿ òî÷êè
int reload_flag=0; //ôëàã ïåðåãðóçêè
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);
void check_reload(void); // todo îòíåñè íà ìåñòî
UserData_TypeDef currentData;
int main(void)
{
@ -98,6 +99,24 @@ int main(void)
currentData.ACCEL; // 32,33,34,35 7503 //
*/
/*
correctedKu[Ku0_1]=4095;
correctedKu[Ku0_2]=4095;
correctedKu[Ku0_5]=4095;
correctedKu[Ku1]=4095;
correctedKu[Ku2]=4095;
correctedKu[Ku5]=4095;
correctedKu[Ku10]=4095;
correctedKu[Ku20]=4095;
correctedKu[Ku50]=4095;
correctedKu[Ku100]=4095;
correctedKu[Ku200]=4095;
correctedKu[Ku500]=4095;
correctedKu[Ku1000]=4095;
*/
HAL_Init();
SystemClock_Config();
@ -112,33 +131,55 @@ int main(void)
MX_USART1_UART_Init();
/////Äåëåì ñòàðò ýêðàíó
ssd1306_Init();
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin , GPIO_PIN_RESET); //ôèêñèðóåì ïèòàíèå ïðèáîðà
if(HAL_GPIO_ReadPin(OK_BTN_GPIO_Port, OK_BTN_Pin) == GPIO_PIN_RESET){workMode=CALLIBRATION;} // ïðè óäåðæèâàíèè êíîïêè ïåðåêëþ÷àåìñÿ â çàâîäñêîé ðåæèì ðàáîòû
DrawLogo();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
sh_applysetting(&currentData, dvd); // ïðèìåíÿåì íàñòðîéêè èç ñòóêòóðû ñ ÖÀÏ íà âñþ
HAL_GPIO_WritePin(USART1_RE_GPIO_Port, USART1_RE_Pin, SET);
//HAL_UART_Transmit(&huart1, (uint8_t*)"Hello World", 12, 100);
HAL_UART_Transmit_IT(&huart1, (uint8_t*)"Hello World\n", 12);
while (1){
if(workMode==NORMAL){screenDraw(); // todo: Óáðàòü êîñòûëü!!! Ñ÷èòàåì â ýêðàíå çíà÷åíèå íà DAC.
sh_applysetting(&currentData); }// ïðèìåíÿåì íàñòðîéêè èç ñòóêòóðû ñ ÖÀÏ íà âñþ
while (workMode==NORMAL){
check_reload();
keysHandler();
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;
sh_applysetting(&currentData); }//
while (workMode==CALLIBRATION){
check_reload();
keysHandlerCallibration();
if(RefreshScreen){
screenDrawCallibration();
ssd1306_UpdateScreen();
ssd1306_Fill(0x00);
RefreshScreen=0;
} //end if RefreshScreen
} //end while
} //end main

View File

@ -6,17 +6,24 @@
extern UserData_TypeDef currentData;
extern uint16_t correctedKu[13];
extern float kNormToDAC;
char pString[16] = {0}; //Íóæíà äëÿ FloatToASCII
void sh_applysetting(UserData_TypeDef * currentData, uint16_t DVD){
void setDAC(void);
void sh_applysetting(UserData_TypeDef * currentData){
sh_SetOutGain(currentData->IKU);
sh_SetFvch(currentData->IFV);
sh_SetFnch(currentData->IFN);
sh_SetPlavZeml(currentData->IPZ);
WRDAC(DVD);
setDAC();
}
@ -28,6 +35,7 @@ void sh_SetOutGain(uint16_t IKU){
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);
@ -121,13 +129,13 @@ void sh_SetOutGain(uint16_t IKU){
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:
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; */
break;
}
};
@ -135,7 +143,7 @@ void sh_SetOutGain(uint16_t IKU){
void sh_SetFvch(uint16_t IFV){ //DA9 IA2 IA3
switch (IFV){
case Hp0_1:
case Hp0_2:
HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_RESET);
break;
@ -213,6 +221,13 @@ void sh_SetPlavZeml(uint16_t IPZ){
};
void setDAC(void){
uint16_t DVD=0;
setOffsetKuDisplay(); //todo:Êîñòûëü!! íóæíî ïîðàáîòàòü íàä àðõèòåêòóðîé, à íå ñ÷èòàòü êàê ïðèäåòñÿ
DVD = correctedKu[currentData.IKU]/kNormToDAC; // Äåëèì êîðååêòèðîâàííûé ìíîæèòåëü íà êîýôèöèåíò
WRDAC(DVD); //todo: äåëèì uint íà float - íàäåþñü çàðàáîòàåò
}
void WRDAC(uint16_t DVD)
{
uint8_t i;
@ -238,6 +253,7 @@ uint16_t dvd = DVD;
void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){
if (some<10) OLED_DrawNum(some, x, y, mode);
else if(some>=10&&some<=15) OLED_DrawChar((some+55), x, y, mode); //îòîáðàæàåì êàê HEX todo: ïðîâåðü
else OLED_DrawChar(some, x, y, mode);
}
@ -247,21 +263,22 @@ int asciiToFloat4(uint16_t str[]){
float res=0;
int dotFounded=0;
int dotPos=0;
for (int i=0; i<=4; i++){
for (int i=0; i<=5; i++){
if (str[i]=='~'){ ///todo ñäåëàòü ïðîâåðêó íà íåñêîëüêî òî÷åê
if(dotFounded==0){dotFounded=1; dotPos=i;} //ñòàâèì ôëàã íàéäåííîé òî÷êè ïðèñâàèâàåì ïîçèöèþ
else return 1; //èíà÷å âîçâðàùàåì îøèáêó 1
}
}
float symbol[5];
float symbol[6];
symbol[0]=str[0];
symbol[1]=str[1];
symbol[2]=str[2];
symbol[3]=str[3];
symbol[4]=str[4];
symbol[5]=str[5];
if(dotFounded==0){
res=(float)symbol[0]*10000+(float)symbol[1]*1000+(float)symbol[2]*100+(float)symbol[3]*10+(float)symbol[4];
res=(float)symbol[0]*100000+(float)symbol[1]*10000+(float)symbol[2]*1000+(float)symbol[3]*100+(float)symbol[4]*10+(float)symbol[5];
memcpy(&currentData.SENS, &res, sizeof(float)); ///äåëàåì ïðÿìîå êîïèðîâàíèå èíà÷å âîçâðàùàåò íåïîíÿòíî ÷òî
return 0;
}
@ -269,19 +286,46 @@ int asciiToFloat4(uint16_t str[]){
switch(dotPos){
case 0:
res=(float)symbol[1]/(float)10+symbol[2]/(float)100+symbol[3]/(float)1000+symbol[4]/(float)10000;
res=(float)symbol[1]/(float)10
+symbol[2]/(float)100
+symbol[3]/(float)1000
+symbol[4]/(float)10000
+symbol[5]/(float)100000;
break;
case 1:
res=symbol[0]+(float)symbol[2]/10+(float)symbol[3]/100+(float)symbol[4]/1000;
res=symbol[0]
+(float)symbol[2]/10
+(float)symbol[3]/100
+(float)symbol[4]/1000
+(float)symbol[5]/10000;
break;
case 2:
res=symbol[0]*10+(float)symbol[1]+(float)symbol[3]/10+(float)symbol[4]/100;
res=symbol[0]*10
+(float)symbol[1]
+(float)symbol[3]/10
+(float)symbol[4]/100
+(float)symbol[5]/1000;
break;
case 3:
res=symbol[0]*(float)100+symbol[1]*(float)10+symbol[2]+(float)symbol[4]/10;
res=symbol[0]*100
+(float)symbol[1]*(float)10
+(float)symbol[2]
+(float)symbol[4]/10
+(float)symbol[5]/100;
break;
case 4:
res=symbol[0]*1000+(float)symbol[1]*100+(float)symbol[2]*10+(float)symbol[3];
res=symbol[0]*1000
+(float)symbol[1]*100
+(float)symbol[2]*10
+(float)symbol[3]
+(float)symbol[5]/10;
break;
case 5:
res=symbol[0]*10000
+(float)symbol[1]*1000
+(float)symbol[2]*100
+(float)symbol[3]*10
+(float)symbol[4];
break;
default:

View File

@ -7,18 +7,23 @@ extern int menuPointer;
extern int reload_flag;
extern char* kPrToDispl;
extern UserData_TypeDef currentData;
extern float kNormToDAC;
extern uint16_t correctedKu[13];
const char STRING_KPR[] = "Rgh";
const char STRING_PKL_MS2[] = "gRk/vc2";
const char STRING_DATCHIK[] = "Lfnxbr";
const char STRING_PKL[] = "gRk/";
const char STRING_VIHOD[] = "Ds[jl";
const char STRING_MV_MS2[] = "vD/vc2";
const char STRING_FVCH[] = "ADX";
const char STRING_FVCH[] = "DX";
const char STRING_GC[] = "Uw";
const char STRING_FNCH[] = "AYX";
const char STRING_FNCH[] = "YX";
const char STRING_KGC[] = "rUw";
const char STRING_PEREGRUZKA[] = "Gthtuheprf";
@ -37,8 +42,52 @@ const char STRING_Ku50[] = "50";
const char STRING_Ku100[] = "100";
const char STRING_Ku200[] = "200";
const char STRING_Ku500[] = "500";
const char STRING_Ku1000[] = "1000";
const char STRING_Hp0_1[] = "0~1";
const char *STRINGS_UNITS[]={"vc2","Gf","Y&"};
const char *STRINGS_OUTUNITS[] = {"0~0001vD/",
"0~0002vD/",
"0~0005vD/",
"0~001vD/", //3
"0~002vD/",
"0~005vD/",
"0~01vD/",//6
"0~02vD/",
"0~05vD/",
"0~1vD/",//9
"0~2vD/",
"0~5vD/",
"1vD/",//12
"2vD/",
"5vD/",
"10vD/",//15
"20vD/",
"50vD/",
"100vD/",//18
"200vD/",
"500vD/",
"1D/",//21
"2D/",
"5D/",
"10D/",//24
"20D/",
"50D/",
"100D/",//27
"200D/",
"500D/",
"1000D/", //30
};
const char STRING_Hp0_2[] = "0~2";
const char STRING_Hp1[] = "1";
const char STRING_Hp2[] = "2";
const char STRING_Hp10[] = "10";
@ -52,10 +101,36 @@ const char STRING_Lp10000[] = "10";
const char STRING_Lp30000[] = "30";
const char STRING_Lp100000[] = "100";
///ñïåöèàëüíûå ñòðîêè äëÿ çàâîäñêîãî ìåíþ
const char STRING_KORREKCIA_USILENIA[] = "Rjhhtrwbz ecbktybz";
const char STRING_KASKAD[] = "Rfcrfl";
const char STRING_ZNACHENIE_DAC[] = "<fpjdsq WFG";
const char STRING_SOHRANIT_IZMENENIYA[] = "CJ{HFYBNM BPVTYTYBZ";
const char *STRINGS_KU[]={"0~1","0~2","0~5","1","2","5","10","20","50","100","200","500","1000"};
//char* outUnit; // åäèíèöû âûõîäà
char* kuToDispl;
char* fvchTODisp;
char* fnchTODisp;
char* plavZemlToDisp;
int OffsetKuDisplay =0;
void setOffsetKuDisplay(void){ // òàê ýòà øëÿïà âûñòàâëÿåò ñìåùåíèå ïî ìàññèâó ñòðîê äëÿ îòîáðàæåíèÿ ñîãëàñíî íîðìèðîâàíèþ
if (currentData.SENS>=0.0001&&currentData.SENS<0.001) {OffsetKuDisplay=0; kNormToDAC=currentData.SENS*10000;} // òàêèå çíà÷åíèÿ íå äîïóñòèìû
else if (currentData.SENS>=0.001&&currentData.SENS<0.01){OffsetKuDisplay=0; kNormToDAC=currentData.SENS*1000;}
else if (currentData.SENS>=0.01&&currentData.SENS<0.1){OffsetKuDisplay=3; kNormToDAC=currentData.SENS*100;}
else if (currentData.SENS>=0.1&&currentData.SENS<1){OffsetKuDisplay=6; kNormToDAC=currentData.SENS*10;}
else if (currentData.SENS>=1&&currentData.SENS<10){OffsetKuDisplay=9; kNormToDAC=currentData.SENS/1;}
else if (currentData.SENS>=10&&currentData.SENS<100){OffsetKuDisplay=12; kNormToDAC=currentData.SENS/10;}
else if (currentData.SENS>=100&&currentData.SENS<1000){OffsetKuDisplay=15; kNormToDAC=currentData.SENS/100;}
else if (currentData.SENS<=1000){OffsetKuDisplay=18; kNormToDAC=currentData.SENS/1000;}
}
void screenDraw(void)
{
@ -98,6 +173,9 @@ void screenDraw(void)
case Ku500:
kuToDispl=STRING_Ku500;
break;
case Ku1000:
kuToDispl=STRING_Ku1000;
break;
}
@ -105,8 +183,8 @@ void screenDraw(void)
///////ïðîâåðÿåì ÔÂ× âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
switch(currentData.IFV){
case Hp0_1:
fvchTODisp=STRING_Hp0_1;
case Hp0_2:
fvchTODisp=STRING_Hp0_2;
break;
case Hp1:
fvchTODisp=STRING_Hp1;
@ -154,49 +232,72 @@ void screenDraw(void)
break;
}
////ðàññòàâëÿåì íà äèñïëåå íàäïèñè
FontSet(Segoe_UI_Rus_10);
OLED_DrawStr(STRING_KPR, 1, 10, TEXT);
OLED_DrawStr(STRING_DATCHIK, 1, 10, TEXT);
if(menuPointer==KPR0) DrawSome(currentData.IK0, 40, 10, CURSOR);
else {DrawSome(currentData.IK0, 40, 10, TEXT);
}
else DrawSome(currentData.IK0, 40, 10, TEXT);
if(menuPointer==KPR1) DrawSome(currentData.IK1, 47, 10, CURSOR);
else {DrawSome(currentData.IK1, 47, 10, TEXT);
}
else DrawSome(currentData.IK1, 47, 10, TEXT);
if(menuPointer==KPR2) DrawSome(currentData.IK2, 54, 10, CURSOR);
else {DrawSome(currentData.IK2, 54, 10, TEXT);
}
else DrawSome(currentData.IK2, 54, 10, TEXT);
if(menuPointer==KPR3) DrawSome(currentData.IK3, 61, 10, CURSOR);
else {DrawSome(currentData.IK3, 61, 10, TEXT);
}
else DrawSome(currentData.IK3, 61, 10, TEXT);
if(menuPointer==KPR4) DrawSome(currentData.IK4, 68, 10, CURSOR);
else {DrawSome(currentData.IK4, 68, 10, TEXT);
else DrawSome(currentData.IK4, 68, 10, TEXT);
if(menuPointer==KPR5) DrawSome(currentData.IK5, 75, 10, CURSOR);
else DrawSome(currentData.IK5, 75, 10, TEXT);
if(menuPointer==UNITSELECT){
OLED_DrawStr(STRING_PKL, 85, 10, CURSOR);
OLED_DrawStr(STRINGS_UNITS[currentData.UNIT], 109, 10, CURSOR);
} else {
OLED_DrawStr(STRING_PKL, 85, 10, TEXT);
OLED_DrawStr(STRINGS_UNITS[currentData.UNIT], 109, 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_MV_MS2, 67, 24, TEXT);
////////////////////////////
*/
setOffsetKuDisplay(); //îïðåäåëÿåì óñòàíàâëèâàåì åäèíèöû âûõîäà //todo: ñ÷èòàòü ÷àñòî ôëîàòû âðåäíî
OLED_DrawStr(STRING_VIHOD, 1, 24, TEXT);
/// äåëàåì íîâóþ ñòðîêó èç STRINGS_OUTUNITS + units
char *result = malloc(strlen(STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]) + strlen(STRINGS_UNITS[currentData.UNIT]) + 1); // +1 for the null-terminator
// in real code you would check for errors in malloc here
strcpy(result, STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]);
strcat(result, STRINGS_UNITS[currentData.UNIT]);
if(menuPointer==OUT)OLED_DrawStr((char *)result, 40, 24, CURSOR);
else OLED_DrawStr((char *)result, 40, 24, TEXT);//todo: STRINGS_OUTUNITS è units ïîëó÷àåòñÿ ìóòíî
free(result);
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);
if(menuPointer==FVCH) OLED_DrawStr(fvchTODisp, 19, 36, CURSOR);
else OLED_DrawStr(fvchTODisp, 19, 36, TEXT);
OLED_DrawStr(STRING_GC, 35, 36, TEXT);
//////////////
OLED_DrawStr(STRING_FNCH, 58, 36, TEXT);
OLED_DrawStr((char *)STRING_FNCH, 63, 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);
OLED_DrawStr((char *)STRING_KGC, 103, 36, TEXT);
//////////////
if(menuPointer==GROUND) OLED_DrawStr(plavZemlToDisp, 20, 48, CURSOR);
@ -213,4 +314,144 @@ FontSet(Segoe_UI_Rus_10);
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);
*/
} // end screenDraw
void screenDrawCallibration(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;
case Ku1000:
kuToDispl=STRING_Ku1000;
break;
}
///////ïðîâåðÿåì ÔÂ× âûõîäà. ïðèñâàåâàåì óêàçàòåëþ ñîîòâåòñâóþùåå çíà÷åíèå
switch(currentData.IFV){
case Hp0_2:
fvchTODisp=STRING_Hp0_2;
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_KORREKCIA_USILENIA, CENTER, 10, TEXT); //Çàãîëîâîê
OLED_DrawStr(STRING_KASKAD, 1, 24, TEXT); //êàñêàä
if(menuPointer==KUSET) OLED_DrawStr(STRINGS_KU[currentData.IKU], 45, 24, CURSOR);// îòîáðàæàåì êîýôèöèåíò óñèëåíèÿ
else OLED_DrawStr(STRINGS_KU[currentData.IKU], 45, 24, TEXT);
OLED_DrawStr(STRING_ZNACHENIE_DAC, 1, 36, TEXT);
//ïîöèôðàì âûâîäèì ñîîòâåòñâóþùèé óñèëåíèþ çíà÷åíèå ÖÀÏ
// äåëàåì ïîáèòîâûé & ñ ìàñêîé
//
uint16_t correctedKutoDispl = correctedKu;//Íàâåðíîå ëèøíåå
if(menuPointer==DAC0SET) DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, CURSOR);
else DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, TEXT);
if(menuPointer==DAC1SET) DrawSome(((correctedKu[currentData.IKU]%1000)/100), 92, 36, CURSOR);
else DrawSome(((correctedKu[currentData.IKU]%1000)/100), 92, 36, TEXT);
if(menuPointer==DAC2SET) DrawSome(((correctedKu[currentData.IKU]%100)/10), 99, 36, CURSOR);
else DrawSome(((correctedKu[currentData.IKU]%100)/10), 99, 36, TEXT);
if(menuPointer==DAC3SET) DrawSome(((correctedKu[currentData.IKU]%10)/1), 106, 36, CURSOR);
else DrawSome(((correctedKu[currentData.IKU]%10)/1), 106, 36, TEXT);
if(menuPointer==SAVE){
OLED_DrawStr(STRING_SOHRANIT_IZMENENIYA, 1, 48, CURSOR); //todo:îòîáðàæàòü ñîõðàíåíèÿ
}
} // end screenDraw

View File

@ -81,7 +81,8 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN USART1_MspInit 1 */
HAL_NVIC_SetPriority(USART1_IRQn, 8, 6);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE END USART1_MspInit 1 */
}
}
@ -109,6 +110,77 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
}
}
void USART1_IRQHandler(void)
{
if((__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE)) && (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE)))
{
//Receive_Complete();
HAL_UART_RxCpltCallback(&huart1);
}
else
{
HAL_UART_IRQHandler(&huart1);
}
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE))
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_ORE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_PE))
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_PE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_FE))
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_FE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_NE))
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_NE);
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1) // Sensors
{
// HAL_GPIO_WritePin(SENS_RE_GPIO_Port, SENS_RE_Pin, GPIO_PIN_RESET);
//TX_OK = true;
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC);
}
else
{
// Transfer_Complete();
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1) // Sensors
{
// RX_OK = true;
}
else
{
// Receive_Complete();
}
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1) // Sensors
{
// RX_OK = TX_OK = false;
// HAL_GPIO_WritePin(SENS_RE_GPIO_Port, SENS_RE_Pin, GPIO_PIN_RESET);
}
// UART_ERROR = true;
// HAL_UART_Abort_IT(huart);
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */