modified: .settings/language.settings.xml

modified:   Core/Inc/OLED_Fonts.h
	modified:   Core/Inc/flash.h
	modified:   Core/Inc/keys.h
	modified:   Core/Inc/main.h
	modified:   Core/Inc/modbus.h
	modified:   Core/Inc/my.h
	modified:   Core/Inc/screen.h
	modified:   Core/Inc/struct.h
	modified:   Core/Inc/usart.h
	modified:   Core/Src/flash.c
	modified:   Core/Src/main.c
	modified:   Core/Src/my.c
	modified:   Core/Src/screen.c
	modified:   Core/Src/ssd1306.c
	modified:   Core/Src/stm32f4xx_it.c
	modified:   Core/Src/tim.c
	modified:   Core/Src/usart.c

	.settings/org.eclipse.core.resources.prefs
	Core/Src/modbus.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"
main
dplimin 2023-11-24 14:41:27 +03:00
parent d289acf169
commit d9f76c68ee
18 changed files with 243 additions and 196 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="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"> <provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="-1229430809610863902" 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="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"> <provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="-1229430809610863902" 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

@ -43,4 +43,5 @@ void FontSet(const uint8_t* font);
void OLED_DrawStr(char *str, uint8_t x, uint8_t y, uint8_t mode); void OLED_DrawStr(char *str, uint8_t x, uint8_t y, uint8_t mode);
#endif /* OLEDFONTS_H_ */ #endif /* OLEDFONTS_H_ */

View File

@ -20,7 +20,10 @@
void MX_FLASH_Init(void); void MX_FLASH_Init(void);
void wrPar(void);
void rdPar(void); void rdPar(void);
void wrCor(void);
void rdCor(void);
#endif /* INC_FLASH_H_ */ #endif /* INC_FLASH_H_ */

View File

@ -4,3 +4,4 @@
void keysHandler(void); void keysHandler(void);
void keysHandlerCallibration(void);

View File

@ -112,6 +112,7 @@ void Error_Handler(void);
/* USER CODE END Private defines */ /* USER CODE END Private defines */
char* FloatToASCII(float Val, int32_t RoundTo); //ïîêà îáúÿâëþ å¸ òóò
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -55,5 +55,8 @@ uint16_t Crc16(uint16_t len);
uint16_t Crc16_TX(uint16_t len); uint16_t Crc16_TX(uint16_t len);
void UART_Transmit(uint8_t *pData); void UART_Transmit(uint8_t *pData);
void StartTransfer(void); void StartTransfer(void);
void Receive_Complete(void);
void Transfer_Complete(void);
#endif /* _MODBUS_H_ */ #endif /* _MODBUS_H_ */

View File

@ -23,56 +23,22 @@
#include "ssd1306.h" #include "ssd1306.h"
#include <stdlib.h> #include <stdlib.h>
#define LOGO_TIME_MS (500u) #define LOGO_TIME_MS (1000u)
#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 typedef enum
{ {
CURSOR = Black, CURSOR = Black,
TEXT = White TEXT = White
}typeTEXT; }typeTEXT;
static const uint16_t Crc16Table[256] =
{
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
};
static const uint16_t sendtime[]={ 2400, 1600, 1200, 800, 600, 308, 200, 108, 94, 54 };
static const uint16_t time35[] = { 8, 6, 6, 6, 4, 4, 4, 1, 4, 4 };
void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode); void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode);
typedef enum { CHARGE = 0} typeIIN; typedef enum { CHARGE = 0} typeIIN;
@ -130,5 +96,7 @@ void WRDAC(uint16_t DVD);
void sh_SetFvch(uint16_t IFV); void sh_SetFvch(uint16_t IFV);
void sh_SetOutGain(uint16_t IKU); void sh_SetOutGain(uint16_t IKU);
void sh_applysetting(UserData_TypeDef * currentData); void sh_applysetting(UserData_TypeDef * currentData);
uint16_t kbhit(void);
void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode); // îïðåäåëÿåì öèôðà èëè ÷àð è â ñîîòâåòñòâèè ðèñóåì
#endif /* INC_MY_H_ */ #endif /* INC_MY_H_ */

