/*==============================================================================
 * DESCRIPTION:
 * @param
 * @return
 * @precondition
 * @postcondition
 * @caution
 * @notes
 *============================================================================*/
uint8_t OT_GPIO_bursts_to_ignore(void) {
  // Interpret DIP2, DIP1, DIP0 as a binary value
  uint8_t retval = 0;
  if (RESET != GPIO_ReadInputPin(DIP0_PORT, DIP0_PIN)) {
    retval |= 0x01;
  }
  if (RESET != GPIO_ReadInputPin(DIP1_PORT, DIP1_PIN)) {
    retval |= 0x02;
  }
  if (RESET != GPIO_ReadInputPin(DIP2_PORT, DIP2_PIN)) {
    retval |= 0x04;
  }
  return retval;
}
Beispiel #2
0
/*
名称: void Read_Data(void)
功能: 发送数据
形参: 无
返回: 读取到的数据
说明:D0~D3 = COM1~COM4 = 0b0000 D0 D1 D2 D3
*/
uint8_t Read_Data(void)
{
  uint8_t i, data = 0;
  
  DATA_IN;
  WR_1;
  for(i = 0; i < 4; i++)
  {  
    RD_0;
    data <<= 1;
    if(GPIO_ReadInputPin(GPIOB, GPIO_PIN_5)) 
      data++;
    
    RD_1;
  }
 
  return data;
}
//****************读取HC165数据
void  Read165(u8 *rdata)
{
    u8 num=0;
    GPIO_WriteLow(GPIOD,H165_SH);
    asm("nop");
    asm("nop");
    GPIO_WriteHigh(GPIOD,H165_SH);
    asm("nop");
    for(num=0; num<4; num++)
    {
        for(u8 i=0; i<8; i++)
        {
            *(rdata+num)<<=1;
            if(GPIO_ReadInputPin(GPIOD,H165_DATA)) {
                *(rdata+num) += 1;
            }
            GPIO_WriteLow(GPIOD,H165_CLK);
            asm("nop");
            GPIO_WriteHigh(GPIOD,H165_CLK);       //上升沿
            asm("nop");
        }
    }
}
Beispiel #4
0
uint8_t SPIReadByte(void)
{
  uint8_t Data = 0;
#ifdef USE_SPI_MODULE
  

  /*!< Wait until the transmit buffer is empty */
  while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET)
  {}
  /*!< Send the byte */
  SPI_SendData(SD_DUMMY_BYTE);

  /*!< Wait until a data is received */
  while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET)
  {}
  /*!< Get the received data */
  Data = SPI_ReceiveData();
#else
  
  uint8_t i;
  GPIO_WriteLow(ENC_SCK_PORT,ENC_SCK_PIN);
  for(i=0;i<8;i++)
  {	
	GPIO_WriteHigh(ENC_SCK_PORT,ENC_SCK_PIN);
	Data <<=1;
        
        if(0 != GPIO_ReadInputPin(ENC_MISO_PORT,ENC_MISO_PIN)) 
          Data |= 0x01;
	GPIO_WriteLow(ENC_SCK_PORT,ENC_SCK_PIN);
  }
  
  
