在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → OID实例(源码)

OID实例(源码)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:10.76M
  • 下载次数:5
  • 浏览次数:119
  • 发布时间:2021-09-16
  • 实例类别:嵌入式开发
  • 发 布 人:chihuaming
  • 文件格式:.rar
  • 所需积分:10
 相关标签: id

实例介绍

【实例简介】OID实例
【实例截图】

【核心代码】

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f0xx_usart.h"
#include "stdtypes.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */

/* USER CODE END PV */
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart3;
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_USART4_UART_Init(void);
static void MX_USART3_UART_Init(void);
/* USER CODE BEGIN PFP */
//#define OID_DEBUG_INFO(str,...) printf("OIDParser: "str"\r\n",__VA_ARGS__) 
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

uint8_t max_buffer[256] = {0x00};
uint8_t LED_Flag[5] = {0};
uint8_t OID_Test_Flag = 0;
/* USER CODE BEGIN PFP */
uint8_t aaaa[] = {0xF9 ,0x74 ,0x00 ,0x01 ,0x00 ,
                  0x00 ,0x00 ,0x36 ,0x00 ,0x07 ,
                  0x00 ,0x05 ,0x00 ,0x64 ,0x01 ,
                  0x7E ,0x4D ,0x5E ,0x2B ,0x01 ,
                  0x00 ,0x3A ,0x02 ,0x02 ,0x00 ,
                  
                  0xC7 ,0x00 ,0x0E ,0x00 ,0xF4 ,
                  0x01 ,0xFB ,0x04 ,0x00 ,0x0A ,
                  0x00 ,0x9F ,0x00 ,0x0A ,0x00 ,
                  0x14 ,0x00 ,0x64 ,0x00 ,0xE1 ,
                  0x00 ,0x63 ,0x01 ,0x0E ,0x01 ,
                  
                  0x09 ,0x00 ,0x00 ,0x20 ,0x00 ,
                  0x00 ,0xE2 ,0x18 ,0x1A ,0x27 ,
                  0x9F ,0x00 ,0x01 ,0x00 ,0x3E ,
                  0x06 ,0x25 ,0x00 ,0x33 ,0x00 ,
                  0x41 ,0x00 ,0x4F ,0x00 ,0x5E ,
                  
                  0x00 ,0x64 ,0x00 ,0x14 ,0x00 ,
                  0x01 ,0x00 ,0xEE ,0x27 ,0x4F ,
                  0x1A ,0xE9 ,0x13 ,0xA4 ,0x0F ,
                  0x00 ,0x40 ,0x3E ,0x29 ,0x94 ,
                  0x1E ,0xE3 ,0x18 ,0x03 ,0x00 ,
                  
                  0x00 ,0x00 ,0x03 ,0x00 ,0x04 ,
                  0x00 ,0x05 ,0x00 ,0x02 ,0x00 ,
                  0x02 ,0x00 ,0x02 ,0x00 ,0x02 ,
                  0x00 ,0x04 ,0x00 ,0x53 ,0x92 
};

uint8_t step1[] = {0xF9, 0x08, 0x00, 0x02, 0x00, 0x08, 0x16, 0x01, 0x00, 0xE3, 0xCD};
uint8_t step2[] = {0xF9, 0x08, 0x00, 0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 0xE1, 0xAD};
uint8_t step3[] = {0xF9, 0x08, 0x00, 0x02, 0x00, 0x15, 0x16, 0x01, 0x00, 0xE5, 0xA1};
uint8_t step4[] = {0xF9, 0x0A, 0x00, 0x01, 0x00, 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8E, 0xFB, 0x00};
uint8_t step5[] = {0xF9, 0x0A, 0x00, 0x01, 0x00, 0x3F, 0x00, 0x01, 0x00, 0x01, 0x00, 0x84, 0xA4};
uint8_t step6[] = {0xF9, 0x0A, 0x00, 0x03, 0x00, 0xCA, 0x16, 0x01, 0x00, 0x21, 0x03, 0x01, 0xDA};
uint8_t step7[] = {0xF9, 0x0C, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0xBB, 0xC6, 0xE9, 0x90, 0x4B, 0x1A};
uint8_t step8[] = {0xF9, 0x0A, 0x00, 0x01, 0x00, 0x36, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0xAD};
uint8_t step9[] = {0xF9, 0x0A, 0x00, 0x01, 0x00, 0x37, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x81, 0x7C};
uint8_t step10[] = {0xfd, 0xff, 0xff};
uint8_t setLed1[] = {0xF9, 0x0A, 0x00, 0x03, 0x00, 0x08, 0x16, 0x01, 0x00, 0xB8, 0x0B, 0x7A, 0xAE};
uint8_t setLed2[] = {0xF9, 0x0A, 0x00, 0x03, 0x00, 0x09, 0x16, 0x01, 0x00, 0xB8, 0x0B, 0x7B, 0x7F};

