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"main
parent
2ac0af3fea
commit
6eae35ff71
|
@ -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 "${INPUTS}"" 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 "${INPUTS}"" 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 "${INPUTS}"" 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 "${INPUTS}"" 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>
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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***********
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 *) ¤tData;
|
||||||
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 *) ¤tData, (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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
413
Core/Src/main.c
413
Core/Src/main.c
|
@ -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(¤tData, 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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue