QuakeGod
2024-07-27 842bb64195f958b050867c50db66fc0aa413dafb
提交 | 用户 | age
483170 1
Q 2 /**
3   ******************************************************************************
4   * @file           : main.c
5   * @brief          : Main program body
6   ******************************************************************************
7   ** This notice applies to any and all portions of this file
8   * that are not between comment pairs USER CODE BEGIN and
9   * USER CODE END. Other portions of this file, whether 
10   * inserted by the user or by software development tools
11   * are owned by their respective copyright owners.
12   *
13   * COPYRIGHT(c) 2018 STMicroelectronics
14   *
15   * Redistribution and use in source and binary forms, with or without modification,
16   * are permitted provided that the following conditions are met:
17   *   1. Redistributions of source code must retain the above copyright notice,
18   *      this list of conditions and the following disclaimer.
19   *   2. Redistributions in binary form must reproduce the above copyright notice,
20   *      this list of conditions and the following disclaimer in the documentation
21   *      and/or other materials provided with the distribution.
22   *   3. Neither the name of STMicroelectronics nor the names of its contributors
23   *      may be used to endorse or promote products derived from this software
24   *      without specific prior written permission.
25   *
26   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
30   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
34   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36   *
37   ******************************************************************************
38   */
39 /* Includes ------------------------------------------------------------------*/
40 #include "main.h"
41 #include "stm32f0xx_hal.h"
42
43 /* USER CODE BEGIN Includes */
44 #include "Globaldef.h"
45 #include "debug.h"
46 #include "Functions.h"
47 #include "KMachine.h"
842bb6 48 #if (ENABLE_PLC) 
483170 49 #include "PLCfunctions.h"
842bb6 50 #endif
483170 51 //#include "KBus.h"
Q 52 #include "KLink.h"
53 #include "string.h"
54 #include "BSP.h"
55 #include "ModbusRTU.h"
842bb6 56 #if (ENABLE_NET)
483170 57 #include "w5500_port.h"
Q 58 #include "../src/Ethernet/socket.h"
59 #include "../src/Ethernet/loopback.h"
842bb6 60 #endif
Q 61
62 #if (ENABLE_FPX)
63 #include "FPx.h"
64 #endif
65
66 #if (ENABLE_RF)
483170 67 #include "KWireless.h"
842bb6 68 #endif
483170 69 //#include "user.h"
Q 70 //#include "../src/radio/inc/sx126x-board.h"
842bb6 71
483170 72
Q 73 /* USER CODE END Includes */
74
75 /* Private variables ---------------------------------------------------------*/
76
77 /* USER CODE BEGIN PV */
78 /* Private variables ---------------------------------------------------------*/
79
80 #define RX2BUFSIZE 64
81 #define TX2BUFSIZE 64
82
83 unsigned char Uart1RxBuf[128];
84 unsigned char Uart1TxBuf[260];
85
86 unsigned char Uart2RxBuf[RX2BUFSIZE];
87 unsigned char Uart2TxBuf[TX2BUFSIZE];
88
89 unsigned char SlowFlicker=0;
90 unsigned char FastFlicker=0;
91
92 unsigned int Uart1IdelTimer = 0;
842bb6 93 #if (ENABLE_PLC)
483170 94 stBinProg1 * pProgs = (stBinProg1 *)STORE_PRG_BASE;
842bb6 95 #endif
483170 96 uint32_t us1,us2,us3,us4,us5,us6;
842bb6 97
Q 98
99 stKBusDef KBus1;                            // 
483170 100
Q 101 /* USER CODE END PV */
102
103 /* Private function prototypes -----------------------------------------------*/
104
105
106 /* USER CODE BEGIN PFP */
107 /* Private function prototypes -----------------------------------------------*/
108
109 const unsigned char LEDSEGTAB[]={
110 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,    //0-F
111 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1,  //0.-F.
112 0x00,0x40,            //  ,-,_,~,o,n,N,<,>,J,r,
113 };
114
115 /* USER CODE END PFP */
116
117 /* USER CODE BEGIN 0 */
118
119 int HexToInt(char ch)
120 {
121     if (ch>='0' && ch <='9') return ch-'0';
122     if (ch>='A' && ch <='F') return ch-'A'+10;
123     if (ch>='a' && ch <='f') return ch-'a'+10;
124     return 0;
125 }
126
127 void HAL_SYSTICK_Callback(void)
128 {
129 static int Count=0;
130     CurTickuS += 100;    
131     nCurTick++;
842bb6 132     KBus1.nSlaveTick++;
483170 133     Count++;
842bb6 134     if (Count>=10000)     //  0.1mS, 10000次,  秒脉冲
483170 135     {
Q 136         Count=0; 
137         KMem.CurTimeSec++;
138         KMem.ThisRunTime++; KMem.TotalRunTime++;
139         if (KMRunStat.bLEDFlick) KMRunStat.bLEDFlick--;
140         if (KMRunStat.bLEDFlick >120) KMRunStat.bLEDFlick=120;
141     }
142
143     return;
144 }
145
842bb6 146 void PendSvCallBack()
Q 147 {
148 #if (ENABLE_FPX)
149 ///*    
150         if (bSPI1RecvDone)
151         {
152             bSPI1RecvDone=0;
153             FPxParsePkt(SPI1RecvBuf,nSPI1RecvLenInBuf);
154         }
155 //*/    
156 #endif        
157     if (Uart2Stat.bPacketRecved)
158     {
159         KBusParsePacket(&KBus1, (pKBPacket)Uart2RecvBuf1, Uart2RecvBuf1DataLen);        
160         Uart2RecvBuf1DataLen=0;
161         Uart2Stat.bPacketRecved=0;
162         Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));        
163         KMem.WDT[2]++;
164     }
165 }
166
167 /*
168 KBus通讯回调函数,当通讯状态改变或数据更新时被调用。
169 或者系统请求时。
170 */
171 void * KBusEvCallBackFunc(void*  pParam,  int nEvent, void *pBuf, int nLen1)
5dd1b7 172 {
Q 173     switch (nEvent){
174         
175         case KBusEvNone:
176             break;
177         case KBusEvCreate:
178             break;
179         case KBusEvConnected:
180             break;
181         case KBusEvDisConnected:
182             break;
183         case KBusEvClosed:
184             break;
185         case KBusEvStateChange:
186             break;
187         case KBusEvTimeSync:
188             break;
189         case KBusEvDataUpdate:
842bb6 190             KMem.WDT[10]++;
5dd1b7 191             if (KBus1.bMaster) {
Q 192                 KMem.WY[0]=KBusMem.WLX[0];            //KBus Master
193                 KBusMem.WLY[0]=KMem.WX[0];
194             } else if (KBus1.bSlave) {
195                 KMem.WY[0]=KBusMem.WLY[0];            //KBus Slave
196                 KBusMem.WLX[0]=KMem.WX[0];
197             }
198             break;
199         case KBusEvCmdResponse:
200             break;
201         
202         default:
203             break;
204     }
205     return 0;
206 }
842bb6 207
Q 208 extern     stDeviceInfo MyDeviceInfo;
5dd1b7 209
483170 210 /* USER CODE END 0 */
Q 211
212 /**
213   * @brief  The application entry point.
214   *
215   * @retval None
216   */
217 int main(void)
218 {
219   /* USER CODE BEGIN 1 */
220     KMRunStat.bLEDFlick = 1;
221     
222     InitUartstat(&Uart1Stat,Uart1RxBuf,sizeof(Uart1RxBuf),Uart1TxBuf,sizeof(Uart1TxBuf));
223     InitUartstat(&Uart2Stat,Uart2RxBuf,sizeof(Uart2RxBuf),Uart2TxBuf,sizeof(Uart2TxBuf));
224   /* USER CODE END 1 */
225
226   /* MCU Configuration----------------------------------------------------------*/
227
228   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
229   HAL_Init();
230
231   /* USER CODE BEGIN Init */
232
233         KMem.LastScanTime=0;
234         KMem.ScanTimeuS=0;
235         KMem.MinScanTimeuS=99999;
236         KMem.MaxScanTimeuS=0;
237
238 //        KMem.SDD[14]=(unsigned int)&KMStoreSysCfg;
239 //        KMem.SDD[15]=(unsigned int)&KMStoreSysCfg1;
240         KMem.SDD[12]=((uint32_t *)UID_BASE)[0];
241 //        KMem.SDD[13]=((uint32_t *)UID_BASE)[1];
242 //        KMem.SDD[14]=((uint32_t *)UID_BASE)[2];
243         KMem.SDD[13]=PendSvCount;
244         KMem.SDD[14]=RCC->CSR;
245 //        KMem.SDD[15]=*(uint32_t *)FLASHSIZE_BASE;
246 //        KMem.SDD[16]=(unsigned int)&KMSysCfg;
247     
248   /* USER CODE END Init */
249
250   /* Configure the system clock */
251   SystemClock_Config();
252
253   /* USER CODE BEGIN SysInit */
254     TickFreq=10000;        //Tick频率
255     InituS(TickFreq);    
256  // HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/TickFreq);    //重新定义SysTick的频率
257
258   /* USER CODE END SysInit */
259
260   /* Initialize all configured peripherals */
261   MX_GPIO_Init();
262   MX_DMA_Init();
263     
264     KMachineInit();
265     ReadSysCfgFromFlash(&storedKMSysCfg);
266     
267     KMRunStat.bLEDFlick = 1;
842bb6 268
Q 269     int bKBusMaster,bKBusSlave,bKBusRepeater;;
270     int nChilds;
271     int nKBusStationID;
483170 272     KMem.CurJumperSW=ReadJumperSW();
Q 273     KMem.EffJumperSW=KMem.CurJumperSW;
274     
842bb6 275 //    Uart2Baud = AlterUart2Baud;    nChilds=KMem.EffJumperSW&0x0f;
483170 276 //    Uart2Baud = AlterUart2Baud;
Q 277     
842bb6 278     nKBusStationID = KMem.EffJumperSW&0x0f;
Q 279     nChilds=nKBusStationID;
280     
281
483170 282 #if (BOARD_TYPE == 14)
Q 283     KMem.EffJumperSW|=0x10;
284     nStationID=KMem.EffJumperSW&0x0f;
285   if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
286     else{bKBusMaster=0;bKBusSlave=1;}
842bb6 287     FPxSetCallBackFunc(&FPxCallBackFunc);
Q 288     FPx_Init(nChilds);
483170 289
842bb6 290     int IOByteCount = nChilds;
Q 291     FPx_SetIOCount(IOByteCount,IOByteCount);
292     
483170 293 #elif (BOARD_TYPE == 15 || BOARD_TYPE == 16)
Q 294     nStationID=1 ;//KMem.EffJumperSW&0x0f;
295 //    if (KMem.EffJumperSW == 0x1f) {bKBusRepeater=1;bKBusMaster=1;bKBusSlave=0;}
296 //  else if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
297 //    else
298         {bKBusMaster=0;bKBusSlave=1;}    
299 #else
842bb6 300     nKBusStationID=nChilds;
483170 301     if (KMem.EffJumperSW == 0x1f) {bKBusRepeater=1;bKBusMaster=1;bKBusSlave=0;}
842bb6 302   else if ((KMem.EffJumperSW&0x10)!=0) {
Q 303         bKBusMaster=1;bKBusSlave=0;
304     }
305     else{
306         bKBusMaster=0;bKBusSlave=1;
307     }
5dd1b7 308     
842bb6 309 #endif
Q 310     UNUSED(bKBusRepeater);
311
312     if (bKBusMaster) {
313         KBusInitMaster(&KBus1, (KBusSendPktFuncDef)PutStr2, nChilds);
314     
315     } else if (bKBusSlave) {
316         KBusInitSlave(&KBus1, (KBusSendPktFuncDef)PutStr2, nKBusStationID,&MyDeviceInfo);
317     }
318     
319     KBusSetEvCallBackFunc(&KBus1, &KBusEvCallBackFunc);    
320     
321     KMem.WDT[0]= nKBusStationID;
322     KMem.WDT[1] = KBus1.nStationId;
5dd1b7 323     
483170 324     //if (KMem.EffJumperSW == 0x00)
Q 325         Uart1Baud = DefaultUart1Baud;
326   MX_USART1_UART_Init();
327   MX_USART2_UART_Init();
328
329     MX_SPI1_Init();
330     LL_SPI_EnableIT_RXNE(SPI1);
331
332 #if (BOARD_TYPE == 14)
333 //    MX_SPI2_Init();
334 //  MX_ADC_Init();
335 #else
336     MX_SPI2_Init();
337   MX_ADC_Init();
338 #endif
339
340     MX_IWDG_Init();
341
342     MX_TIM6_Init();
343     LL_TIM_EnableCounter(TIM6);
344     
345   /* USER CODE BEGIN 2 */
346     LL_USART_EnableIT_RXNE(USART1);
347     LL_USART_EnableIT_IDLE(USART1);
348     LL_USART_EnableIT_TC(USART1);
349
350 //    LL_USART_EnableIT_RXNE(USART2);
351     Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));    
352     LL_USART_EnableIT_IDLE(USART2);
353     LL_USART_EnableIT_TC(USART2);
354 #if (BOARD_TYPE == 13)
355     int res;
356     res = w5500_init();
357     KMem.SDD[28]=res;
358     
359 //    res=socket(0,Sn_MR_TCP,5000,0);
360     KMem.SDD[29]=res;    
361     
362 //    res = listen(0);
363 #endif    
364 //    if (bKBusSlave)
365     {
366     //    LL_USART_EnableAutoBaudRate(USART1);
367     //    LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);        
368     //    LL_USART_EnableAutoBaudRate(USART2);
369     //    LL_USART_SetAutoBaudRateMode(USART2, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);        
370     }
371     //LL_USART_EnableIT_TXE(USART1);
372   /* USER CODE END 2 */
373
374     
375   /* Infinite loop */
376   /* USER CODE BEGIN WHILE */
377
378     HAL_Delay(10);                
379     SetRunLed(1);                //Turn On Run Led
380     SetErrLed(0);                //Turn Off Err Led
381
382 #if (BOARD_TYPE == 14)
383 //    PutOutput (0);                    //Clear all Output
384 //    Enable595(1);                        //Enable 595 Output 
385 #else
386     PutOutput (0);                    //Clear all Output
387     Enable595(1);                        //Enable 595 Output 
388 #endif
389
390         if (GetBoardType() == 7 || GetBoardType() ==8 
391             || GetBoardType() == 9 || GetBoardType() ==10 ||GetBoardType() ==13 ||GetBoardType() ==15 || BOARD_TYPE == 16) 
392         {
393             displayInput(0xffff);        //
394             EnableDisIn(1);                //Input Diaplay Enable 595 
395         }
396     SetOutStat(0);            //OK Good, signal
397     ShowInitInfo();
398     KMem.LastScanTime = GetuS();
399
400     KMRunStat.WorkMode=0;
401     KMRunStat.WorkMode2=0;
402         
403     KMRunStat.WorkMode = storedKMSysCfg.theKMSysCfg.workmode;
842bb6 404 #if (ENABLE_PLC)        
483170 405     if (KMRunStat.WorkMode == 1){
Q 406         InitPLC();
407         KMRunStat.WorkMode2 = KMem.CurJumperSW&0x20 ;
408         if (KMRunStat.WorkMode2) {
409             StartPLC(); }
410     }
842bb6 411 #endif    
483170 412     KMem.WX[7]=0x5a;
Q 413 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
414     KWireLessInit(KMem.EffJumperSW&0x20,KMem.EffJumperSW&0x0f);
415     KWireLessStart();
416 #endif
842bb6 417     KMem.WY[0]=0;
483170 418   while (1)
Q 419   {
420         //int MyKeyStat1,MyKeyStat2;
421         //MyKeyStat1=GetInput();
422
423         //*((unsigned int *)&(PLCMem.SDT[10]))=nRunCount;
424     //    KMem.nRunCount=nRunCount;
425         SlowFlicker=0;
426         FastFlicker=1;        
427         us1=GetuS();
428         int haltick=HAL_GetTick();
429         
430         int thisJumperSW=ReadJumperSW();
842bb6 431 #if (ENABLE_PLC)        
483170 432         if (KMRunStat.WorkMode&1){
Q 433             if (thisJumperSW&0x20 && !(KMem.CurJumperSW&0x20))  // Run 开关 正 跳变。
434             {StartPLC();}
435             if (!(thisJumperSW&0x20) && (KMem.CurJumperSW&0x20))  // Run 开关 负 跳变。
436             {StopPLC();}
437         }
842bb6 438 #endif        
483170 439         KMem.CurJumperSW=thisJumperSW;
Q 440         KMem.haltick=haltick;
441 //        KMem.TotalRunTime=TotalRunTime;
442 //        KMem.ThisRunTime=ThisRunTime;        
443         
444 //        *((unsigned int *)&(PLCMem.SDT[2]))=nChilds;
445 //        KMem.SDD[13]=PendSvCount;
446 //        KMem.SDD[14]=RCC->CSR;        
447         
448         int a;
449         a        = LL_GPIO_ReadInputPort(GPIOA);
450         KMem.WDT[120]=a;
451         a        = LL_GPIO_ReadInputPort(GPIOB);
452         KMem.WDT[121]=a;
453         a        = LL_GPIO_ReadInputPort(GPIOC);
454         KMem.WDT[122]=a;
455         a        = LL_GPIO_ReadInputPort(GPIOD);
456         KMem.WDT[123]=a;
457         
458 #if (BOARD_TYPE == 14)
459 //        KMem.WX[0]= GetInput();        
460         FP0_Proc();
461 #else
462         KMem.WX[0]= GetInput();        
463 #endif
464         if (GetBoardType() == 7 || GetBoardType() ==8 
465             || GetBoardType() == 9 || GetBoardType() ==10 || GetBoardType() ==15 || GetBoardType() ==16) 
466         {
467             displayInput(KMem.WX[0]);
468         }
469         us2=GetuS();
470         if (PowerDownEvent) {        KMem.WX[0]=0;}
471 ///*
472         if ((KMem.nRunCount &0x1f) == 0x02)
473         {
474             ADCProcess();
475             if (PowerDownEvent)
476             {
477                 KMem.WX[0]=0;
478                 if (!OldPowerDownEvent)
479                 {
480                     OldPowerDownEvent = PowerDownEvent;
481                     OldPowerDownEventTime = nCurTick;
482                     PowerDownProcess();
483                 }
484             }else
485             {
486                 if (OldPowerDownEvent)
487                 {
488                     OldPowerDownEvent=PowerDownEvent;
489                     PowerRecoverProcess();
490                     
491                 }
492             }
493         }
494 //*/
495
496 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
497         Radio.IrqProcess( ); // Process Radio IRQ
498         KWL_Process(1);
499         
500 #endif
501
502 //        pProgs = (stBinProg1 *) STORE_PRG_BASE;
842bb6 503 #if (ENABLE_PLC)
483170 504         if (    KMRunStat.WorkMode==1 ) //&& bKBusMaster)
Q 505         {
506             if (KMRunStat.nBinProgBank == 0){
507                 pProgs=(stBinProg1 *)STORE_PRG_BASE;
508             }else {
509                 pProgs=(stBinProg1 *)ALT_PRG_BASE;
510             }
511             nSizeProg1=KMRunStat.nBinProgSize;
512         //    pProgs=(stBinProg1 *)prog1;
513             
514             ProcessPLCBinProg(pProgs, nSizeProg1);
515         }
842bb6 516 #endif
Q 517         
483170 518         KMem.ScanTimeuS=us2-KMem.LastScanTime;
Q 519         KMem.LastScanTime = us2;
520         if (KMem.ScanTimeuS < KMem.MinScanTimeuS) {KMem.MinScanTimeuS = KMem.ScanTimeuS;}
521         if (KMem.ScanTimeuS > KMem.MaxScanTimeuS) {KMem.MaxScanTimeuS = KMem.ScanTimeuS;}
522
523         //        if (bKBusRepeater)        {    KBusRepeaterFunc();    }
524
525         us3=GetuS();
526
527         if (bKBusMaster)        
528         {
529 #if (BOARD_TYPE == 14)
530             for (int i=0;i<nOutputBytes;i++)
531             {BufferOut[i+1]=KMem.WYB[i];}
532 #endif
5dd1b7 533                 KBusMem.WLY[0]=KMem.WX[0];
842bb6 534                 KBusLoopProcess(&KBus1);
5dd1b7 535                 KMem.WY[0]=KBusMem.WLX[0];            //KBus Slave
483170 536
Q 537         }
538             if (haltick&0x00002000) SlowFlicker=1;
539             else SlowFlicker=0;
540             if (haltick&0x00000800) FastFlicker=1;
541             else FastFlicker=0;    
542
543         if (bKBusSlave)        
544         {
545 //            BufferOut[0]=KMem.WX[0];
546 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
547 //            KBusSlaveFunc(2);    
548         //    if (! KMem.RunStat) {BufferIn[0]=0;}
549         //    KMem.WY[0]=BufferIn[0];
550 #else
842bb6 551         //    KBusSlaveFunc(&KBus1);    
Q 552             KBusLoopProcess(&KBus1);
5dd1b7 553 //            if (! KMem.RunStat) {BufferIn[0]=0;}
Q 554 //            KMem.WLY[0]=BufferIn[0];
842bb6 555             KMem.WDT[2] = KBus1.KBusChnStats[0].ClientRecvPkts;
Q 556             
557             KMem.WDT[3] = KBus1.KBusChnStats[0].ClientSendPkts;
558             
559             
560             KMem.WDT[8] = KBus1.RunStat;
561             KMem.WDT[9] = KBus1.ErrStat;
562             
563             KMem.WDD[20] = KBus1.RecvTimeTick;
564             
483170 565 #endif
842bb6 566             if (KBus1.nSlaveTick&0x00002000) SlowFlicker=1;
483170 567             else SlowFlicker=0;
842bb6 568             if (KBus1.nSlaveTick&0x00000800) FastFlicker=1;
483170 569             else FastFlicker=0;            
842bb6 570         //    KBusMem.WLX[0]=KMem.WX[0];
Q 571         //    KMem.WY[0]=KBusMem.WLY[0];
483170 572         }
Q 573         
574         if (KMRunStat.bLEDFlick)
575         {
576             SetRunLed(FastFlicker);
577             SetErrLed(FastFlicker);
578             SetErr2Led(FastFlicker);
579             SetOutStat(!FastFlicker);
580             //KMRunStat.bLEDFlick-- ;
581         }
582         else
583         {
842bb6 584                         KMem.ErrStat = KBus1.ErrStat;    // + KwRunStat.ErrStat;
Q 585 #if (ENABLE_PLC)            
483170 586             if (KMRunStat.WorkMode==1 ) {
Q 587                 if (PLCMem.bPLCRunning){SetRunLed(SlowFlicker);}
588                     else {SetRunLed(0);}
589             }
842bb6 590             else 
Q 591 #endif                
592             {
483170 593                     if (!KMem.RunStat) SetRunLed(SlowFlicker);
Q 594                     else SetRunLed(FastFlicker);
595             }
596             if (!KMem.ErrStat) 
597             {
598                 SetErrLed(0);
599                 SetErr2Led(0);
600                 SetOutStat(1);
601             }
602             else 
603             {
604                 SetErrLed(FastFlicker);
605                 SetErr2Led(FastFlicker);
606                 SetOutStat(0);
607             }
608         }
609         
610 //        SetRunLed(RunStat);
611 //        SetErrLed(ErrStat);
612         
613         us4=GetuS();
614 //        EffJumperSW = GetInput(20)&0xff;
615
616 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)        
617         
618         if ((KMem.EffJumperSW&0x10)==0x10) {
619             KMem.WFY[1]=KMem.WLY[0];
620             KMem.WLX[0]=KMem.WFX[1];            
621         }else
622         {
623             KMem.WFY[1]=KMem.WX[0];
624             KMem.WY[0]=KMem.WFX[1];
625         }
626 //    KMem.WY[0]=KMem.WLY[0];
627 #else
5dd1b7 628 //        KMem.WLX[0]=KMem.WX[0];
Q 629 //        KMem.WY[0]=KMem.WLY[0];
483170 630 #endif
Q 631
632         us5=GetuS();
842bb6 633         us5=GetTick();
483170 634         
Q 635 #if (BOARD_TYPE == 14)
636 //        PutOutput (KMem.WY[0]);
637 #else
638         PutOutput (KMem.WY[0]);
639 #endif
640         //PutOutput (KMem.nRunCount>>8);
641         //PutOutput(0x0f70);
642
643 //        if (bKBusMaster) ShowInfo();
644 //        if (bKBusSlave) ShowInfo();
645         us6=GetuS();
646         add1(10,10);
647         for (int i=0;i<64;i++)
648         {
649 //            ProcessTimer(i);
650         }
651         KMem.nRunCount++;
652 //        int nSize=sizeof(stKBusChnStat);
653 //        memcpy(&KMem.SDT[64],&KBusChnStats[1],nSize);
654 //        memcpy(&KMem.SDT[64+nSize/2],&KBusChnStats[2],nSize);
655 //        for (int i=0;i<128;i++)    {        SDT[i]=i;    }
656 //        SDT[48]=55;
657         if (Uart1RecvBuf1DataLen >0 && Uart1Stat.bPacketRecved)
658         {
659             int res1 = -1;
660             res1 = ModBusSlaveParsePkg(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
661             if (res1 !=0)
662             {
663                 KLParsePacket(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
664             }
665             Uart1RecvBuf1DataLen=0;
666             Uart1Stat.bPacketRecved=0;
667             Uart1IdelTimer = 0;
668         }else {
eaf5d5 669             if (Uart1IdelTimer>600000) { // 超过60秒没有数据传输,重新进入自适应波特率状态
483170 670                 LL_USART_EnableAutoBaudRate(USART1);
Q 671                 LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);
672             }else {
673                     Uart1IdelTimer++;
674             }
675         }
676  if (bKBusSlave)    HAL_Delay(0);
677 /*
678         if (!IsEmpty(&Uart1Stat.QRx))
679         {
680             unsigned char k=PopOne(&Uart1Stat.QRx);
681             if (k=='L')
682             {
683                 clearscreen();
684             }
685         }
686 */
687
688 #if (BOARD_TYPE == 14)
689 const unsigned int pins[6]= {        LL_GPIO_PIN_10,LL_GPIO_PIN_11,LL_GPIO_PIN_12,LL_GPIO_PIN_13,LL_GPIO_PIN_14,LL_GPIO_PIN_15};
690         //process 6 output
691         {
692                 // mapping bits.
693             for (int i=0;i<6;i++)
694             {
695                 USHORT bitaddr = storedKMSysCfg.theKMSysCfg.OutMappings[i];
696                 UCHAR type =  (bitaddr&0xf000) >>12;
697                 USHORT byteaddr = (bitaddr&0x0ff0) >>4;
698                 UCHAR bitpos = bitaddr &0x0f;
699                 UCHAR bitvalue = 0 ;
700                 if (byteaddr>0) {
701                     if (type == 0) bitvalue = KMem.WXB[byteaddr-1] & ( 1 << bitpos );
702                     else if (type == 1 ) bitvalue = KMem.WYB[byteaddr-1] & ( 1 << bitpos );
703                 }
704                 if (bitvalue){ LL_GPIO_SetOutputPin(GPIOB,pins[i]);}
705                 else {LL_GPIO_ResetOutputPin(GPIOB,pins[i]);}
706             }
707         }
708 #endif
709
710 /*        
711         {
712         unsigned char pos,seg;
713         unsigned short val;
714         pos=((KMem.nRunCount)&0x3);
715         //val=(KMem.nRunCount)&0xfff;
716         val=KMem.ErrStat;
717         char buf5[20];
718         sprintf(buf5,"%4d",val);
719         val=buf5[3-pos];
720         if (val <'0' || val >'9') {seg=0;}
721         else {seg=LEDSEGTAB[val-'0'];}
722         
723         pos=1<<pos;
724         //pos=1;
725         //seg=2;
726         seg=~seg;
727         //    PutOutputSPI1(pos|(seg<<8));
728     }
729 */
730
731 #if (BOARD_TYPE == 13)    
732      w5500_network_info_show();
733 //     loopback_tcps(0,str1,5000);
734 #endif
735
736      LL_IWDG_ReloadCounter(IWDG);
737         
738   }    //while (1) ;
739   /* USER CODE END WHILE */
740
741   /* USER CODE BEGIN 3 */
742
743   /* USER CODE END 3 */
744
745 }
746
747
748 /* USER CODE BEGIN 4 */
749
750 /* USER CODE END 4 */
751
752 /**
753   * @brief  This function is executed in case of error occurrence.
754   * @param  file: The file name as string.
755   * @param  line: The line in file as a number.
756   * @retval None
757   */
758 void _Error_Handler(char *file, int line)
759 {
760   /* USER CODE BEGIN Error_Handler_Debug */
761   /* User can add his own implementation to report the HAL error return state */
762   while(1)
763   {
764   }
765   /* USER CODE END Error_Handler_Debug */
766 }
767
768 #ifdef  USE_FULL_ASSERT
769 /**
770   * @brief  Reports the name of the source file and the source line number
771   *         where the assert_param error has occurred.
772   * @param  file: pointer to the source file name
773   * @param  line: assert_param error line source number
774   * @retval None
775   */
776 void assert_failed(uint8_t* file, uint32_t line)
777
778   /* USER CODE BEGIN 6 */
779   /* User can add his own implementation to report the file name and line number,
780      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
781   /* USER CODE END 6 */
782 }
783 #endif /* USE_FULL_ASSERT */
784
785 /**
786   * @}
787   */
788
789 /**
790   * @}
791   */
792
793 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/