uint8_t setLed3[] = {0xF9, 0x08, 0x00, 0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 0xE1, 0xAD};

static OIDParser_code_t *mp_code = NULL;
OIDParser_code_t aaal;
OIDParser_analog_t aaaan[10] = {0};
//OIDParser_digital_t aaadi[10] = {0};
OIDParser_radius_t radiusTable[5];
OIDParser_analog_t analogTable[10];
OIDParser_analog_t analogTable_check[10];
//static uint8_t mb_codeReceived = 0;
uint8_t setLed4[] = {0xF9, 0x0A, 0x00, 0x03, 0x00, 0x00, 0x16, 0x01, 0x00, 0xB0, 0x00, 0x3D, 0xE1};
/* USER CODE END PFP */
uint8_t ddd[] = {0xF9, 0x32, 0x00, 0x17, 0x00, 0x9D, 0x11, 0x01, 0x01, 0x7D, 0xFB, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0xF1, 0x38, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x01, 0xF0, 0x71, 0xFB, 0x04, 0x01, 0x00, 0x00, 0x01, 0x01, 0x20, 0xAB, 0xFB, 0x04, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x43, 0x7C, 0xB8, 0x00, 0x04, 0x00, 0x52, 0x18};
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */
uint8_t aaa[200] = {0};
uint8_t aaa4[200] = {0};
uint8_t aab[256] = {0};
static int
analogComp (const void * elem1, const void * elem2)
{
  OIDParser_analog_t f = *((OIDParser_analog_t*)elem1);
  OIDParser_analog_t s = *((OIDParser_analog_t*)elem2);
  if (f.value > s.value) return  1;
  if (f.value < s.value) return -1;
  return 0;
}
static void
sortAnalogValues(OIDParser_analog_t *p_data, uint8_t len)
{
  
  qsort (p_data, len, sizeof(OIDParser_analog_t), analogComp);
  
}

static float
convertToAngle (const uint16_t raw)
{
  return raw / 182.0;
}
void
OIDParser_resetCode (void)
{
  uint8_t nbAnalog = 0U;
  uint8_t nbDigital = 0U;
  uint8_t idx;

//  mb_codeReceived = false;

  for (idx = 0; idx < mp_code->nbRadius; idx  )
  {
    nbAnalog  = mp_code->p_radiusTable[idx].maxNbAnalog;
    nbDigital  = mp_code->p_radiusTable[idx].maxNbAnalog;
  }

  memset(mp_code->p_analogTable, 0, nbAnalog * sizeof(OIDParser_analog_t));
  memset(&mp_code->digital, 0, sizeof(OIDParser_digital_t));
}


void OID_Init()
{
  // fill the code structure with specific patern

  mp_code = &aaal;
  aaal.nbRadius = 5;
  aaal.luminance = 2;
  aaal.p_radiusTable = radiusTable;
  aaal.p_analogTable = analogTable;
  //aaal.  aaadi
  // total 10 analog and 3 digital on 5 radius
  radiusTable[0].maxNbAnalog = 2;
  radiusTable[0].nbDigital = 1;
  radiusTable[1].maxNbAnalog = 4;
  radiusTable[1].nbDigital = 0;
  radiusTable[2].maxNbAnalog = 1;
  radiusTable[2].nbDigital = 0;
  radiusTable[3].maxNbAnalog = 0;
  radiusTable[3].nbDigital = 2;
  radiusTable[4].maxNbAnalog = 3;
  radiusTable[4].nbDigital = 0;

  memset(analogTable, 3, sizeof(analogTable));
  aaal.digital.value = 4;

  OIDParser_resetCode();

  memset(analogTable_check, 0, sizeof(analogTable_check));

}

