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
dplimin 2023-10-11 17:28:58 +03:00
parent 2ac0af3fea
commit 6eae35ff71
13 changed files with 303 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_ */

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

@ -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;

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();
} }

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