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