static void MX_USART1_UART_Init(void)
{
  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */
}

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint32_t USART_FLAG)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_FLAG(USART_FLAG));
  
  if ((USARTx->ISR & USART_FLAG) != (uint16_t)RESET)
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}

void USART_ClearFlag(USART_TypeDef* USARTx, uint32_t USART_FLAG)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
     
  USARTx->ICR = USART_FLAG;
}


uint16_t str_cut_out(uint8_t* buff, uint8_t* array_slice, uint16_t start_addr, uint16_t stop_addr)
{
    uint16_t cnt = 0;
    for(uint16_t cut_addr = start_addr; cut_addr <= stop_addr; cut_addr  )
    {
        buff[cnt] = array_slice[cut_addr];
        cnt  ;
    }

    return cnt;
}


uint8_t uart_send(USART_TypeDef * p_uart,
                  uint8_t * data,
                  uint16_t data_len)
{
    USART_TypeDef* uart_port = p_uart;
    
    str_cut_out(max_buffer, data, 0, data_len);
    for(uint16_t tx_len = 0; tx_len < data_len; tx_len  )
    {
      /* 堵塞判断串口是否发送完成 */
      while((uart_port->ISR & 0X40) == 0);  //bit7: TXE

      /* 串口发送完成,将该字符发送 */
      uart_port->TDR = (uint8_t) max_buffer[tx_len];
    }

    return 0;
}

#if 1
//串口打印数据重定向
int fputc(int ch, FILE *stream)
{
    /* 堵塞判断串口是否发送完成 */
    while((USART1->ISR & 0X40) == 0);

    /* 串口发送完成,将该字符发送 */
    USART1->TDR = (uint8_t) ch;

    return ch;
}

void oid_printf(uint8_t *p_data1)
{
    uint32_t tmp;
    tmp = *(p_data1  );
  tmp  = (uint16_t)(*(p_data1  )) << 8;
  mp_code->orientation = tmp;
  printf("orientation: %f \r\n", convertToAngle(mp_code->orientation));
  
  tmp = *(p_data1  );
  tmp  = (uint16_t)(*p_data1  ) << 8;
  mp_code->nbPoints = tmp;
  printf("nb points: %u\r\n", mp_code->nbPoints);
  
  tmp = *(p_data1  );
  tmp  = (uint16_t)(*(p_data1  )) << 8;
  mp_code->nbCenters = tmp;
  printf("nb centers: %u\r\n", mp_code->nbCenters);

}

