QuakeGod
2023-02-01 a9312568cde771d4b970445e1f66a04fabb64d56
提交 | 用户 | 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"
7a2ff3 60 #elif (BOARD_TYPE == 15 || BOARD_TYPE == 16)
a7db3c 61 #include "KWireless.h"
Q 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);    
a93125 196 <<<<<<< HEAD
0fe6b0 197  // HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/TickFreq);    //重新定义SysTick的频率
a93125 198 =======
091773 199  // HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/TickFreq);    //重新定义SysTick的频率�
a93125 200 >>>>>>> origin/Radio
bfc108 201
Q 202   /* USER CODE END SysInit */
203
204   /* Initialize all configured peripherals */
205   MX_GPIO_Init();
206   MX_DMA_Init();
207     
208     KMachineInit();
a7db3c 209     ReadSysCfgFromFlash(&storedKMSysCfg);
bfc108 210     
0fe6b0 211     KMRunStat.bLEDFlick = 1;
Q 212     
bfc108 213     KMem.EffJumperSW=ReadJumperSW();
a7db3c 214 #if (BOARD_TYPE == 14)
d69aae 215     KMem.EffJumperSW|=0x10;
0fe6b0 216     nStationID=KMem.EffJumperSW&0x0f;
a7db3c 217   if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
Q 218     else{bKBusMaster=0;bKBusSlave=1;}
0fe6b0 219     nChilds=nStationID;
d69aae 220     FP0_Init();
a93125 221 <<<<<<< HEAD
a7db3c 222 #elif (BOARD_TYPE == 15)
0fe6b0 223     nStationID=KMem.EffJumperSW&0x0f;
a93125 224 =======
7a2ff3 225 #elif (BOARD_TYPE == 15 || BOARD_TYPE == 16)
a7db3c 226     nAddr=KMem.EffJumperSW&0x0f;
a93125 227 >>>>>>> origin/Radio
a7db3c 228     if (KMem.EffJumperSW == 0x1f) {bKBusRepeater=1;bKBusMaster=1;bKBusSlave=0;}
Q 229   else if ((KMem.EffJumperSW&0x10)!=0) {bKBusMaster=1;bKBusSlave=0;}
230     else{bKBusMaster=0;bKBusSlave=1;}    
d69aae 231 #else
0fe6b0 232     nStationID=KMem.EffJumperSW&0x7;
a7db3c 233     if (KMem.EffJumperSW == 0x0f) {bKBusRepeater=1;bKBusMaster=1;bKBusSlave=0;}
Q 234   else if ((KMem.EffJumperSW&0x08)!=0) {bKBusMaster=1;bKBusSlave=0;}
235     else{bKBusMaster=0;bKBusSlave=1;}
d69aae 236 #endif
0fe6b0 237     nChilds=nStationID;
bfc108 238     nCurPollId=1;
d69aae 239     //if (KMem.EffJumperSW == 0x00)
Q 240         Uart1Baud = DefaultUart1Baud;
bfc108 241   MX_USART1_UART_Init();
Q 242   MX_USART2_UART_Init();
d69aae 243
e1f350 244     MX_SPI1_Init();
d69aae 245     LL_SPI_EnableIT_RXNE(SPI1);
Q 246
a7db3c 247 #if (BOARD_TYPE == 14)
d69aae 248 //    MX_SPI2_Init();
Q 249 //  MX_ADC_Init();
250 #else
0aeaad 251     MX_SPI2_Init();
bfc108 252   MX_ADC_Init();
d69aae 253 #endif
Q 254
bfc108 255     MX_IWDG_Init();
d69aae 256
Q 257     MX_TIM6_Init();
258     LL_TIM_EnableCounter(TIM6);
bfc108 259     
Q 260   /* USER CODE BEGIN 2 */
261     LL_USART_EnableIT_RXNE(USART1);
262     LL_USART_EnableIT_IDLE(USART1);
263     LL_USART_EnableIT_TC(USART1);
264
e1f350 265 //    LL_USART_EnableIT_RXNE(USART2);
Q 266     Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));    
bfc108 267     LL_USART_EnableIT_IDLE(USART2);
Q 268     LL_USART_EnableIT_TC(USART2);
d69aae 269 #if (BOARD_TYPE == 13)
Q 270     int res;
271     res = w5500_init();
272     KMem.SDD[28]=res;
bfc108 273     
d69aae 274 //    res=socket(0,Sn_MR_TCP,5000,0);
Q 275     KMem.SDD[29]=res;    
276     
277 //    res = listen(0);
278 #endif    
a7db3c 279 //    if (bKBusSlave)
bfc108 280     {
Q 281     //    LL_USART_EnableAutoBaudRate(USART1);
282     //    LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);        
283     //    LL_USART_EnableAutoBaudRate(USART2);
284     //    LL_USART_SetAutoBaudRateMode(USART2, LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE);        
285     }
286     //LL_USART_EnableIT_TXE(USART1);
287   /* USER CODE END 2 */
288
289     
290   /* Infinite loop */
291   /* USER CODE BEGIN WHILE */
292
293     HAL_Delay(10);                
294     SetRunLed(1);                //Turn On Run Led
295     SetErrLed(0);                //Turn Off Err Led
d69aae 296
a7db3c 297 #if (BOARD_TYPE == 14)
d69aae 298 //    PutOutput (0);                    //Clear all Output
Q 299 //    Enable595(1);                        //Enable 595 Output 
300 #else
bfc108 301     PutOutput (0);                    //Clear all Output
Q 302     Enable595(1);                        //Enable 595 Output 
d69aae 303 #endif
Q 304
0aeaad 305         if (GetBoardType() == 7 || GetBoardType() ==8 
7a2ff3 306             || GetBoardType() == 9 || GetBoardType() ==10 ||GetBoardType() ==13 ||GetBoardType() ==15 || BOARD_TYPE == 16) 
0aeaad 307         {
Q 308             displayInput(0xffff);        //
309             EnableDisIn(1);                //Input Diaplay Enable 595 
310         }
bfc108 311     SetOutStat(0);            //OK Good, signal
e1f350 312     ShowInitInfo();
bfc108 313     KMem.LastScanTime = GetuS();
d69aae 314
Q 315     KMRunStat.WorkMode=0;
316     if (KMRunStat.WorkMode == 1){
317         InitPLC();
318         StartPLC();
e1f350 319     }
d69aae 320     KMem.WX[7]=0x5a;
7a2ff3 321 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
091773 322     KWireLessInit(KMem.EffJumperSW&0x20,KMem.EffJumperSW&0x1f);
a7db3c 323     KWireLessStart();
Q 324 #endif
bfc108 325   while (1)
Q 326   {
327         //int MyKeyStat1,MyKeyStat2;
328         //MyKeyStat1=GetInput();
f4f290 329
bfc108 330         //*((unsigned int *)&(PLCMem.SDT[10]))=nRunCount;
Q 331     //    KMem.nRunCount=nRunCount;
332         SlowFlicker=0;
333         FastFlicker=1;        
334         us1=GetuS();
335         int haltick=HAL_GetTick();
336         
e1f350 337 //        int CurJumperSW=ReadJumperSW();        
Q 338 //        KMem.CurJumperSW=CurJumperSW;
bfc108 339         KMem.haltick=haltick;
Q 340 //        KMem.TotalRunTime=TotalRunTime;
341 //        KMem.ThisRunTime=ThisRunTime;        
342         
343 //        *((unsigned int *)&(PLCMem.SDT[2]))=nChilds;
e1f350 344 //        KMem.SDD[13]=PendSvCount;
Q 345 //        KMem.SDD[14]=RCC->CSR;        
346
a7db3c 347 #if (BOARD_TYPE == 14)
d69aae 348 //        KMem.WX[0]= GetInput();        
a7db3c 349         FP0_Proc();
d69aae 350 #else
e1f350 351         KMem.WX[0]= GetInput();        
d69aae 352 #endif
bfc108 353         
Q 354         if (GetBoardType() == 7 || GetBoardType() ==8 
7a2ff3 355             || GetBoardType() == 9 || GetBoardType() ==10 || GetBoardType() ==15 || GetBoardType() ==16) 
bfc108 356         {
Q 357             displayInput(KMem.WX[0]);
358         }
359         us2=GetuS();
a7db3c 360 ///*
bfc108 361         if ((KMem.nRunCount &0x1f) == 0x02)
Q 362         {
363             ADCProcess();
364             if (PowerDownEvent)
365             {
366                 if (!OldPowerDownEvent)
367                 {
368                     OldPowerDownEvent = PowerDownEvent;
369                     OldPowerDownEventTime = nCurTick;
370                     PowerDownProcess();
371                 }
372             }else
373             {
374                 if (OldPowerDownEvent)
375                 {
376                     OldPowerDownEvent=PowerDownEvent;
377                     PowerRecoverProcess();
378                     
379                 }
380             }
381         }
a7db3c 382 //*/
d69aae 383
7a2ff3 384 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
a7db3c 385         Radio.IrqProcess( ); // Process Radio IRQ
Q 386 #endif
387
388 //        pProgs = (stBinProg1 *) STORE_PRG_BASE;
389
390         if (    KMRunStat.WorkMode==1 && bKBusMaster)
bfc108 391         {
a7db3c 392             if (KMRunStat.nBinProgBank == 0){
Q 393                 pProgs=(stBinProg1 *)STORE_PRG_BASE;
394             }else {
395                 pProgs=(stBinProg1 *)ALT_PRG_BASE;
396             }
397             nSizeProg1=KMRunStat.nBinProgSize;
398             
399             ProcessPLCBinProg(pProgs, nSizeProg1);
400         }
401
402         KMem.ScanTimeuS=us2-KMem.LastScanTime;
403         KMem.LastScanTime = us2;
404         if (KMem.ScanTimeuS < KMem.MinScanTimeuS) {KMem.MinScanTimeuS = KMem.ScanTimeuS;}
405         if (KMem.ScanTimeuS > KMem.MaxScanTimeuS) {KMem.MaxScanTimeuS = KMem.ScanTimeuS;}
406
407         //        if (bKBusRepeater)        {    KBusRepeaterFunc();    }
408
409         us3=GetuS();
410
411         if (bKBusMaster)        
412         {
413 #if (BOARD_TYPE == 14)
d69aae 414             for (int i=0;i<nOutputBytes;i++)
Q 415             {BufferOut[i+1]=KMem.WYB[i];}
416 #else
e1f350 417 //            BufferOut[1]=KMem.WX[0]&0xff;
Q 418 //            BufferOut[2]=(KMem.WX[0]>>8)&0xff;
d69aae 419 #endif
a7db3c 420             if (nChilds>0) {        KBusMasterFunc(2); }
bfc108 421
a7db3c 422 #if (BOARD_TYPE == 14)            
d69aae 423 //            KMem.WX[0]=BufferIn[1]+(BufferIn[2]<<8);
Q 424 #else
425 //            KMem.WY[0]=BufferIn[1]+(BufferIn[2]<<8);
426 #endif
427
428         }
bfc108 429             if (haltick&0x00002000) SlowFlicker=1;
Q 430             else SlowFlicker=0;
431             if (haltick&0x00000800) FastFlicker=1;
432             else FastFlicker=0;    
d69aae 433
a7db3c 434         if (bKBusSlave)        
bfc108 435         {
e1f350 436 //            BufferOut[0]=KMem.WX[0];
7a2ff3 437 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)
a7db3c 438 //            KBusSlaveFunc(2);    
Q 439         //    if (! KMem.RunStat) {BufferIn[0]=0;}
440         //    KMem.WY[0]=BufferIn[0];
441 #else
442             KBusSlaveFunc(2);    
bfc108 443             if (! KMem.RunStat) {BufferIn[0]=0;}
Q 444             KMem.WY[0]=BufferIn[0];
a7db3c 445 #endif
bfc108 446             if (nSlaveTick&0x00002000) SlowFlicker=1;
Q 447             else SlowFlicker=0;
448             if (nSlaveTick&0x00000800) FastFlicker=1;
449             else FastFlicker=0;            
450
451         }
d69aae 452
bfc108 453 //        KMem.WY[0]=nCount2>>5;
Q 454         if (KMem.RunStat) {KMem.RunStat--;}
455         if (KMem.ErrStat) {KMem.ErrStat--;}
456         
0fe6b0 457         if (KMRunStat.bLEDFlick)
bfc108 458         {
0fe6b0 459             SetRunLed(FastFlicker);
bfc108 460             SetErrLed(FastFlicker);
0fe6b0 461             SetErr2Led(FastFlicker);
Q 462             SetOutStat(!FastFlicker);
463             //KMRunStat.bLEDFlick-- ;
464         }
465         else
466         {
467             if (!KMem.RunStat) SetRunLed(SlowFlicker);
468             else SetRunLed(FastFlicker);
bfc108 469             
0fe6b0 470             if (!KMem.ErrStat) 
Q 471             {
472                 SetErrLed(0);
473                 SetErr2Led(0);
474                 SetOutStat(1);
475             }
476             else 
477             {
478                 SetErrLed(FastFlicker);
479                 SetErr2Led(FastFlicker);
480                 SetOutStat(0);
481                 
482             }
bfc108 483         }
Q 484         
485 //        SetRunLed(RunStat);
486 //        SetErrLed(ErrStat);
487         
488         us4=GetuS();
489 //        EffJumperSW = GetInput(20)&0xff;
490
a7db3c 491 #if (BOARD_TYPE == 14)
d69aae 492 //        PutOutput (KMem.WY[0]);
a7db3c 493 #else
bfc108 494         PutOutput (KMem.WY[0]);
d69aae 495 #endif
0aeaad 496         //PutOutput (KMem.nRunCount>>8);
bfc108 497         //PutOutput(0x0f70);
7a2ff3 498 #if (BOARD_TYPE == 15 || BOARD_TYPE == 16)        
a7db3c 499     //    KMem.WY[1]=KMem.nRunCount>>6;
Q 500         KMem.WY[1]=KMem.WX[0];
501         KMem.WY[0]=KMem.WX[1];
502 #endif
bfc108 503         us5=GetuS();
a7db3c 504 //        if (bKBusMaster) ShowInfo();
Q 505 //        if (bKBusSlave) ShowInfo();
bfc108 506         us6=GetuS();
Q 507         add1(10,10);
508         for (int i=0;i<64;i++)
509         {
510 //            ProcessTimer(i);
511         }
512         KMem.nRunCount++;
d69aae 513 //        int nSize=sizeof(stChnStat);
0fe6b0 514 //        memcpy(&KMem.SDT[64],&KBusChnStats[1],nSize);
Q 515 //        memcpy(&KMem.SDT[64+nSize/2],&KBusChnStats[2],nSize);
bfc108 516 //        for (int i=0;i<128;i++)    {        SDT[i]=i;    }
Q 517 //        SDT[48]=55;
518         if (Uart1RecvBuf1DataLen >0 && Uart1Stat.bPacketRecved)
519         {
e1f350 520             int res1 = -1;
d69aae 521             res1 = ModBusSlaveParsePkg(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
e1f350 522             if (res1 !=0)
Q 523             {
d69aae 524                 KLParsePacket(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
e1f350 525             }
bfc108 526             Uart1RecvBuf1DataLen=0;
Q 527             Uart1Stat.bPacketRecved=0;
528         }
a7db3c 529  if (bKBusSlave)    HAL_Delay(0);
bfc108 530 /*
Q 531         if (!IsEmpty(&Uart1Stat.QRx))
532         {
533             unsigned char k=PopOne(&Uart1Stat.QRx);
534             if (k=='L')
535             {
536                 clearscreen();
537             }
538         }
d69aae 539 */
Q 540
a7db3c 541 #if (BOARD_TYPE == 14)
d69aae 542         //process 6 output
Q 543         {
544                 // mapping bits.
545             if (KMem.WXB[0]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_12);}
546             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_12);}
547             if (KMem.WXB[1]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_13);}
548             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_13);}
549             if (KMem.WXB[2]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_14);}
550             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_14);}
551             if (KMem.WXB[3]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_15);}
552             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_15);}
553             if (KMem.WXB[4]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_0);}
554             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_0);}
555             if (KMem.WXB[5]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_1);}
556             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_1);}            
557             if (KMem.WXB[5]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_2);}
558             else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_2);}            
559         }
560 #endif
561
a7db3c 562 /*        
d69aae 563         {
e1f350 564         unsigned char pos,seg;
Q 565         unsigned short val;
566         pos=((KMem.nRunCount)&0x3);
567         //val=(KMem.nRunCount)&0xfff;
568         val=KMem.ErrStat;
569         char buf5[20];
570         sprintf(buf5,"%4d",val);
571         val=buf5[3-pos];
572         if (val <'0' || val >'9') {seg=0;}
573         else {seg=LEDSEGTAB[val-'0'];}
574         
575         pos=1<<pos;
576         //pos=1;
577         //seg=2;
578         seg=~seg;
d69aae 579         //    PutOutputSPI1(pos|(seg<<8));
Q 580     }
a7db3c 581 */
Q 582
d69aae 583 #if (BOARD_TYPE == 13)    
Q 584      w5500_network_info_show();
585 //     loopback_tcps(0,str1,5000);
586 #endif
587
bfc108 588      LL_IWDG_ReloadCounter(IWDG);
Q 589         
590   }    //while (1) ;
591   /* USER CODE END WHILE */
592
593   /* USER CODE BEGIN 3 */
594
595   /* USER CODE END 3 */
596
597 }
598
599
600 /* USER CODE BEGIN 4 */
601
602 /* USER CODE END 4 */
603
604 /**
605   * @brief  This function is executed in case of error occurrence.
606   * @param  file: The file name as string.
607   * @param  line: The line in file as a number.
608   * @retval None
609   */
610 void _Error_Handler(char *file, int line)
611 {
612   /* USER CODE BEGIN Error_Handler_Debug */
613   /* User can add his own implementation to report the HAL error return state */
614   while(1)
615   {
616   }
617   /* USER CODE END Error_Handler_Debug */
618 }
619
620 #ifdef  USE_FULL_ASSERT
621 /**
622   * @brief  Reports the name of the source file and the source line number
623   *         where the assert_param error has occurred.
624   * @param  file: pointer to the source file name
625   * @param  line: assert_param error line source number
626   * @retval None
627   */
628 void assert_failed(uint8_t* file, uint32_t line)
629
630   /* USER CODE BEGIN 6 */
631   /* User can add his own implementation to report the file name and line number,
632      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
633   /* USER CODE END 6 */
634 }
635 #endif /* USE_FULL_ASSERT */
636
637 /**
638   * @}
639   */
640
641 /**
642   * @}
643   */
644
645 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/