#endif 
  /*!< Return the shifted data */
  return Data;
  
}
Beispiel #5
0
int main( void )
{
  uint32_t Address_EEPROM=EEPROM_START+4;
  uint32_t n0=0;
  uint32_t n1=0;
  uint32_t k0=0;
  uint32_t k1=0;
  uint8_t ERR=2;
  uint8_t rr=0;

  CLK_Init();
  UART_Init();
  GP_IO_Init();
  TIMR2_Init();
  FLASH_EEPROM_Unlock();
  A_D_C_Init();

 //enableInterrupts(); //Разрешаем прерывания.

 while(1)
 {
   /*
   if(GPIO_ReadInputPin(GPIOC, GPIO_PIN_2)==0)
   {
      GPIO_WriteLow(GPIOB, GPIO_PIN_6);
      delay_ms(50);
      GPIO_WriteHigh(GPIOB, GPIO_PIN_6);
      while(GPIO_ReadInputPin(GPIOC, GPIO_PIN_2)==0){delay_ms(10);};
   };
   
   if(GPIO_ReadInputPin(GPIOE, GPIO_PIN_5)==0)
   {
      GPIO_WriteLow(GPIOB, GPIO_PIN_7);
      delay_ms(50);
      GPIO_WriteHigh(GPIOB, GPIO_PIN_7);
      while(GPIO_ReadInputPin(GPIOE, GPIO_PIN_5)==0){delay_ms(10);};
   };
   */
   if(GPIO_ReadInputPin(GPIOC, GPIO_PIN_1)==0)
   {
      ERR=0;
      GPIO_WriteHigh(GPIOB, GPIO_PIN_5);
      GPIO_WriteHigh(GPIOB, GPIO_PIN_6);
      while(GPIO_ReadInputPin(GPIOC, GPIO_PIN_1)==0){delay_ms(10);};
   };
   
  if(ERR==0)
  {
    GPIO_WriteLow(GPIOB, GPIO_PIN_7);
    //delay_ms(6);              
    FLASH_ProgramWord(Address_EEPROM, n0);
    //FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
    GPIO_WriteHigh(GPIOB, GPIO_PIN_7);
    delay_ms(4);
    n1 = FLASH_ReadWord(Address_EEPROM);
    if(n1!=n0)
    {
      ERR=1;
    }else
    {
      n0++;
      GPIO_WriteReverse(GPIOF, GPIO_PIN_4);
    };
    
  }else if(ERR==1)
  {
    GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
    delay_ms(100);
  }else if(ERR==2)
  {
    GPIO_WriteReverse(GPIOB, GPIO_PIN_6);
    delay_ms(100);
  };
   /*
  GPIO_WriteLow(GPIOB, GPIO_PIN_6);
  delay_ms(50);
  GPIO_WriteHigh(GPIOB, GPIO_PIN_6);
  
  GPIO_WriteLow(GPIOB, GPIO_PIN_7);
  delay_ms(50);
  GPIO_WriteHigh(GPIOB, GPIO_PIN_7);
   
  GPIO_WriteLow(GPIOB, GPIO_PIN_5);
  delay_ms(50);
  GPIO_WriteHigh(GPIOB, GPIO_PIN_5);
  delay_ms(1000); 
*/

 }
 
 //return 0;
}
Beispiel #6
0
// 初始化GPIO
void system_config_gpio_config(void)
{
    // STM8S105K6 没有PB6 PB7 所以使用 PB2 PB3代替
    GPIO_DeInit(GPIOB);
    GPIO_DeInit(GPIOC);
    GPIO_DeInit(GPIOD);
    // GPIO_DeInit(GPIOE);

    // 中断引脚 没用到中断 只用到了电平判断
    // GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT);          
    GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_IT);         // GIO0
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_ONLY); 

    // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY);

    GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); // CE SX1278 - RST
    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); // CS
    GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);  // SCK
    GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); // SDI
    GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);      // SDO

    // 插座状态 和 插座继电器控制
    GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); // 是否收到信号 状态
    GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); // 继电器  必须设置为低电平 否则会一上电 继电器就是开的状态
    
    GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_PU_IT);
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL); // EXTI_SENSITIVITY_RISE_ONLY); 
    // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_RISE_ONLY);
    