#endif
int8_t parseCode (uint8_t *p_data, const uint16_t len)
{
  uint8_t radius;
  uint8_t idx;
  uint8_t m,n;
  uint32_t tmp;
  OIDParser_analog_t *p_analog;
  
  mp_code->nbCenters = 0;
  mp_code->nbPoints  = 0;

  tmp = *p_data  ;
  tmp  = (uint16_t)(*p_data  ) << 8;
  mp_code->luminance = tmp;
  
  printf("luminance:  %d", mp_code->luminance);

    
  p_analog = mp_code->p_analogTable;
    //printf("mp_code->nbRadius:  %u\r\n", mp_code->nbRadius);
  for (radius = 0; radius < mp_code->nbRadius; radius  )
  {
    
    m = *(p_data  );
    n = *(p_data  ); 
    
    printf("radius: %u | %u analog | %u  digital\r\n", radius, m, n);

    if (m > 4)// (mp_code->p_radiusTable[radius].maxNbAnalog))
    {
      printf("Too much analog data\r\n",NULL);
      return -1;
    }

    if (n > 1)
    {
      printf("Too much analog data_2\r\n",NULL);
      return -1;
    }

    // parse the analog values 解析模拟值
    mp_code->p_radiusTable[radius].nbAnalog = m;
    for (idx = 0; idx < m; idx  )
    {
      if(idx > 4)
      {
        return -1;
      }
      tmp = *(p_data  );
      tmp  = (uint16_t)(*p_data  ) << 8;
      printf("analog %u.%u = %f, %04X, %d\r\n", radius, idx, convertToAngle(tmp), tmp, (uint16_t)((&p_analog[idx]) - mp_code->p_analogTable));
      p_analog[idx].value = tmp;
    }
    
    if (mp_code->p_radiusTable[radius].nbAnalog > 1)
    {
      sortAnalogValues(p_analog, mp_code->p_radiusTable[radius].nbAnalog); 
    }

    p_analog  = mp_code->p_radiusTable[radius].maxNbAnalog;
//    printf("NNNNNNNNNN = %u", n);
    // parse the digital values
    //if(n != 0)
    //{
        for (idx = 0u; idx < n; idx  )
        {
          tmp = *p_data  ;
          tmp  = (uint32_t)(*p_data  ) << 8;
          tmp  = (uint32_t)(*p_data  ) << 16;
          tmp  = (uint32_t)(*p_data  ) << 24;
          printf("digital %u.%u = %08X     \r\n", radius, idx, tmp);

          // VENUS only
          if (radius == 0)
          {
            mp_code->digital.value = tmp & 0x0003; // bits 1..0
          }
          else if (radius == 1)
          {
            mp_code->digital.value  = ((tmp & 0x003F)<< 2); // bits 7..2
          }
          else if (radius == 5)
          {
            mp_code->digital.value  = ((tmp & 0x000F) << 8); // bits 11..9
          }
        }
    //}
  }
  
    oid_printf(p_data);
  return 0;
}

/*
void OIDParser_receiveFrame (uint8_t *p_data, const uint16_t len)
{
  printf("new frame (%u)", len);
  
  if (len > 4)
  {
    int8_t ret = parseCode(p_data, len);
  }


}
*/

