diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index c8c8690..99c486b 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - + diff --git a/Core/Inc/OLED_Fonts.h b/Core/Inc/OLED_Fonts.h index f1567d7..ff4a7a7 100644 --- a/Core/Inc/OLED_Fonts.h +++ b/Core/Inc/OLED_Fonts.h @@ -43,4 +43,5 @@ void FontSet(const uint8_t* font); void OLED_DrawStr(char *str, uint8_t x, uint8_t y, uint8_t mode); + #endif /* OLEDFONTS_H_ */ diff --git a/Core/Inc/flash.h b/Core/Inc/flash.h index 029c046..48466d6 100644 --- a/Core/Inc/flash.h +++ b/Core/Inc/flash.h @@ -20,7 +20,10 @@ void MX_FLASH_Init(void); +void wrPar(void); void rdPar(void); +void wrCor(void); +void rdCor(void); #endif /* INC_FLASH_H_ */ diff --git a/Core/Inc/keys.h b/Core/Inc/keys.h index f4927ef..3793d97 100644 --- a/Core/Inc/keys.h +++ b/Core/Inc/keys.h @@ -4,3 +4,4 @@ void keysHandler(void); +void keysHandlerCallibration(void); diff --git a/Core/Inc/main.h b/Core/Inc/main.h index f2a3705..50d88d6 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -112,6 +112,7 @@ void Error_Handler(void); /* USER CODE END Private defines */ +char* FloatToASCII(float Val, int32_t RoundTo); //пока объявлю её тут #ifdef __cplusplus } diff --git a/Core/Inc/modbus.h b/Core/Inc/modbus.h index 768de32..835eb4c 100644 --- a/Core/Inc/modbus.h +++ b/Core/Inc/modbus.h @@ -55,5 +55,8 @@ uint16_t Crc16(uint16_t len); uint16_t Crc16_TX(uint16_t len); void UART_Transmit(uint8_t *pData); void StartTransfer(void); +void Receive_Complete(void); +void Transfer_Complete(void); + #endif /* _MODBUS_H_ */ diff --git a/Core/Inc/my.h b/Core/Inc/my.h index f5d6fcb..a11513c 100644 --- a/Core/Inc/my.h +++ b/Core/Inc/my.h @@ -23,56 +23,22 @@ #include "ssd1306.h" #include -#define LOGO_TIME_MS (500u) +#define LOGO_TIME_MS (1000u) #define lo(x) ((uint8_t) ((x) & 0xFF)) #define hi(x) ((uint8_t) (((x) >> 8) & 0xFF)) #define ABS(x) (((x) < 0)?-(x) :(x)) + + typedef enum { CURSOR = Black, TEXT = White }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); typedef enum { CHARGE = 0} typeIIN; @@ -130,5 +96,7 @@ 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 kbhit(void); +void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode); // определяем цифра или чар и в соответствии рисуем #endif /* INC_MY_H_ */ diff --git a/Core/Inc/screen.h b/Core/Inc/screen.h index accaba3..c694401 100644 --- a/Core/Inc/screen.h +++ b/Core/Inc/screen.h @@ -5,5 +5,5 @@ void screenDraw(void); - +void screenDrawCallibration(void); diff --git a/Core/Inc/struct.h b/Core/Inc/struct.h index 44a0716..54e9523 100644 --- a/Core/Inc/struct.h +++ b/Core/Inc/struct.h @@ -73,20 +73,27 @@ typedef struct uint16_t IFV; // 8,9 5002 //фильтр верхних частот uint16_t IFN; // 10,11 5003 //нижних uint16_t IKU; // 12,13 5004 //Коэф усиления - uint16_t IK0; // 14,15 5005 // знакоместо 0 - uint16_t IK1; // 16,17 5006 // знакоместо 1 - uint16_t IK2; // 18,19 5007 // знакоместо 2 - uint16_t IK3; // 20,21 // знакоместо 3 - uint16_t IK4; // 22,23 // знакоместо 4 - uint16_t IK5; // 22,23 // знакоместо 4 + uint16_t IKE; // 14,15 5005 // Legacy a141 + uint16_t IKD; // 16,17 5006 // Legacy a141 + uint16_t IKS; // 18,19 5007 // Legacy a141 + uint16_t IPZ; // 20,21 5008 // признак плав земли + uint16_t OPZ; // 22,23 5009 // Legacy a141 + 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 //дублирование (коэфициэнт преобразования) - uint16_t UNIT; //Отображаемые величины на экране + float ACCEL; // 32,33,34,35 7503 //Legacy a141 -} UserData_TypeDef; // ********LENGTH = 39 bytes*********** +} UserData_TypeDef; // ********LENGTH = ** bytes*********** typedef struct { diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h index ea22e82..effac01 100644 --- a/Core/Inc/usart.h +++ b/Core/Inc/usart.h @@ -38,6 +38,7 @@ extern UART_HandleTypeDef huart1; /* USER CODE END Private defines */ void MX_USART1_UART_Init(void); +void MX_USART1_UART_DeInit(void); /* USER CODE BEGIN Prototypes */ diff --git a/Core/Src/flash.c b/Core/Src/flash.c index 85a166b..da8524c 100644 --- a/Core/Src/flash.c +++ b/Core/Src/flash.c @@ -106,7 +106,7 @@ void wrCor(void) /// void rdPar(void) { -uint8_t i; +//uint8_t i; uint32_t lenpar; volatile bool rewrite = false; @@ -152,7 +152,7 @@ volatile bool rewrite = false; void rdCor(void) { -uint8_t i; +//uint8_t i; uint32_t lenpar; volatile bool rewrite = false; diff --git a/Core/Src/main.c b/Core/Src/main.c index 2790f9c..793ddc5 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -37,11 +37,12 @@ #include "struct.h" //#include "arm_math.h" +#define ALLWAISRELOAD 0 /// тестовый - всегда перегружен char pString[16]; -char* FloatToASCII(float Val, int32_t RoundTo); //пока объявлю её тут + void SystemClock_Config(void); @@ -55,10 +56,12 @@ extern uint32_t current_buff; // volatile int needRefresh; /// extern uint16_t ADC_Buff[ADC_BUFFSIZE]; //буфер ацп uint16_t meashBuff[DMA_BUFFSIZE]; + uint8_t buff[16] = {0,}; // буфер для приема +extern __IO bool needSave; uint32_t dotPositon; // позиция точки -int reload_flag=0; //флаг перегрузки +int reload_flag=1; //флаг перегрузки int ignoreOff_flag=1; //игнорирование кнопки питания uint16_t dvd=0xfff; //Дефолтное значение для отправки на цап ОТЛАДКА float kNormToDAC = 0; // К для нормирования согласно чувствительности датчика @@ -75,49 +78,13 @@ void check_reload(void); // todo UserData_TypeDef currentData; + + 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(); SystemClock_Config(); MX_FLASH_Init(); @@ -128,6 +95,9 @@ int main(void) MX_SPI1_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(); @@ -141,17 +111,27 @@ int main(void) 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. sh_applysetting(¤tData); }// применяем настройки из стуктуры с ЦАП на всю + + while (workMode==NORMAL){ + HAL_UART_Receive_IT(&huart1, (uint8_t*)buff, 1); //начало цепочки прерываний check_reload(); keysHandler(); + if(needSave) + { + needSave = false; + + //wrPar(); + } + if(RefreshScreen){ screenDraw(); ssd1306_UpdateScreen(); @@ -195,7 +175,7 @@ int main(void) void check_reload(void){ static __IO uint32_t reloadOffTime=0; - uint32_t isReloaded=0; + uint32_t isReloaded=ALLWAISRELOAD; /*__IO uint32_t tick=HAL_GetTick(); //для замеров времени */ memcpy((void *) &meashBuff[0], (void *) &ADC_Buff[current_buff], DMA_BUFFSIZE<<1); for(uint16_t i=0; i=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); } diff --git a/Core/Src/screen.c b/Core/Src/screen.c index b112c9b..f37d9b5 100644 --- a/Core/Src/screen.c +++ b/Core/Src/screen.c @@ -10,7 +10,7 @@ extern UserData_TypeDef currentData; extern float kNormToDAC; 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"}; //char* outUnit; // единицы выхода -char* kuToDispl; -char* fvchTODisp; -char* fnchTODisp; -char* plavZemlToDisp; +const char* kuToDispl; +const char* fvchTODisp; +const char* fnchTODisp; +const char* plavZemlToDisp; int OffsetKuDisplay =0; @@ -282,10 +282,9 @@ FontSet(Segoe_UI_Rus_10); // in real code you would check for errors in malloc here strcpy(result, STRINGS_OUTUNITS[currentData.IKU+OffsetKuDisplay]); strcat(result, STRINGS_UNITS[currentData.UNIT]); - if(menuPointer==OUT)OLED_DrawStr((char *)result, 40, 24, CURSOR); else OLED_DrawStr((char *)result, 40, 24, TEXT);//todo: STRINGS_OUTUNITS и units получается мутно - free(result); + free(result); /// освободил память OLED_DrawStr(STRING_FVCH, 2, 36, TEXT); 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); 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); 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); else DrawSome((correctedKu[currentData.IKU]/1000), 85, 36, TEXT); diff --git a/Core/Src/ssd1306.c b/Core/Src/ssd1306.c index 22ad79e..bcf2e47 100644 --- a/Core/Src/ssd1306.c +++ b/Core/Src/ssd1306.c @@ -4,12 +4,14 @@ #include // For memcpy #include "my.h" // For memcpy #include "OLED_Fonts.h" +#include "stdio.h" extern __IO bool por; extern __IO bool clbr; const char SERIAL[] ={'0','2','3'}; 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; @@ -136,7 +138,7 @@ void ssd1306_Reset(void) { // Send a byte to the command register 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_DC_Port, SSD1306_DC_Pin, GPIO_PIN_RESET); // command //HAL_SPI_TransmitReceive(&hspi2, &byte, &rx, 1, 100); @@ -147,7 +149,7 @@ void ssd1306_WriteCommand(uint8_t byte) { // Send data 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_DC_Port, SSD1306_DC_Pin, GPIO_PIN_SET); // data @@ -205,40 +207,21 @@ char str[10]; 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_WriteString((char *) SERIAL, Font_6x8, White); + //ssd1306_SetCursor(76, 52); //пожалуй отрисую тут скорость + + + char speed[20]; + sprintf(speed, "%i", BAUDRATE[currentData.BAUD]); + OLED_DrawStr(speed, 54, 52, White); + + if(currentData.INFB ==0) OLED_DrawStr("CR1, USART_CR1_RXNEIE | USART_CR1_PEIE); // разрешение прерываний по RENotEMPTY и ошибки четности +*/ + /* USER CODE BEGIN 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); /* 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); /* 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) { - if((__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE)) && (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE))) - { - //Receive_Complete(); - HAL_UART_RxCpltCallback(&huart1); - } - else - { - HAL_UART_IRQHandler(&huart1); - } + 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); - 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); - 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); - 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); + + if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_NE)) //ошибка шума + __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_NE); + + + } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { - if(huart->Instance == USART1) // Sensors - { - // HAL_GPIO_WritePin(SENS_RE_GPIO_Port, SENS_RE_Pin, GPIO_PIN_RESET); - //TX_OK = true; - __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC); - } - else - { -// Transfer_Complete(); - } + + __IO uint16_t a; + + a = delayREDE; + while(a) + { + a--; a++; a--; a++; a--; + } + + 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) { - if(huart->Instance == USART1) // Sensors - { -// RX_OK = true; - } - else - { -// Receive_Complete(); - } + + Receive_Complete(); + HAL_UART_Receive_IT(&huart1, (uint8_t*)buff, 1); + } void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { - if(huart->Instance == USART1) // Sensors - { -// RX_OK = TX_OK = false; -// HAL_GPIO_WritePin(SENS_RE_GPIO_Port, SENS_RE_Pin, GPIO_PIN_RESET); - } -// UART_ERROR = true; -// HAL_UART_Abort_IT(huart); + RX_OK = TX_OK = false; + HAL_GPIO_WritePin(USART1_RE_GPIO_Port, USART1_RE_Pin, GPIO_PIN_RESET); + + UART_ERROR = true; + //HAL_UART_Abort_IT(huart); //todo: отключил. При первом запуске влетал туда и отключал прерывания }