#if 0
    GPIO_DeInit(GPIOB);
    GPIO_DeInit(GPIOC);
    GPIO_DeInit(GPIOD);
    // GPIO_DeInit(GPIOE);

    // 中断引脚 没用到中断 只用到了电平判断
    // GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT);          
    GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_IN_PU_IT);         // GIO0
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_ONLY); 

    // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY);

    GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); // CE SX1278 - RST
    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); // CS
    GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);  // SCK
    GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); // SDI
    GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);      // SDO

    // 插座状态 和 插座继电器控制
    GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); // 是否收到信号 状态
    GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST); // 继电器  必须设置为低电平 否则会一上电 继电器就是开的状态

    // GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);      // 按键 每按一次 翻转一次
    GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_IT);
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL); // EXTI_SENSITIVITY_RISE_ONLY); 
    // EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_RISE_ONLY);

    //GPIO_WriteHigh(GPIOB, GPIO_PIN_6);
    //GPIO_WriteLow(GPIOB, GPIO_PIN_6);
    
    GPIO_WriteHigh(GPIOD, GPIO_PIN_0);
    GPIO_WriteLow(GPIOD, GPIO_PIN_0);
    
    GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);      // SDO
    while(1)
    {
        if (GPIO_ReadInputPin( GPIOB, GPIO_PIN_7 ))
        {
            printf("a");
        }           
        else        
        {
            printf("b");
        }
    }
#endif
    
#if 0    
    GPIO_DeInit(GPIOA);
    GPIO_DeInit(GPIOB);
    GPIO_DeInit(GPIOC);    
    GPIO_DeInit(GPIOD);
    GPIO_DeInit(GPIOE);    
    
    GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //RESET

    GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);  //SCK    
    GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);      //SDO
    GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); //SDI
    GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //CS
   
    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);         //GIO0
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC,EXTI_SENSITIVITY_RISE_ONLY); // Interrupt on Rising edge only
    EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY);
   
    GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); // 继电器
    GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST); // 是否收到信号
    GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);      // 按键 每按一次 翻转一次
#endif
}
Beispiel #7
0
void main(void)
{
  uint8_t i;
  BitStatus bytes;
  CLK_HSICmd(ENABLE);//开始内部高频RC
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//不分频  16MHz
  /* Initialize I/Os in Output Mode */
  init_usart1();   // 输入判断
  GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);// 输出 模式 用于Trag 
  GPIO_Init(GPIOA, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);// 输出 模式 用于Trag 
  GPIO_WriteHigh(GPIOA, GPIO_PIN_2);
  GPIO_Init(GPIOA,GPIO_PIN_1,GPIO_MODE_IN_PU_NO_IT);       // 输入包含  上拉  中断 