void delay(uint32_t aa)
{
  uint32_t Temp = 10000;
  
  while(aa--)
  {
    while(Temp--);
    Temp = 10000;
  }
}
extern uint8_t rx_offset;
extern uint8_t rx_offset4;
uint8_t Oid_State1 = 0;
static uint8_t test_cnd2 = 0;
static uint8_t test_cnd = 0;
void oid_discern4()
{
    static uint8_t oid1_Cnd2 = 0;

    if(oid1_Cnd2 > 5)
     {
       LED_Flag[2   test_cnd2] = 1;
        test_cnd2  ;
        if(test_cnd2 == 2)
        {
          test_cnd2 = 0;
        }
       
        if(test_cnd2 == 1)
        {
          HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
        }
        else
        {
          HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
        }
        
        oid1_Cnd2 = 0;
        return;
     }
    
    if((test_cnd2 > test_cnd) && (test_cnd2 != 0))
    {
      return;
    }
     switch(Oid_State1)
    {
    case 0:
      {
        rx_offset4 = 0;
        HAL_UART_Receive_IT(&huart4, aab, 250);
        
        uart_send(USART4, aaaa, sizeof(aaaa));
        
        delay(50);
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
        //HAL_UART_Receive_IT(&huart2, aaa, 4);
        //uart_read(USART2, aaa, 4);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 1;
        }
      }
      break;
     case 1:
      {
        rx_offset4 = 0;
        uart_send(USART4, step1, sizeof(step1));
        delay(10);
        //uart_read(USART2, aaa, 4);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          //Temp = aaa[8] << 8   aaa[7];
          if(aaa4[8] < 7)
          {
            uart_send(USART4, setLed1, sizeof(setLed1));
            delay(29);
            uart_send(USART4, setLed2, sizeof(setLed2));
            delay(29);
            uart_send(USART4, setLed3, sizeof(setLed3));
            delay(29);
            uart_send(USART2, setLed4, sizeof(setLed4));
            oid1_Cnd2 = 0;
            aaa4[0] = 0;
            Oid_State1 = 1;
          }
          else
          {
            oid1_Cnd2 = 0;
            aaa4[0] = 0;
            Oid_State1 = 2;
          }
        }
      }
      break;
      case 2:
      {
        rx_offset4 = 0;
        uart_send(USART4, step2, sizeof(step2));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 3;
        }
      }
      break;
      case 3:
      {
        rx_offset4 = 0;
        uart_send(USART4, step3, sizeof(step3));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 4;
        }
      }
      break;
      case 4:
      {
        rx_offset4 = 0;
        uart_send(USART4, step4, sizeof(step4));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 5;
        }
      }
      break;
      case 5:
      {
        rx_offset4 = 0;
        uart_send(USART4, step5, sizeof(step5));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 6;
        }
      }
      break;
      case 6:
      {
        rx_offset4 = 0;
        uart_send(USART4, step6, sizeof(step6));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 7;
        }
      }
      break;
      case 7:
      {
        rx_offset4 = 0;
        uart_send(USART4, step7, sizeof(step7));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 8;
        }
      }
      break;
      case 8:
      {
        rx_offset4 = 0;
        uart_send(USART4, step8, sizeof(step8));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 9;
        }
      }
      break;
      case 9:
      {
        rx_offset4 = 0;
        uart_send(USART4, step9, sizeof(step9));
        delay(10);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9)
        {
          oid1_Cnd2 = 0;
          aaa4[0] = 0;
          Oid_State1 = 10;
        }
      }
      break;
    case 10:
      {
        rx_offset4 = 0;
        uart_send(USART4, step10, sizeof(step10));
        delay(40);
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
        delay(40);
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
        oid1_Cnd2  ;
        if(aaa4[0] == 0xf9 && rx_offset4 > 0x10)
        {
            if(aaa4[1] == 0x32)
            {            
            //            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
            //            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
                if(-1 != parseCode(&aaa4[5], 46))
                
                //parseCode(&ddd[5], 46);
                
                //if(0 == strncmp(&aaa4[5], &ddd[5], 46))
                {
                }
                    LED_Flag[2   test_cnd2] = 2;
                    test_cnd2  ;
                    if(test_cnd2 == 2)
                    {
                        test_cnd2 = 0;
                    }
               /* }
                else if(oid1_Cnd2 > 6)
                {
                    LED_Flag[2   test_cnd2] = 1;
                    test_cnd2  ;
                    if(test_cnd2 == 2)
                    {
                        test_cnd2 = 0;
                    }
                }
                */

             }
            else
            {
                //            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
                //            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
                LED_Flag[2   test_cnd2] = 1;
                test_cnd2  ;
                if(test_cnd2 == 2)
                {
                  test_cnd2 = 0;
                }

            }
        }
     }
        
    oid1_Cnd2 = 0;
    aaa[0] = 0;
    Oid_State1 = 3;
    break;
    
    }
}


/**
  * @brief  The application entry point.
  * @retval int
  */