View File

@ -5,5 +5,5 @@
void screenDraw(void); void screenDraw(void);
void screenDrawCallibration(void);

View File

@ -73,20 +73,27 @@ typedef struct
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 IK0; // 14,15 5005 // çíàêîìåñòî 0 uint16_t IKE; // 14,15 5005 // Legacy a141
uint16_t IK1; // 16,17 5006 // çíàêîìåñòî 1 uint16_t IKD; // 16,17 5006 // Legacy a141
uint16_t IK2; // 18,19 5007 // çíàêîìåñòî 2 uint16_t IKS; // 18,19 5007 // Legacy a141
uint16_t IK3; // 20,21 // çíàêîìåñòî 3 uint16_t IPZ; // 20,21 5008 // ďđčçíŕę ďëŕâ çĺěëč
uint16_t IK4; // 22,23 // çíàêîìåñòî 4 uint16_t OPZ; // 22,23 5009 // Legacy a141
uint16_t IK5; // 22,23 // çíàêîìåñòî 4 uint16_t UNIT; // 22,23 5010 // Çíŕ÷ĺíč˙
uint16_t OVERLOAD; // 24,25 5011 // Čńďîëüçóţ äë˙ ďĺđĺäŕ÷č ďĺđĺăđóçęč
uint16_t IPZ; // 24,25 5008 // ïëàâàþùàÿ çåìëÿ
float KCOND; // 28,29,30,31 7501 // uint16_t IK0; // 14,15 5012 // çíŕęîěĺńňî 0
uint16_t IK1; // 16,17 5013 // çíŕęîěĺńňî 1
uint16_t IK2; // 18,19 5014 // çíŕęîěĺńňî 2
uint16_t IK3; // 20,21 5015 // çíŕęîěĺńňî 3
uint16_t IK4; // 22,23 5016 // çíŕęîěĺńňî 4
uint16_t IK5; // 22,23 5017 // çíŕęîěĺńňî 5
float KCOND; // 28,29,30,31 7501 //Legacy a141
float SENS; // 32,33,34,35 7502 //дублирование (коэфициэнт преобразования) float SENS; // 32,33,34,35 7502 //дублирование (коэфициэнт преобразования)
uint16_t UNIT; //Îòîáðàæàåìûå âåëè÷èíû íà ýêðàíå float ACCEL; // 32,33,34,35 7503 //Legacy a141
} UserData_TypeDef; // ********LENGTH = 39 bytes*********** } UserData_TypeDef; // ********LENGTH = ** bytes***********
typedef struct { typedef struct {

View File

@ -38,6 +38,7 @@ extern UART_HandleTypeDef huart1;
/* USER CODE END Private defines */ /* USER CODE END Private defines */
void MX_USART1_UART_Init(void); void MX_USART1_UART_Init(void);
void MX_USART1_UART_DeInit(void);
/* USER CODE BEGIN Prototypes */ /* USER CODE BEGIN Prototypes */

View File

@ -106,7 +106,7 @@ void wrCor(void) ///
void rdPar(void) void rdPar(void)
{ {
uint8_t i; //uint8_t i;
uint32_t lenpar; uint32_t lenpar;
volatile bool rewrite = false; volatile bool rewrite = false;
@ -152,7 +152,7 @@ volatile bool rewrite = false;
void rdCor(void) void rdCor(void)
{ {
uint8_t i; //uint8_t i;
uint32_t lenpar; uint32_t lenpar;
volatile bool rewrite = false; volatile bool rewrite = false;

View File

@ -37,11 +37,12 @@
#include "struct.h" #include "struct.h"
//#include "arm_math.h" //#include "arm_math.h"
#define ALLWAISRELOAD 0 /// òåñòîâûé - âñåãäà ïåðåãðóæåí
char pString[16]; char pString[16];
char* FloatToASCII(float Val, int32_t RoundTo); //ïîêà îáúÿâëþ å¸ òóò
void SystemClock_Config(void); void SystemClock_Config(void);
@ -55,10 +56,12 @@ extern uint32_t current_buff; //
volatile int needRefresh; /// volatile int needRefresh; ///
extern uint16_t ADC_Buff[ADC_BUFFSIZE]; //áóôåð àöï extern uint16_t ADC_Buff[ADC_BUFFSIZE]; //áóôåð àöï
uint16_t meashBuff[DMA_BUFFSIZE]; uint16_t meashBuff[DMA_BUFFSIZE];
uint8_t buff[16] = {0,}; // áóôåð äëÿ ïðèåìà
extern __IO bool needSave;
uint32_t dotPositon; // ïîçèöèÿ òî÷êè uint32_t dotPositon; // ïîçèöèÿ òî÷êè
int reload_flag=0; //ôëàã ïåðåãðóçêè int reload_flag=1; //ôëàã ïåðåãðóçêè
int ignoreOff_flag=1; //èãíîðèðîâàíèå êíîïêè ïèòàíèÿ int ignoreOff_flag=1; //èãíîðèðîâàíèå êíîïêè ïèòàíèÿ
uint16_t dvd=0xfff; //Äåôîëòíîå çíà÷åíèå äëÿ îòïðàâêè íà öàï ÎÒËÀÄÊÀ uint16_t dvd=0xfff; //Äåôîëòíîå çíà÷åíèå äëÿ îòïðàâêè íà öàï ÎÒËÀÄÊÀ
float kNormToDAC = 0; // Ê äëÿ íîðìèðîâàíèÿ ñîãëàñíî ÷óâñòâèòåëüíîñòè äàò÷èêà float kNormToDAC = 0; // Ê äëÿ íîðìèðîâàíèÿ ñîãëàñíî ÷óâñòâèòåëüíîñòè äàò÷èêà
@ -75,49 +78,13 @@ void check_reload(void); // todo
UserData_TypeDef currentData; UserData_TypeDef currentData;
int main(void) int main(void)
{ {
/* 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 //
*/
/*
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(); HAL_Init();
SystemClock_Config(); SystemClock_Config();
MX_FLASH_Init(); MX_FLASH_Init();
@ -128,6 +95,9 @@ int main(void)
MX_SPI1_Init(); MX_SPI1_Init();
MX_TIM7_Init(); MX_TIM7_Init();
//currentData.BAUD = 5; // usart.c BAUDRATE[] = {4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 128000, 230400};
//currentData.INFB = 0;
MX_USART1_UART_Init(); MX_USART1_UART_Init();
@ -141,17 +111,27 @@ int main(void)
ssd1306_UpdateScreen(); ssd1306_UpdateScreen();
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);
if(workMode==NORMAL){screenDraw(); // todo: Óáðàòü êîñòûëü!!! Ñ÷èòàåì â ýêðàíå çíà÷åíèå íà DAC. if(workMode==NORMAL){screenDraw(); // todo: Óáðàòü êîñòûëü!!! Ñ÷èòàåì â ýêðàíå çíà÷åíèå íà DAC.
sh_applysetting(&currentData); }// ïðèìåíÿåì íàñòðîéêè èç ñòóêòóðû ñ ÖÀÏ íà âñþ sh_applysetting(&currentData); }// ïðèìåíÿåì íàñòðîéêè èç ñòóêòóðû ñ ÖÀÏ íà âñþ
while (workMode==NORMAL){ while (workMode==NORMAL){
HAL_UART_Receive_IT(&huart1, (uint8_t*)buff, 1); //íà÷àëî öåïî÷êè ïðåðûâàíèé
check_reload(); check_reload();
keysHandler(); keysHandler();
if(needSave)
{
needSave = false;
//wrPar();
}
if(RefreshScreen){ if(RefreshScreen){
screenDraw(); screenDraw();
ssd1306_UpdateScreen(); ssd1306_UpdateScreen();
@ -195,7 +175,7 @@ int main(void)
void check_reload(void){ void check_reload(void){
static __IO uint32_t reloadOffTime=0; static __IO uint32_t reloadOffTime=0;
uint32_t isReloaded=0; uint32_t isReloaded=ALLWAISRELOAD;
/*__IO uint32_t tick=HAL_GetTick(); //äëÿ çàìåðîâ âðåìåíè */ /*__IO uint32_t tick=HAL_GetTick(); //äëÿ çàìåðîâ âðåìåíè */
memcpy((void *) &meashBuff[0], (void *) &ADC_Buff[current_buff], DMA_BUFFSIZE<<1); memcpy((void *) &meashBuff[0], (void *) &ADC_Buff[current_buff], DMA_BUFFSIZE<<1);
for(uint16_t i=0; i<DMA_BUFFSIZE; i++ ){ for(uint16_t i=0; i<DMA_BUFFSIZE; i++ ){
@ -205,11 +185,11 @@ void check_reload(void){
} }
} }
if(isReloaded==1){ //åñëè íàøëè ïîðîãîâîå çíà÷åíèå if(isReloaded==1){ //åñëè íàøëè ïîðîãîâîå çíà÷åíèå
reload_flag=1; //âçâîäèì ãëîáàëüíûé ôëàã ïåðåãðóçêè currentData.OVERLOAD=1; //âçâîäèì ãëîáàëüíûé ôëàã ïåðåãðóçêè
reloadOffTime=HAL_GetTick()+2000; //óñòàíàâëèâàåì òàéìåð ñáðîñà ïåðåãðóçêè +2 ñåê reloadOffTime=HAL_GetTick()+2000; //óñòàíàâëèâàåì òàéìåð ñáðîñà ïåðåãðóçêè +2 ñåê
} }
uint32_t tick = HAL_GetTick(); uint32_t tick = HAL_GetTick();
if(reloadOffTime<tick){reload_flag=0;} // åñëè ïðîøëî 2 ñåêóíäû îò ïåðåãðóçêè ñáðàñûâàåì ãëîáàëüíûé ôëàã if(reloadOffTime<tick){currentData.OVERLOAD=0;} // åñëè ïðîøëî 2 ñåêóíäû îò ïåðåãðóçêè ñáðàñûâàåì ãëîáàëüíûé ôëàã
/*tick=HAL_GetTick()-tick; /*tick=HAL_GetTick()-tick;
tick=0; //äëÿ çàìåðà âðåìåíè*/ tick=0; //äëÿ çàìåðà âðåìåíè*/

View File

@ -251,9 +251,9 @@ uint16_t dvd = DVD;
} }
void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){ void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){ //îòðèñîâûâàåì int èëè char
if (some<10) OLED_DrawNum(some, x, y, 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 if(some>=10&&some<=15) OLED_DrawChar((some+55), x, y, mode); //îòîáðàæàåì êàê HEX todo: ïðîâåðü
else OLED_DrawChar(some, x, y, mode); else OLED_DrawChar(some, x, y, mode);
} }

View File

@ -10,7 +10,7 @@ extern UserData_TypeDef currentData;
extern float kNormToDAC; extern float kNormToDAC;
extern uint16_t correctedKu[13]; extern uint16_t correctedKu[13];
extern uint8_t iobuf[256];
@ -110,10 +110,10 @@ 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"}; const char *STRINGS_KU[]={"0~1","0~2","0~5","1","2","5","10","20","50","100","200","500","1000"};
//char* outUnit; // åäèíèöû âûõîäà //char* outUnit; // åäèíèöû âûõîäà
char* kuToDispl; const char* kuToDispl;
char* fvchTODisp; const char* fvchTODisp;
char* fnchTODisp; const char* fnchTODisp;
char* plavZemlToDisp; const char* plavZemlToDisp;
int OffsetKuDisplay =0; int OffsetKuDisplay =0;
@ -282,10 +282,9 @@ FontSet(Segoe_UI_Rus_10);
// in real code you would check for errors in malloc here // in real code you would check for errors in malloc here
strcpy(result, STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]); strcpy(result, STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]);
strcat(result, STRINGS_UNITS[currentData.UNIT]); strcat(result, STRINGS_UNITS[currentData.UNIT]);
if(menuPointer==OUT)OLED_DrawStr((char *)result, 40, 24, CURSOR); if(menuPointer==OUT)OLED_DrawStr((char *)result, 40, 24, CURSOR);
else OLED_DrawStr((char *)result, 40, 24, TEXT);//todo: STRINGS_OUTUNITS è units ïîëó÷àåòñÿ ìóòíî else OLED_DrawStr((char *)result, 40, 24, TEXT);//todo: STRINGS_OUTUNITS è units ïîëó÷àåòñÿ ìóòíî
free(result); free(result); /// îñâîáîäèë ïàìÿòü
OLED_DrawStr(STRING_FVCH, 2, 36, TEXT); OLED_DrawStr(STRING_FVCH, 2, 36, TEXT);
if(menuPointer==FVCH) OLED_DrawStr(fvchTODisp, 19, 36, CURSOR); if(menuPointer==FVCH) OLED_DrawStr(fvchTODisp, 19, 36, CURSOR);
@ -303,11 +302,18 @@ FontSet(Segoe_UI_Rus_10);
if(menuPointer==GROUND) OLED_DrawStr(plavZemlToDisp, 20, 48, CURSOR); if(menuPointer==GROUND) OLED_DrawStr(plavZemlToDisp, 20, 48, CURSOR);
else OLED_DrawStr(plavZemlToDisp, 20, 48, TEXT); else OLED_DrawStr(plavZemlToDisp, 20, 48, TEXT);
if(reload_flag){OLED_DrawStr(STRING_PEREGRUZKA, 50, 48, CURSOR);} if(currentData.OVERLOAD){OLED_DrawStr(STRING_PEREGRUZKA, 50, 48, CURSOR);}
/* uncomment to debug RS-232
OLED_DrawNum(iobuf[0], 6, 48, TEXT);
OLED_DrawNum(iobuf[1], 20, 48, TEXT);
OLED_DrawNum(iobuf[2], 34, 48, TEXT);
OLED_DrawNum(iobuf[3], 48, 48, TEXT);
OLED_DrawNum(iobuf[4], 62, 48, TEXT);
OLED_DrawNum(iobuf[5], 76, 48, TEXT);
OLED_DrawNum(iobuf[6], 90, 48, TEXT);
OLED_DrawNum(iobuf[7], 104, 48, TEXT);
*/
/* /*
if((menuPointer==GROUND)&&(set.plavZeml==0)) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, CURSOR); if((menuPointer==GROUND)&&(set.plavZeml==0)) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, CURSOR);
else if(set.plavZeml==0) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, TEXT); else if(set.plavZeml==0) OLED_DrawStr(STRING_OBSHAJA_ZEMLJA, CENTER, 48, TEXT);
@ -432,7 +438,7 @@ FontSet(Segoe_UI_Rus_10);
//ïîöèôðàì âûâîäèì ñîîòâåòñâóþùèé óñèëåíèþ çíà÷åíèå ÖÀÏ //ïîöèôðàì âûâîäèì ñîîòâåòñâóþùèé óñèëåíèþ çíà÷åíèå ÖÀÏ
// äåëàåì ïîáèòîâûé & ñ ìàñêîé // äåëàåì ïîáèòîâûé & ñ ìàñêîé
// //
uint16_t correctedKutoDispl = correctedKu;//Íàâåðíîå ëèøíåå
if(menuPointer==DAC0SET) DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, CURSOR); if(menuPointer==DAC0SET) DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, CURSOR);
else DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, TEXT); else DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, TEXT);

View File

@ -4,12 +4,14 @@
#include <string.h> // For memcpy #include <string.h> // For memcpy
#include "my.h" // For memcpy #include "my.h" // For memcpy
#include "OLED_Fonts.h" #include "OLED_Fonts.h"
#include "stdio.h"
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 currentData, pardata_old; extern __IO UserData_TypeDef currentData, pardata_old;
const static uint32_t BAUDRATE[] = {4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 128000, 230400}; // Óáðàë static ÷òî áû óâèäåòü â äðóãîì ôàéëå
__IO uint8_t DMA_Ready = 0; __IO uint8_t DMA_Ready = 0;
@ -136,7 +138,7 @@ void ssd1306_Reset(void) {
// Send a byte to the command register // Send a byte to the command register
void ssd1306_WriteCommand(uint8_t byte) { void ssd1306_WriteCommand(uint8_t byte) {
uint8_t rx; // uint8_t rx;
HAL_GPIO_WritePin(SSD1306_CS_Port, SSD1306_CS_Pin, GPIO_PIN_RESET); // select OLED HAL_GPIO_WritePin(SSD1306_CS_Port, SSD1306_CS_Pin, GPIO_PIN_RESET); // select OLED
HAL_GPIO_WritePin(SSD1306_DC_Port, SSD1306_DC_Pin, GPIO_PIN_RESET); // command HAL_GPIO_WritePin(SSD1306_DC_Port, SSD1306_DC_Pin, GPIO_PIN_RESET); // command
//HAL_SPI_TransmitReceive(&hspi2, &byte, &rx, 1, 100); //HAL_SPI_TransmitReceive(&hspi2, &byte, &rx, 1, 100);
@ -147,7 +149,7 @@ void ssd1306_WriteCommand(uint8_t byte) {
// Send data // Send data
void ssd1306_WriteData(uint8_t* buffer, size_t buff_size) { void ssd1306_WriteData(uint8_t* buffer, size_t buff_size) {
uint32_t i; //uint32_t i;
HAL_GPIO_WritePin(SSD1306_CS_Port, SSD1306_CS_Pin, GPIO_PIN_RESET); // select OLED HAL_GPIO_WritePin(SSD1306_CS_Port, SSD1306_CS_Pin, GPIO_PIN_RESET); // select OLED
HAL_GPIO_WritePin(SSD1306_DC_Port, SSD1306_DC_Pin, GPIO_PIN_SET); // data HAL_GPIO_WritePin(SSD1306_DC_Port, SSD1306_DC_Pin, GPIO_PIN_SET); // data
@ -205,40 +207,21 @@ char str[10];
FontSet(Segoe_UI_Rus_8); FontSet(Segoe_UI_Rus_8);
#ifdef A621
OLED_DrawStr("Db,hjrjynhjkkth F621", CENTER, 0, White);
#endif
#ifdef A631
OLED_DrawStr("Db,hjrjynhjkkth F631", CENTER, 0, White);
#endif
#ifdef A632
OLED_DrawStr("Db,hjrjynhjkkth F632", CENTER, 0, White);
#endif
#ifdef A633
OLED_DrawStr("Db,hjrjynhjkkth F633", CENTER, 0, White);
#endif
#ifdef A634
OLED_DrawStr("Db,hjrjynhjkkth F634", CENTER, 0, White);
#endif
#ifdef A635
OLED_DrawStr("Db,hjrjynhjkkth F635", CENTER, 0, White);
#endif
#ifdef A636
OLED_DrawStr("Db,hjrjynhjkkth F636", CENTER, 0, White);
#endif
#ifdef A637
OLED_DrawStr("Db,hjrjynhjkkth F637", CENTER, 0, White);
#endif
#ifdef A638
OLED_DrawStr("Db,hjrjynhjkkth F638", CENTER, 0, White);
#endif
#ifdef A639
OLED_DrawStr("Db,hjrjynhjkkth F639", CENTER, 0, White);
#endif
ssd1306_SetCursor(76, 52); //ssd1306_SetCursor(76, 52); //ïîæàëóé îòðèñóþ òóò ñêîðîñòü
ssd1306_WriteString((char *) SERIAL, Font_6x8, White);
char speed[20];
sprintf(speed, "%i", BAUDRATE[currentData.BAUD]);
OLED_DrawStr(speed, 54, 52, White);
if(currentData.INFB ==0) OLED_DrawStr("<TP RX", 92, 52, White);
if(currentData.INFB ==1) OLED_DrawStr("JLL", 92, 52, White);
if(currentData.INFB ==2) OLED_DrawStr("TDTY", 92, 52, White);
//ssd1306_WriteString((char *) SERIAL, Font_6x8, White);
strcpy(str, "Flhtc "); // íàïèñàíî àäðåñ strcpy(str, "Flhtc "); // íàïèñàíî àäðåñ
@ -261,7 +244,7 @@ char str[10];
str[8] = (char) ((currentData.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, 52, White);
ssd1306_UpdateScreen(); ssd1306_UpdateScreen();
@ -271,7 +254,7 @@ char str[10];
// Initialize the oled screen // Initialize the oled screen
void ssd1306_Init(void) void ssd1306_Init(void)
{ {
char str[10]; //char str[10];
// Reset OLED // Reset OLED
ssd1306_Reset(); ssd1306_Reset();

View File

@ -21,6 +21,9 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "main.h" #include "main.h"
#include "stm32f4xx_it.h" #include "stm32f4xx_it.h"
#include "stdbool.h"
#include "struct.h"
#include "modbus.h"
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
/* USER CODE END Includes */ /* USER CODE END Includes */
@ -56,8 +59,13 @@
/* USER CODE END 0 */ /* USER CODE END 0 */
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_adc1; extern bool sendreq;
extern TIM_HandleTypeDef htim7; extern __IO UserData_TypeDef currentData;
extern __IO uint16_t iolen;
extern __IO uint8_t timeout;
extern __IO DMA_HandleTypeDef hdma_adc1;
extern TIM_HandleTypeDef htim7;
extern __IO uint8_t send;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
/* USER CODE END EV */ /* USER CODE END EV */
@ -182,12 +190,32 @@ void PendSV_Handler(void)
/** /**
* @brief This function handles System tick timer. * @brief This function handles System tick timer.
*/ */
void SysTick_Handler(void) void SysTick_Handler(void){
{
/* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */
HAL_IncTick(); HAL_IncTick();
if(timeout)
timeout--;
else
{
if(iolen)
iolen = 0;
if(sendreq)
{
sendreq = false;
send = true;
timeout = time35[currentData.BAUD];
StartTransfer();
}
else
send = false;
}
/* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */

View File

@ -19,6 +19,7 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "tim.h" #include "tim.h"
#include "my.h"
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */

View File

@ -19,9 +19,26 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "usart.h" #include "usart.h"
#include "stdbool.h"
#include "struct.h"
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
__IO bool UART_ERROR = 0;
__IO bool TX_OK = 0, RX_OK = 0;
const uint32_t BAUDRATE[] = {4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 128000, 230400}; //uint32_t - åñëè ñòàâëþ 16 òî íå ðàáîòàåò!!!!
extern __IO UserData_TypeDef currentData;
extern uint8_t buff[16];
extern bool needSave;
extern bool setbaud;
extern uint16_t delayREDE;
/* USER CODE END 0 */ /* USER CODE END 0 */
UART_HandleTypeDef huart1; UART_HandleTypeDef huart1;
@ -39,17 +56,55 @@ void MX_USART1_UART_Init(void)
/* USER CODE END USART1_Init 1 */ /* USER CODE END USART1_Init 1 */
huart1.Instance = USART1; huart1.Instance = USART1;
huart1.Init.BaudRate = 115200; huart1.Init.BaudRate = BAUDRATE[currentData.BAUD];
huart1.Init.WordLength = UART_WORDLENGTH_8B;
switch(currentData.INFB)
{
case 0: //NONE
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.Parity = UART_PARITY_NONE;
break;
case 1: //ODD
huart1.Init.WordLength = UART_WORDLENGTH_9B;
huart1.Init.Parity = UART_PARITY_ODD;
break;
case 2: //EVEN
huart1.Init.WordLength = UART_WORDLENGTH_9B;
huart1.Init.Parity = UART_PARITY_EVEN;
break;
}
//huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE; // huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16; //huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if(currentData.INFB < 9)
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
else huart1.Init.OverSampling = UART_OVERSAMPLING_8;
if (HAL_UART_Init(&huart1) != HAL_OK) if (HAL_UART_Init(&huart1) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
} }
/* todo: ðàñêîìåíòèòü çàñòàâèòü ðàáîòàòü
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);
HAL_GPIO_WritePin(RE_GPIO_Port, RE_Pin, GPIO_PIN_RESET);
SET_BIT(huart1.Instance->CR1, USART_CR1_RXNEIE | USART_CR1_PEIE); // ðàçðåøåíèå ïðåðûâàíèé ïî RENotEMPTY è îøèáêè ÷åòíîñòè
*/
/* USER CODE BEGIN USART1_Init 2 */ /* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */ /* USER CODE END USART1_Init 2 */
@ -81,7 +136,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN USART1_MspInit 1 */ /* USER CODE BEGIN USART1_MspInit 1 */
HAL_NVIC_SetPriority(USART1_IRQn, 8, 6); HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn); HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE END USART1_MspInit 1 */ /* USER CODE END USART1_MspInit 1 */
} }
@ -111,72 +166,81 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
} }
void MX_USART1_UART_DeInit(void)
{
if(HAL_UART_DeInit(&huart1) != HAL_OK) {
Error_Handler();
}
HAL_NVIC_DisableIRQ(USART1_IRQn);
}
void USART1_IRQHandler(void) void USART1_IRQHandler(void)
{ {
if((__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE)) && (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE))) HAL_UART_IRQHandler(&huart1);
{
//Receive_Complete();
HAL_UART_RxCpltCallback(&huart1);
}
else
{
HAL_UART_IRQHandler(&huart1);
}
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE)) if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE)) //jîøèáêà ïåðåïîëíåíèÿ
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_ORE); __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_ORE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_PE)) if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_PE)) //îøèáêà ÷åòíîñòè
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_PE); __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_PE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_FE)) if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_FE)) //îøèêà êàäðà-ïàêåòà
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_FE); __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_FE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_NE)) if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_NE)) //îøèáêà øóìà
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_NE); __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_NE);
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_NE)) //îøèáêà øóìà
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_NE);
} }
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{ {
if(huart->Instance == USART1) // Sensors
{ __IO uint16_t a;
// HAL_GPIO_WritePin(SENS_RE_GPIO_Port, SENS_RE_Pin, GPIO_PIN_RESET);
//TX_OK = true; a = delayREDE;
__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC); while(a)
} {
else a--; a++; a--; a++; a--;
{ }
// Transfer_Complete();
} if(setbaud)
{
setbaud = false;
needSave = true;
SetBaudRate();
}
//__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC);
//HAL_GPIO_WritePin(RE_GPIO_Port, RE_Pin, GPIO_PIN_RESET);
} }
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{ {
if(huart->Instance == USART1) // Sensors
{ Receive_Complete();
// RX_OK = true; HAL_UART_Receive_IT(&huart1, (uint8_t*)buff, 1);
}
else
{
// Receive_Complete();
}
} }
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) 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; RX_OK = TX_OK = false;
// HAL_UART_Abort_IT(huart); HAL_GPIO_WritePin(USART1_RE_GPIO_Port, USART1_RE_Pin, GPIO_PIN_RESET);
UART_ERROR = true;
//HAL_UART_Abort_IT(huart); //todo: îòêëþ÷èë. Ïðè ïåðâîì çàïóñêå âëåòàë òóäà è îòêëþ÷àë ïðåðûâàíèÿ
} }