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