uint8_t Oid_State = 0;
void oid_discern()
{
     static uint8_t oid1_Cnd = 0;

     
     if(oid1_Cnd > 5)
     {
       LED_Flag[test_cnd] = 1;
        test_cnd  ;
        if(test_cnd == 2)
        {
          test_cnd = 0;
        }
        
        
        oid1_Cnd = 0;
        return;
     }
     if((test_cnd == 0) && (test_cnd2 == 0))
     {
           HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
     }
     else if((test_cnd == 1) && (test_cnd2 == 1))
     {
         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
     }
    if((test_cnd2 < test_cnd) && (test_cnd != 0))
    {
      return;
    }
     
     switch(Oid_State)
    {
    case 0:
      {
        rx_offset = 0;
         HAL_UART_Receive_IT(&huart3, aab, 250);
        
        uart_send(USART3, aaaa, sizeof(aaaa));
        
        delay(50);
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
        //HAL_UART_Receive_IT(&huart2, aaa, 4);
        //uart_read(USART2, aaa, 4);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 1;
        }
      }
      break;
     case 1:
      {
        rx_offset = 0;
        uart_send(USART3, step1, sizeof(step1));
        delay(10);
        //uart_read(USART2, aaa, 4);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          //Temp = aaa[8] << 8   aaa[7];
          if(aaa[8] < 7)
          {
            uart_send(USART3, setLed1, sizeof(setLed1));
            delay(29);
            uart_send(USART3, setLed2, sizeof(setLed2));
            delay(29);
            uart_send(USART3, setLed3, sizeof(setLed3));
            delay(29);
            uart_send(USART3, setLed4, sizeof(setLed4));
            aaa[0] = 0;
            oid1_Cnd = 0;
            Oid_State = 1;
          }
          else
          {
            oid1_Cnd = 0;
            aaa[0] = 0;
            Oid_State = 2;
          }
        }
      }
      break;
      case 2:
      {
        rx_offset = 0;
        uart_send(USART3, step2, sizeof(step2));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 3;
        }
      }
      break;
      case 3:
      {
        rx_offset = 0;
        uart_send(USART3, step3, sizeof(step3));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 4;
        }
      }
      break;
      case 4:
      {
        rx_offset = 0;
        uart_send(USART3, step4, sizeof(step4));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 5;
        }
      }
      break;
      case 5:
      {
        rx_offset = 0;
        uart_send(USART3, step5, sizeof(step5));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 6;
        }
      }
      break;
      case 6:
      {
        rx_offset = 0;
        uart_send(USART3, step6, sizeof(step6));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 7;
        }
      }
      break;
      case 7:
      {
        rx_offset = 0;
        uart_send(USART3, step7, sizeof(step7));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 8;
        }
      }
      break;
      case 8:
      {
        rx_offset = 0;
        uart_send(USART3, step8, sizeof(step8));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 9;
        }
      }
      break;
      case 9:
      {
        rx_offset = 0;
        uart_send(USART3, step9, sizeof(step9));
        delay(10);
        oid1_Cnd  ;
        if(aaa[0] == 0xf9)
        {
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 10;
        }
      }
      break;
    case 10:
      {
        rx_offset = 0;
        uart_send(USART3, step10, sizeof(step10));
        delay(40);
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
        delay(40);
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
        
        oid1_Cnd  ;
        if(aaa[0] == 0xf9 && rx_offset > 0x10)
        {
          if(aaa[1] == 0x32)
          {            
//            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
//            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
            if(-1 != parseCode(&aaa[5], 46))
            {
            }
            
                LED_Flag[test_cnd] = 2;
                test_cnd  ;
                if(test_cnd == 2)
                {
                  test_cnd = 0;
                }
            /*}
            else if(oid1_Cnd > 6)
            {
              LED_Flag[test_cnd] = 1;
                test_cnd  ;
                if(test_cnd == 2)
                {
                  test_cnd = 0;
                }
            }*/
          }
          else
          {
//            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
//            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
            LED_Flag[test_cnd] = 1;
            test_cnd  ;
            if(test_cnd == 2)
            {
              test_cnd = 0;
            }
          }
          
          oid1_Cnd = 0;
          aaa[0] = 0;
          Oid_State = 3;
        }
      }
      break;
    }
}
int main(void)
{

  /* USER CODE BEGIN 1 */
//  static uint32_t Temp = 0;
  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */
  OID_Init();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();
  MX_USART4_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    delay(30);
    
    if(OID_Test_Flag == 0)
    {
        if(0 == HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5))
        {
            for(int i = 0; i < 5; i  )
            {
                LED_Flag[i] = 0;
            }
            OID_Test_Flag = 1;
            
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
            
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
            
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
            
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
            
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
            
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0, GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
            
            test_cnd2 = 0;
            test_cnd  = 0;
            //printf("test start... %d",  Oid_State);
            

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
  

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
        }
    }
    else
    {
        if(LED_Flag[0] != 0 && LED_Flag[1] != 0 && LED_Flag[2] != 0 && LED_Flag[3] != 0)
        {
          
            if(LED_Flag[2] == 1)
            {
               HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
               HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
            }
            else if(LED_Flag[2] == 2)
            {
               HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
               HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
            }
            if(LED_Flag[3] == 1)
            {
               HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
               HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
            }
            else if(LED_Flag[3] == 2)
            {
               HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
               HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
            }
            
          
          
            
            if(LED_Flag[0] == 1)
            {
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
            }
            else if(LED_Flag[0] == 2)
            {
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
            }
            
            if(LED_Flag[1] == 1)
            {
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);
            }
            else if(LED_Flag[1] == 2)
            {
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
            }
            
            if(LED_Flag[2] == 2 && LED_Flag[3] == 2)
            {
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
            }
            else
            {
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);
            }
            
            if(LED_Flag[0] == 2 && LED_Flag[1] == 2)
            {
               HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
            }
            else
            {
               HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
               HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
            }
            
            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0, GPIO_PIN_SET);
            
            OID_Test_Flag = 0;
            
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
            
           HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
  
            Oid_State = 0;
            Oid_State1 = 0;
            //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
        }
        else
        {
            HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
            oid_discern();
            oid_discern4();
            
            
        }
    }
//    USART2->TDR = 0x88;
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief USART2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_USART2_UART_Init(void)
{

  /* USER CODE BEGIN USART2_Init 0 */

  /* USER CODE END USART2_Init 0 */

  /* USER CODE BEGIN USART2_Init 1 */

  /* USER CODE END USART2_Init 1 */
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    //Error_Handler();
  }
  /* USER CODE BEGIN USART2_Init 2 */

  /* USER CODE END USART2_Init 2 */
    /* USART2 interrupt Init */
    HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART2_IRQn);
    
//    NVIC_Config(USART2_IRQn);

}
static void MX_USART3_UART_Init(void)
{

  /* USER CODE BEGIN USART3_Init 0 */

  /* USER CODE END USART3_Init 0 */

  /* USER CODE BEGIN USART3_Init 1 */

  /* USER CODE END USART3_Init 1 */
  huart3.Instance = USART3;
  huart3.Init.BaudRate = 115200;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART3_Init 2 */

  /* USER CODE END USART3_Init 2 */

}

static void MX_USART4_UART_Init(void)
{

  /* USER CODE BEGIN USART2_Init 0 */

  /* USER CODE END USART2_Init 0 */

  /* USER CODE BEGIN USART2_Init 1 */

  /* USER CODE END USART2_Init 1 */
  huart4.Instance = USART4;
  huart4.Init.BaudRate = 115200;
  huart4.Init.WordLength = UART_WORDLENGTH_8B;
  huart4.Init.StopBits = UART_STOPBITS_1;
  huart4.Init.Parity = UART_PARITY_NONE;
  huart4.Init.Mode = UART_MODE_TX_RX;
  huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart4) != HAL_OK)
  {
    Error_Handler();
  }

}
/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
//  NVIC_InitTypeDef NVIC_InitStruct;
  /*Configure GPIO pin Output Level */
//  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);

  /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
  
    /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
  
  /*Configure GPIO pin Output Level */
//  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

  /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  
  
    /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_14;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
  
    /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
  
    /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
  
      /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  
  
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
  
    GPIO_InitStruct.Pin = GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
  GPIO_InitStruct.Pin = GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
        /*Configure GPIO pin : PB12 */
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_14;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
  
    GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);
  
    GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1, GPIO_PIN_RESET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0, GPIO_PIN_SET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
  
  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
  
    GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


  /* Configure PC.13 pin as input floating */
//  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
//  GPIO_InitStruct.Pull = GPIO_NOPULL;
//  GPIO_InitStruct.Pin = GPIO_PIN_5;
//  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* Enable and set EXTI line 4_15 Interrupt to the lowest priority */
//  HAL_NVIC_SetPriority(EXTI4_15_IRQn, 2, 0);
//  HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */

  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(char *file, uint32_t line)
{ 
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

标签: id

实例下载地址

OID实例(源码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警