⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io_main.c

📁 用 Hitex 工具软件开发 stm32 的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
            {
               ACTIV_IO_config_B[i] |= 0xC0;
            }
         }     
      }
   
   }
}


   
void CheckPorts(void)
{
   u8 i;

   
   for(i=0;i<6;i++)
      Port_In[i]=0;
      
    
   for(i=0; i < 8; i++)
   {
      if((GPIOA->CRL & ((u32)0x3 << i*4)) != 0x00)
         Port_In[0] |= (u8)GPIOA->ODR & ((u8)0x01 << i); 
      else
         Port_In[0] |= (u8)GPIOA->IDR & ((u8)0x01 << i);

      if((GPIOA->CRH & ((u32)0x3<<i*4)) != 0x00)
         Port_In[1] |= ((u8)(GPIOA->ODR>>8)) & ((u8)0x01 << i);
      else
         Port_In[1] |= ((u8)(GPIOA->IDR>>8)) & ((u8)0x01 << i);
   }   

   
   for(i=0; i < 8; i++)
   {
      if((GPIOB->CRL & ((u32)0x3<<i*4)) != 0x00)
         Port_In[2] |= (u8)GPIOB->ODR & (0x01 << i); 
      else
         Port_In[2] |= (u8)GPIOB->IDR & (0x01 << i);
    
      if((GPIOB->CRH & ((u32)0x3<<i*4)) != 0x00)
         Port_In[3] |= ((u8)(GPIOB->ODR>>8)) & (0x01 << i);
      else
         Port_In[3] |= ((u8)(GPIOB->IDR>>8)) & (0x01 << i);
   }
  
  
   for(i=0; i < 8; i++)
   {
      if((GPIOC->CRL & ((u32)0x3<<i*4)) != 0x00)
         Port_In[4] |= (u8)GPIOC->ODR & (0x01 << i); 
      else
         Port_In[4] |= (u8)GPIOC->IDR & (0x01 << i);
   
      if((GPIOC->CRH & ((u32)0x3<<i*4)) != 0x00)
         Port_In[5] |= ((u8)(GPIOC->ODR>>8)) & (0x01 << i);
      else
         Port_In[5] |= ((u8)(GPIOC->IDR>>8)) & (0x01 << i);
   }  


   
}
u32 temp_odr;
void SetPorts(void)
{
   u8 i;
   temp_odr = GPIOB->ODR;
   
   for(i=0; i < 8; i++)
   {
      if((GPIOB->CRL & ((u32)0x3<<i*4)) != 0x00)
      {
         temp_odr &= ~((u8)0x01 << i);
         temp_odr |= Port_Out[2] & ((u8)0x01 << i);
      }
      if((GPIOB->CRH & ((u32)0x3<<i*4)) != 0x00)
      {
         temp_odr &= ~((u16)0x01 << (i+8));
         temp_odr |= (Port_Out[3] & ((u8)0x01 << (i))) << 8;
      }
   }
   GPIOB->ODR = (u32)temp_odr;  
   
   temp_odr = GPIOC->ODR;
   for(i=0; i < 8; i++)
   {
      if((GPIOC->CRL & ((u32)0x3<<i*4)) != 0x00)
      {
         temp_odr &= ~((u8)0x01 << i);
         temp_odr |= Port_Out[4] & ((u8)0x01 << i);
      }
      if((GPIOC->CRH & ((u32)0x3<<i*4)) != 0x00)
      {
         temp_odr &= ~((u16)0x01 << (i+8));
         temp_odr |= (Port_Out[5] & ((u8)0x01 << (i))) << 8;
      }
   } 
   GPIOC->ODR = (u32)temp_odr;  

}



void ADC_init(void)
{
   /**Init ADC1*/
   ADC_DeInit(ADC1);
   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
   ADC_InitStructure.ADC_NbrOfChannel = 1;
   ADC_Init(ADC1, &ADC_InitStructure);
   
   adc_init_done = 0x01;
}


u16 GetADC(u8 channel)
{
   /*Get ADC Value from channel*/
   u16 value;
   
   switch (channel)
   {
      case 8:
         if((GPIOB->CRL & 0xF) != 0x00)
            return 0;
         break;
      case 9:
         if((GPIOB->CRL & 0xF0) != 0x00)
            return 0;
         break;
      case 10:
         if((GPIOC->CRL & 0xF) != 0x00)
            return 0;      
         break;
      case 11:
         if((GPIOC->CRL & 0xF0) != 0x00)
            return 0;   
         break;   
      case 12:
         if((GPIOC->CRL & 0xF00) != 0x00)
            return 0;         
         break;
      case 13:
         if((GPIOC->CRL & 0xF000) != 0x00)
            return 0;           
         break;
      case 15:
         if((GPIOC->CRL & 0xF00000) != 0x00)
            return 0;        
         break;
      default:
         return 0;
   }
   
   ADC_RegularChannelConfig(ADC1, channel,  1, ADC_SampleTime_55Cycles5);
                          
   ADC_Cmd(ADC1, ENABLE);
   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
   
   while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
   value =  ADC_GetConversionValue(ADC1);
   
   ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
   ADC_Cmd(ADC1, DISABLE);
   
   return value;
}

