QuakeGod
2024-02-25 95322c84888cbe2e92024d4d65698f59b016cb52
提交 | 用户 | age
8b51c7 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"
48 #include "PLCfunctions.h"
49 //#include "KBus.h"
50 #include "KLink.h"
51 #include "string.h"
52 #include "BSP.h"
53 #include "ModbusRTU.h"
54 #if (BOARD_TYPE == 13)
55 #include "w5500_port.h"
56 #include "../src/Ethernet/socket.h"
57 #include "../src/Ethernet/loopback.h"
58 #elif (BOARD_TYPE == 14)
59 #include "FP0.h"
60 #elif (BOARD_TYPE == 15 || BOARD_TYPE == 16)
61 #include "KWireless.h"
62 //#include "user.h"
63 //#include "../src/radio/inc/sx126x-board.h"
64 #endif
65 #include "SLP.h"
66
67 /* USER CODE END Includes */
68
69 /* Private variables ---------------------------------------------------------*/
70
71 /* USER CODE BEGIN PV */
72 /* Private variables ---------------------------------------------------------*/
73
74 #define RX2BUFSIZE 64
75 #define TX2BUFSIZE 64
76
77
78 unsigned char Uart1RxBuf[128];
79 unsigned char Uart1TxBuf[260];
80
81 unsigned char Uart2RxBuf[RX2BUFSIZE];
82 unsigned char Uart2TxBuf[TX2BUFSIZE];
83
84 unsigned char SlowFlicker=0;
85 unsigned char FastFlicker=0;
86
87 unsigned int Uart1IdelTimer = 0;
88 stBinProg1 * pProgs = (stBinProg1 *)STORE_PRG_BASE;
89
90 uint32_t us1,us2,us3,us4,us5,us6;
91
92 /* USER CODE END PV */
93
94 /* Private function prototypes -----------------------------------------------*/
95
96
97 /* USER CODE BEGIN PFP */
98 /* Private function prototypes -----------------------------------------------*/
99
100 const unsigned char LEDSEGTAB[]={
101 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,    //0-F
102 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1,  //0.-F.
103 0x00,0x40,            //  ,-,_,~,o,n,N,<,>,J,r,
104 };
105
106 /* USER CODE END PFP */
107
108 /* USER CODE BEGIN 0 */
109
110 int HexToInt(char ch)
111 {
112     if (ch>='0' && ch <='9') return ch-'0';
113     if (ch>='A' && ch <='F') return ch-'A'+10;
114     if (ch>='a' && ch <='f') return ch-'a'+10;
115     return 0;
116 }
117
118 void HAL_SYSTICK_Callback(void)
119 {
120 static int Count=0;
121     CurTickuS += 100;    
122     nCurTick++;
123     nSlaveTick++;
124     Count++;
125     if (Count>=10000) 
126     {
127         Count=0; 
128         KMem.CurTimeSec++;
129         KMem.ThisRunTime++; KMem.TotalRunTime++;
130         if (KMRunStat.bLEDFlick) KMRunStat.bLEDFlick--;
131         if (KMRunStat.bLEDFlick >120) KMRunStat.bLEDFlick=120;
132     }
133
134     return;
135 }
136
137 /* USER CODE END 0 */
138
139 /**
140   * @brief  The application entry point.
141   *
142   * @retval None
143   */
144 int main(void)
145 {
146   /* USER CODE BEGIN 1 */
147     KMRunStat.bLEDFlick = 1;
148     
149     InitUartstat(&Uart1Stat,Uart1RxBuf,sizeof(Uart1RxBuf),Uart1TxBuf,sizeof(Uart1TxBuf));
150     InitUartstat(&Uart2Stat,Uart2RxBuf,sizeof(Uart2RxBuf),Uart2TxBuf,sizeof(Uart2TxBuf));
151   /* USER CODE END 1 */
152
153   /* MCU Configuration----------------------------------------------------------*/
154
155   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
156   HAL_Init();
157
158   /* USER CODE BEGIN Init */
159
160     for (int i=0;i<9;i++)
161     {
162 //        memset(KBusChnStats[i],0,0);        
163         KBusChnStats[i].SendPackets=0;
164         KBusChnStats[i].RecvPackets=0;
165         KBusChnStats[i].LostPackets=0;
166         KBusChnStats[i].CtnLstPkts=0;
167         KBusChnStats[i].MaxCtnLstPkts=0;
168         KBusChnStats[i].NotPkgErr=0;
169         KBusChnStats[i].PkgLenErr=0;
170         KBusChnStats[i].TimeOutErr=0;
171         KBusChnStats[i].BCCErr=0;
172         KBusChnStats[i].Delay=0;
173         KBusChnStats[i].MaxDelay=0;
174     }
175     
176         KMem.LastScanTime=0;
177         KMem.ScanTimeuS=0;
178         KMem.MinScanTimeuS=99999;
179         KMem.MaxScanTimeuS=0;
180
181 //        KMem.SDD[14]=(unsigned int)&KMStoreSysCfg;
182 //        KMem.SDD[15]=(unsigned int)&KMStoreSysCfg1;
183         KMem.SDD[12]=((uint32_t *)UID_BASE)[0];
184 //        KMem.SDD[13]=((uint32_t *)UID_BASE)[1];
185 //        KMem.SDD[14]=((uint32_t *)UID_BASE)[2];
186         KMem.SDD[13]=PendSvCount;
187         KMem.SDD[14]=RCC->CSR;
188 //        KMem.SDD[15]=*(uint32_t *)FLASHSIZE_BASE;
189 //        KMem.SDD[16]=(unsigned int)&KMSysCfg;
190     
191   /* USER CODE END Init */
192
193   /* Configure the system clock */
194   SystemClock_Config();
195
196   /* USER CODE BEGIN SysInit */
197     TickFreq=10000;        //Tick频率
198     InituS(TickFreq);    
199  // HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/TickFreq);    //重新定义SysTick的频率
200
201   /* USER CODE END SysInit */
202
203   /* Initialize all configured peripherals */
204   MX_GPIO_Init();
205   LL_GPIO_InitTypeDef GPIO_InitStruct;
206   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
207   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
208   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
209   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
210   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
211
212   MX_DMA_Init();
213     
214     KMachineInit();
215     ReadSysCfgFromFlash(&storedKMSysCfg);
216     
217     KMRunStat.bLEDFlick = 1;
218     
219     KMem.CurJumperSW=ReadJumperSW();
220     KMem.EffJumperSW=KMem.CurJumperSW;
221     
222     bSLPMaster = 1; // KMem.EffJumperSW&0x20 ; //master?
223     nStation = 1;
224     
225 //    Uart2Baud = AlterUart2Baud;
226     
227 #if (BOARD_TYPE == 14)
228     KMem.EffJumperSW|=0x10;
229     nStationID=KMem.EffJumperSW&0x0f;
230   if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
231     else{bKBusMaster=0;bKBusSlave=1;}
232     nChilds=nStationID;
233     FP0_Init();
234
235 #elif (BOARD_TYPE == 15 || BOARD_TYPE == 16)
236     nStationID=1 ;//KMem.EffJumperSW&0x0f;
237 //    if (KMem.EffJumperSW == 0x1f) {bKBusRepeater=1;bKBusMaster=1;bKBusSlave=0;}
238 //  else if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
239 //    else
240         {bKBusMaster=0;bKBusSlave=1;}    
241 #else
242     nStationID=KMem.EffJumperSW&0x0f;
243     if (KMem.EffJumperSW == 0x1f) {bKBusRepeater=1;bKBusMaster=1;bKBusSlave=0;}
244   else if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
245     else{bKBusMaster=0;bKBusSlave=1;}
246 #endif
247     nChilds=nStationID;
248     nCurPollId=1;
249     //if (KMem.EffJumperSW == 0x00)
250         Uart1Baud = DefaultUart1Baud;
251   MX_USART1_UART_Init();
252   MX_USART2_UART_Init();
253 //    MX_USART5_UART_Init();
254 //    LL_USART_EnableIT_RXNE(USART5);
255 //    LL_USART_EnableIT_IDLE(USART5);
256     
257     MX_USART6_UART_Init();
258     LL_USART_EnableIT_RXNE(USART6);
259     LL_USART_EnableIT_IDLE(USART6);
260
261     
262 //    MX_SPI1_Init();
263 //    LL_SPI_EnableIT_RXNE(SPI1);
264
265 #if (BOARD_TYPE == 14)
266 //    MX_SPI2_Init();
267 //  MX_ADC_Init();
268 #else
269 //    MX_SPI2_Init();
270   MX_ADC_Init();
271 #endif
272
273     MX_IWDG_Init();
274
275     MX_TIM6_Init();
276     LL_TIM_EnableCounter(TIM6);
277     
278   /* USER CODE BEGIN 2 */
279     LL_USART_EnableIT_RXNE(USART1);
280     LL_USART_EnableIT_IDLE(USART1);
281     LL_USART_EnableIT_TC(USART1);
282
283 //    LL_USART_EnableIT_RXNE(USART2);
284     Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));    
285     LL_USART_EnableIT_IDLE(USART2);
286     LL_USART_EnableIT_TC(USART2);
287 #if (BOARD_TYPE == 13)
288     int res;
289     res = w5500_init();
290     KMem.SDD[28]=res;
291     
292 //    res=socket(0,Sn_MR_TCP,5000,0);
293     KMem.SDD[29]=res;    
294     
295 //    res = listen(0);
296 #endif    
297 //    if (bKBusSlave)
298     {
299     //    LL_USART_EnableAutoBaudRate(USART1);
300     //    LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);        
301     //    LL_USART_EnableAutoBaudRate(USART2);
302     //    LL_USART_SetAutoBaudRateMode(USART2, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);        
303     }
304     //LL_USART_EnableIT_TXE(USART1);
305   /* USER CODE END 2 */
306
307     
308   /* Infinite loop */
309   /* USER CODE BEGIN WHILE */
310
311     HAL_Delay(10);                
312     SetRunLed(1);                //Turn On Run Led
313     SetErrLed(0);                //Turn Off Err Led
314
315 #if (BOARD_TYPE == 14)
316 //    PutOutput (0);                    //Clear all Output
317 //    Enable595(1);                        //Enable 595 Output 
318 #else
319     PutOutput (0);                    //Clear all Output
320     Enable595(1);                        //Enable 595 Output 
321 #endif
322
323         if (GetBoardType() == 7 || GetBoardType() ==8 
324             || GetBoardType() == 9 || GetBoardType() ==10 ||GetBoardType() ==13 ||GetBoardType() ==15 || BOARD_TYPE == 16) 
325         {
326             displayInput(0xffff);        //
327             EnableDisIn(1);                //Input Diaplay Enable 595 
328         }
329     SetOutStat(0);            //OK Good, signal
330     ShowInitInfo();
331     KMem.LastScanTime = GetuS();
332
333     KMRunStat.WorkMode=0;
334     KMRunStat.WorkMode2=0;
335         
336     KMRunStat.WorkMode = storedKMSysCfg.theKMSysCfg.workmode;
337         
338     if (KMRunStat.WorkMode == 1){
339         InitPLC();
340         KMRunStat.WorkMode2 = KMem.CurJumperSW&0x20 ;
341         if (KMRunStat.WorkMode2) {
342             StartPLC(); }
343     }
344     KMem.WX[7]=0x5a;
345 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
346     KWireLessInit(KMem.EffJumperSW&0x20,KMem.EffJumperSW&0x0f);
347     KWireLessStart();
348 #endif
349     
350   while (1)
351   {
352         //int MyKeyStat1,MyKeyStat2;
353         //MyKeyStat1=GetInput();
354
355         //*((unsigned int *)&(PLCMem.SDT[10]))=nRunCount;
356     //    KMem.nRunCount=nRunCount;
357         SlowFlicker=0;
358         FastFlicker=1;        
359         us1=GetuS();
360         int haltick=HAL_GetTick();
361         
362         int thisJumperSW=ReadJumperSW();
363         
364         if (KMRunStat.WorkMode&1){
365             if (thisJumperSW&0x20 && !(KMem.CurJumperSW&0x20))  // Run 开关 正 跳变。
366             {StartPLC();}
367             if (!(thisJumperSW&0x20) && (KMem.CurJumperSW&0x20))  // Run 开关 负 跳变。
368             {StopPLC();}
369         }
370         
371         KMem.CurJumperSW=thisJumperSW;
372         KMem.haltick=haltick;
373 //        KMem.TotalRunTime=TotalRunTime;
374 //        KMem.ThisRunTime=ThisRunTime;        
375         
376 //        *((unsigned int *)&(PLCMem.SDT[2]))=nChilds;
377 //        KMem.SDD[13]=PendSvCount;
378 //        KMem.SDD[14]=RCC->CSR;        
379         
380         int a;
381         a        = LL_GPIO_ReadInputPort(GPIOA);
382         KMem.WDT[120]=a;
383         a        = LL_GPIO_ReadInputPort(GPIOB);
384         KMem.WDT[121]=a;
385         a        = LL_GPIO_ReadInputPort(GPIOC);
386         KMem.WDT[122]=a;
387         a        = LL_GPIO_ReadInputPort(GPIOD);
388         KMem.WDT[123]=a;
389         
390 #if (BOARD_TYPE == 14)
391 //        KMem.WX[0]= GetInput();        
392         FP0_Proc();
393 #else
394         KMem.WXB[0]= GetInput();        
395 #endif
396         
397         if (GetBoardType() == 7 || GetBoardType() ==8 
398             || GetBoardType() == 9 || GetBoardType() ==10 || GetBoardType() ==15 || GetBoardType() ==16) 
399         {
400             displayInput(KMem.WX[0]);
401         }
402         us2=GetuS();
403         if (PowerDownEvent) {        KMem.WX[0]=0;}
404 ///*
405         if ((KMem.nRunCount &0x1f) == 0x02)
406         {
407             ADCProcess();
408             if (PowerDownEvent)
409             {
410                 KMem.WX[0]=0;
411                 if (!OldPowerDownEvent)
412                 {
413                     OldPowerDownEvent = PowerDownEvent;
414                     OldPowerDownEventTime = nCurTick;
415                     PowerDownProcess();
416                 }
417             }else
418             {
419                 if (OldPowerDownEvent)
420                 {
421                     OldPowerDownEvent=PowerDownEvent;
422                     PowerRecoverProcess();
423                     
424                 }
425             }
426         }
427 //*/
428
429 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
430         Radio.IrqProcess( ); // Process Radio IRQ
431         KWL_Process(1);
432         
433 #endif
434
435 //        pProgs = (stBinProg1 *) STORE_PRG_BASE;
436
437         if (    KMRunStat.WorkMode==1 ) //&& bKBusMaster)
438         {
439             if (KMRunStat.nBinProgBank == 0){
440                 pProgs=(stBinProg1 *)STORE_PRG_BASE;
441             }else {
442                 pProgs=(stBinProg1 *)ALT_PRG_BASE;
443             }
444             nSizeProg1=KMRunStat.nBinProgSize;
445         //    pProgs=(stBinProg1 *)prog1;
446             
447             ProcessPLCBinProg(pProgs, nSizeProg1);
448         }
449
450         KMem.ScanTimeuS=us2-KMem.LastScanTime;
451         KMem.LastScanTime = us2;
452         if (KMem.ScanTimeuS < KMem.MinScanTimeuS) {KMem.MinScanTimeuS = KMem.ScanTimeuS;}
453         if (KMem.ScanTimeuS > KMem.MaxScanTimeuS) {KMem.MaxScanTimeuS = KMem.ScanTimeuS;}
454
455         //        if (bKBusRepeater)        {    KBusRepeaterFunc();    }
456
457         us3=GetuS();
458
459         if (bKBusMaster)        
460         {
461 #if (BOARD_TYPE == 14)
462             for (int i=0;i<nOutputBytes;i++)
463             {BufferOut[i+1]=KMem.WYB[i];}
464 #else
465 //            BufferOut[1]=KMem.WX[0]&0xff;
466 //            BufferOut[2]=(KMem.WX[0]>>8)&0xff;
467 #endif
468             if (nChilds>0) {        KBusMasterFunc(2); }
469
470 #if (BOARD_TYPE == 14)            
471 //            KMem.WX[0]=BufferIn[1]+(BufferIn[2]<<8);
472 #else
473 //            KMem.WY[0]=BufferIn[1]+(BufferIn[2]<<8);
474 #endif
475
476         }
477             if (haltick&0x00002000) SlowFlicker=1;
478             else SlowFlicker=0;
479             if (haltick&0x00000800) FastFlicker=1;
480             else FastFlicker=0;    
481
482         if (bKBusSlave)        
483         {
484 //            BufferOut[0]=KMem.WX[0];
485 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
486 //            KBusSlaveFunc(2);    
487         //    if (! KMem.RunStat) {BufferIn[0]=0;}
488         //    KMem.WY[0]=BufferIn[0];
489 #else
490             KBusSlaveFunc(2);    
491             if (! KMem.RunStat) {BufferIn[0]=0;}
492             KMem.WLY[0]=BufferIn[0];
493 #endif
494             if (nSlaveTick&0x00002000) SlowFlicker=1;
495             else SlowFlicker=0;
496             if (nSlaveTick&0x00000800) FastFlicker=1;
497             else FastFlicker=0;            
498
499         }
500
501 //        KMem.WY[0]=nCount2>>5;
502         if (KMem.RunStat) {KMem.RunStat--;}
503         if (KMem.ErrStat) {KMem.ErrStat--;}
504         
505         if (KMRunStat.bLEDFlick)
506         {
507             SetRunLed(FastFlicker);
508             SetErrLed(FastFlicker);
509             SetErr2Led(FastFlicker);
510             SetOutStat(!FastFlicker);
511             //KMRunStat.bLEDFlick-- ;
512         }
513         else
514         {
515             if (KMRunStat.WorkMode==1 ) {
516                 if (PLCMem.bPLCRunning){SetRunLed(SlowFlicker);}
517                     else {SetRunLed(0);}
518             }
519             else {
520                     if (!KMem.RunStat) SetRunLed(SlowFlicker);
521                     else SetRunLed(FastFlicker);
522             }
523             if (!KMem.ErrStat) 
524             {
525                 SetErrLed(0);
526                 SetErr2Led(0);
527                 SetOutStat(1);
528             }
529             else 
530             {
531                 SetErrLed(FastFlicker);
532                 SetErr2Led(FastFlicker);
533                 SetOutStat(0);
534                 
535             }
536         }
537         
538 //        SetRunLed(RunStat);
539 //        SetErrLed(ErrStat);
540         
541         us4=GetuS();
542 //        EffJumperSW = GetInput(20)&0xff;
543
544 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)        
545         
546         if ((KMem.EffJumperSW&0x10)==0x10) {
547             KMem.WFY[1]=KMem.WLY[0];
548             KMem.WLX[0]=KMem.WFX[1];            
549         }else
550         {
551             KMem.WFY[1]=KMem.WX[0];
552             KMem.WY[0]=KMem.WFX[1];
553         }
554 //    KMem.WY[0]=KMem.WLY[0];
555 #else
556         KMem.WLX[0]=KMem.WX[0];
557         KMem.WY[0]=KMem.WLY[0];
558 #endif
559
560         us5=GetuS();
561         
562
563         //PutOutput (KMem.nRunCount>>8);
564         //PutOutput(0x0f70);
565
566 //        if (bKBusMaster) ShowInfo();
567 //        if (bKBusSlave) ShowInfo();
568         us6=GetuS();
569         add1(10,10);
570         for (int i=0;i<64;i++)
571         {
572 //            ProcessTimer(i);
573         }
574         KMem.nRunCount++;
575 //        int nSize=sizeof(stKBusChnStat);
576 //        memcpy(&KMem.SDT[64],&KBusChnStats[1],nSize);
577 //        memcpy(&KMem.SDT[64+nSize/2],&KBusChnStats[2],nSize);
578 //        for (int i=0;i<128;i++)    {        SDT[i]=i;    }
579 //        SDT[48]=55;
580         if (Uart1RecvBuf1DataLen >0 && Uart1Stat.bPacketRecved)
581         {
582             int res1 = -1;
583             res1 = ModBusSlaveParsePkg(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
584             if (res1 !=0)
585             {
586                 KLParsePacket(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
587             }
588             Uart1RecvBuf1DataLen=0;
589             Uart1Stat.bPacketRecved=0;
590             Uart1IdelTimer = 0;
591         }else {
592             if (Uart1IdelTimer>600000) { // 超过60秒没有数据传输,重新进入自适应波特率状态
593                 LL_USART_EnableAutoBaudRate(USART1);
594                 LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);
595             }else {
596                     Uart1IdelTimer++;
597             }
598         }
599     if (bKBusSlave)    HAL_Delay(0);
600         
601     if (Uart6Stat.bPacketRecved){
602         SLPparsePacket(Uart6RxBuf,Uart6RecvBuf1DataLen);
603         Uart6RecvBuf1DataLen =0;
604         Uart6Stat.bPacketRecved = 0;
605     }
606         
607         SLPinputB =  KMem.WYB[1];
608         SLPProcess();
609         KMem.WXB[1] = SLPoutputB;
610         
611 /*
612         if ((KMem.nRunCount&0x7f)==1) {
613             
614             SLPSendPacket("ABCDEF",6);
615             
616         };
617 */        
618         
619         /*
620         if (!IsEmpty(&Uart1Stat.QRx))
621         {
622             unsigned char k=PopOne(&Uart1Stat.QRx);
623             if (k=='L')
624             {
625                 clearscreen();
626             }
627         }
628 */
629 #if (BOARD_TYPE == 14)
630 //        PutOutput (KMem.WY[0]);
631 #else
632         PutOutput (KMem.WY[0]);
633
634 #endif
635
636 #if (BOARD_TYPE == 14)
637 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};
638         //process 6 output
639         {
640                 // mapping bits.
641             for (int i=0;i<6;i++)
642             {
643                 USHORT bitaddr = storedKMSysCfg.theKMSysCfg.OutMappings[i];
644                 UCHAR type =  (bitaddr&0xf000) >>12;
645                 USHORT byteaddr = (bitaddr&0x0ff0) >>4;
646                 UCHAR bitpos = bitaddr &0x0f;
647                 UCHAR bitvalue = 0 ;
648                 if (byteaddr>0) {
649                     if (type == 0) bitvalue = KMem.WXB[byteaddr-1] & ( 1 << bitpos );
650                     else if (type == 1 ) bitvalue = KMem.WYB[byteaddr-1] & ( 1 << bitpos );
651                 }
652                 if (bitvalue){ LL_GPIO_SetOutputPin(GPIOB,pins[i]);}
653                 else {LL_GPIO_ResetOutputPin(GPIOB,pins[i]);}
654             }
655         }
656 #endif
657
658 /*        
659         {
660         unsigned char pos,seg;
661         unsigned short val;
662         pos=((KMem.nRunCount)&0x3);
663         //val=(KMem.nRunCount)&0xfff;
664         val=KMem.ErrStat;
665         char buf5[20];
666         sprintf(buf5,"%4d",val);
667         val=buf5[3-pos];
668         if (val <'0' || val >'9') {seg=0;}
669         else {seg=LEDSEGTAB[val-'0'];}
670         
671         pos=1<<pos;
672         //pos=1;
673         //seg=2;
674         seg=~seg;
675         //    PutOutputSPI1(pos|(seg<<8));
676     }
677 */
678
679 #if (BOARD_TYPE == 13)    
680      w5500_network_info_show();
681 //     loopback_tcps(0,str1,5000);
682 #endif
683
684      LL_IWDG_ReloadCounter(IWDG);
685         
686   }    //while (1) ;
687   /* USER CODE END WHILE */
688
689   /* USER CODE BEGIN 3 */
690
691   /* USER CODE END 3 */
692
693 }
694
695
696 /* USER CODE BEGIN 4 */
697
698 /* USER CODE END 4 */
699
700 /**
701   * @brief  This function is executed in case of error occurrence.
702   * @param  file: The file name as string.
703   * @param  line: The line in file as a number.
704   * @retval None
705   */
706 void _Error_Handler(char *file, int line)
707 {
708   /* USER CODE BEGIN Error_Handler_Debug */
709   /* User can add his own implementation to report the HAL error return state */
710   while(1)
711   {
712   }
713   /* USER CODE END Error_Handler_Debug */
714 }
715
716 #ifdef  USE_FULL_ASSERT
717 /**
718   * @brief  Reports the name of the source file and the source line number
719   *         where the assert_param error has occurred.
720   * @param  file: pointer to the source file name
721   * @param  line: assert_param error line source number
722   * @retval None
723   */
724 void assert_failed(uint8_t* file, uint32_t line)
725
726   /* USER CODE BEGIN 6 */
727   /* User can add his own implementation to report the file name and line number,
728      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
729   /* USER CODE END 6 */
730 }
731 #endif /* USE_FULL_ASSERT */
732
733 /**
734   * @}
735   */
736
737 /**
738   * @}
739   */
740
741 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/