//  GPIO_Init(GPIOA,GPIO_PIN_1,GPIO_MODE_IN_PU_IT); 
//  EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA,EXTI_SENSITIVITY_RISE_ONLY); 
  InitADC();
  enableInterrupts();
  flageExtiA=0;  
  sendBuff[0]=DEVICE_ID;
  sendBuff[3]=0xff;
  sendBuff[4]=0xff;
  sendBuff[5]=0xFF;
  sendBuff[6]=0xA0;
  sendBuff[7]=0xFA; 

  while (1)
  {
     
    bytes=GPIO_ReadInputPin(GPIOA,GPIO_PIN_1);
    if(bytes==RESET && flageExtiA==0)    
    {
        flageExtiA=1;  
        GPIO_WriteReverse(GPIOA,GPIO_PIN_3);  
        for(i=0;i<8;i++)
        {  
          Send(sendBuff[i]);
         }
    }else if(bytes!=RESET)
    {
      flageExtiA=0;
    }  
    datas=readADCs();
  sendBuff[5]=0;
  sendBuff[1]=(uint8_t)(datas&0xff);
  sendBuff[2]=(uint8_t)((datas>>8)&0xff);
  for(i=0;i<5;i++)
  {
    sendBuff[5]+=sendBuff[i];
  }      
//    datas=datas;
//    bytes=GPIO_ReadInputPin(GPIOA,GPIO_PIN_1);
//    if(flageExtiA!=1)
//    {
//      sendBuff[1]=(uint8_t)(datas&0xff);
//      sendBuff[2]=(uint8_t)((datas>>8)&0xff);
//      sendBuff[5]=0;
//      for(i=0;i<5;i++)
//      {
//        sendBuff[5]+=sendBuff[i];
//      }
//    }
  }
  
}
Beispiel #8
0
static BitStatus data_in()
{
  GPIO_Init(LCDDIG_PORT, (GPIO_Pin_TypeDef)(LCDDIG_DATA_PIN ), GPIO_MODE_IN_FL_NO_IT);
  return GPIO_ReadInputPin(LCDDIG_PORT,(GPIO_Pin_TypeDef)(LCDDIG_DATA_PIN ));
}
Beispiel #9
0
void main(void)
{    
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  
  Delay_Init();
  RS485_Init(115200);
#if DEBUG
  //  UART_Init(115200);
#endif
  SRF05_Init();
  SRF05_AutoPoolEnable();
  
  //flash_read_buffer((char *)&my_data, sizeof (struct flash_data));
  my_data.id = 0x21;
  //  UART_SendByte(0x21, HEX);
  //  RS485_SendStr("Hello world.\n");
  
  // LED run
  GPIO_Init(LED_RUN_PORT, LED_RUN_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
  GPIO_WriteHigh(LED_RUN_PORT, LED_RUN_PIN);
  
  while (1)
  {
    if (Millis() - tmp_time > 500)
    {
      LED_RUN_TOGGLE;
      tmp_time = Millis();
			
#if DEBUG
			RS485_DIR_OUTPUT;
			RS485_SendStr("\n");
			RS485_SendFloat(SRF05_GetDistance());
			RS485_DIR_INPUT;
#endif
    }
    
    if (GPIO_ReadInputPin(RS485_SEL_PORT, RS485_SEL_PIN) == RESET)
    {
      if (RS485_Available() >= 8)
      {
        //      memset(packet_buff, 0, PACKET_BUFFER_SIZE);
        packet_len = RS485_GetData(packet_buff);
        packet = (struct Packet *)packet_buff;
        if (packet_len < 4 + getTypeLength(packet->data_type))
        {
          // not enough length
        }
        else
        {
          switch (packet->cmd)
          {
          case CMD_QUERY:
            if (packet->id == my_data.id)
            {
              LED_RUN_TOGGLE;
              
              tmp_distance = SRF05_GetDistance();
              packet->data_type = TYPE_FLOAT | BIG_ENDIAN_BYTE_ORDER;
              memcpy(packet->data, &tmp_distance, getTypeLength(packet->data_type));
              packet->data[getTypeLength(packet->data_type)] = checksum((char *)packet);
              RS485_DIR_OUTPUT;
              RS485_SendData(packet_buff, 4 + getTypeLength(packet->data_type));
              RS485_DIR_INPUT;
            }
            else if (IS_BROADCAST_ID(packet->id))
            {
              //              if (GPIO_ReadInputPin(RS485_SEL_PORT, RS485_SEL_PIN) == RESET)
              //              {
              LED_RUN_TOGGLE;
              
              packet->id = my_data.id;
              tmp_distance = SRF05_GetDistance();
              packet->data_type = TYPE_FLOAT | BIG_ENDIAN_BYTE_ORDER;
              memcpy(packet->data, &tmp_distance, getTypeLength(packet->data_type));
              packet->data[getTypeLength(packet->data_type)] = checksum((char *)packet);
              RS485_DIR_OUTPUT;
              RS485_SendData(packet_buff, 4 + getTypeLength(packet->data_type));
              RS485_DIR_INPUT;
              //              }
            }
            else
            {
              // not own id
            }
            break;
          case CMD_CONTROL:
            // by default, this mode used only for setting id
            // the id stored on the first bytes of data bytes
            if (IS_BROADCAST_ID(packet->id))
            {
              LED_RUN_TOGGLE;
              if (IS_SENSOR_ULTRA_SONIC(packet->data[0]))
              {
                my_data.id = packet->data[0];
              }
            }
            break;
          default:
            break;
          }
          
          RS485_Flush();
        }
      }
    }
    else
    {
      RS485_Flush();
    }
		
		SRF05_ProcessTrigger();
  }
}