void CommIO (void)
{
   CommTask->CommandNew = FALSE;
   switch (CommTask->Command) {
    case Cmd_Get_IO_FktA :  break;
    case Cmd_Set_IO_FktA :  break;
    
    case Cmd_Get_IO_FktB : /* GUI   Status request of the IO settings */

                           Get_IO_Configuration_B();
                           protocol_SendFrame (Rep_Info_IO_FktB, (u8 *)ACTIV_IO_config_B,8);

                           break;
    case Cmd_Set_IO_FktB :     /* 3 GUI Settings for the IOs (In/out,ADC,PWM) */
                           SendTask->ReplyNew = FALSE;
                           CommTask->Command = Cmd_Idle;  /* none */
                           CommTask->DataLength = 0;
                           IO_config_B[0] = CommTask->Data[0];
                           IO_config_B[1] = CommTask->Data[1];
                           IO_config_B[2] = CommTask->Data[2];
                           IO_config_B[3] = CommTask->Data[3];
                           IO_config_B[4] = CommTask->Data[4];
                           IO_config_B[5] = CommTask->Data[5];
                           IO_config_B[6] = CommTask->Data[6];
                           IO_config_B[7] = CommTask->Data[7];
                           IO_Configuration_B();/* Call IO-function */
                           break;
    case Cmd_Get_IO_FktC : /* GUI   Status request of the IO settings */
                           Get_IO_Configuration_C();
                           protocol_SendFrame (Rep_Info_IO_FktC, (u8 *)ACTIV_IO_config_C,8);

                           break;
    case Cmd_Set_IO_FktC :     /* 3 GUI Settings for the IOs (In/out,ADC,PWM) */
                           SendTask->ReplyNew = FALSE;
                           CommTask->Command = Cmd_Idle;  /* none */
                           CommTask->DataLength = 0;
                           IO_config_C[0] = CommTask->Data[0];
                           IO_config_C[1] = CommTask->Data[1];
                           IO_config_C[2] = CommTask->Data[2];
                           IO_config_C[3] = CommTask->Data[3];
                           IO_config_C[4] = CommTask->Data[4];
                           IO_config_C[5] = CommTask->Data[5];
                           IO_config_C[6] = CommTask->Data[6];
                           IO_config_C[7] = CommTask->Data[7];
                           IO_Configuration_C();/* Call IO-function */
                           break;
    case Cmd_Get_ADC :     /* 0   GUI   Get ADC */
                           if(adc_init_done == 0)
                           {
                              ADC_init();
                           }
                           LastADValue = GetADC(CommTask->Data[0]);
                           SendTask->Data[0] = CommTask->Data[0];//(u8)(LastADValue>>8);
                           SendTask->Data[1] = (u8)LastADValue;
                           SendTask->Data[2] = (u8)(LastADValue>>8);
                           protocol_SendFrame (Rep_Info_ADC, (u8 *)SendTask->Data,3);
                           break;
                           
    case Cmd_Get_EXTInt :  break;
    case Cmd_Set_EXTInt :  break;
    
    case Cmd_Get_PORT :    /* 0   GUI   Request Input ports */
                           CheckPorts();
                           protocol_SendFrame (Rep_Info_PORT, (u8 *)Port_In,6);
                           break;
    case Cmd_Set_PORT :    /* 1   GUI   Set Output ports */
                           SendTask->ReplyNew = FALSE;
                           CommTask->Command = Cmd_Idle;  /* none */
                           CommTask->DataLength = 0;
                           Port_Out[0] = CommTask->Data[0];
                           Port_Out[1] = CommTask->Data[1];
                           Port_Out[2] = CommTask->Data[2];
                           Port_Out[3] = CommTask->Data[3];
                           Port_Out[4] = CommTask->Data[4];
                           Port_Out[5] = CommTask->Data[5];
                           SetPorts();
                           break;
                           
    case Cmd_Get_Alternate :  break;
    case Cmd_Set_Alternate :  break;
    
    default :
                           protocol_SendError (Err_NotImplemented);
                           break;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -