i want to map in0 to out0

Guest #4290868
Rate this post
useful
not useful
#include "stm32f0xx.h"
#include "stm32f0308_Discovery.h"

#define in0 GPIO_Pin_0
#define in1 GPIO_Pin_1
#define in2 GPIO_Pin_2
#define in3 GPIO_Pin_3
#define in4 GPIO_Pin_4
#define in5 GPIO_Pin_5
#define in_GPIO GPIOA


#define out0 GPIO_Pin_1
#define out1 GPIO_Pin_1
#define out2 GPIO_Pin_2
#define out3 GPIO_Pin_3
#define out4 GPIO_Pin_4
#define out5 GPIO_Pin_5
#define out_GPIO GPIOC

void TM_Delay_Init(void);
void TM_DelayMillis(uint32_t millis);
void TM_DelayMillis1(uint32_t millis);
void TM_DelayMillis2(uint32_t millis);

GPIO_InitTypeDef       GPIO_InitStructure ;

uint32_t multiplier;


int main(void)
{
          SystemInit();
          SystemCoreClockUpdate();
          TM_Delay_Init();


        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

    /* Configure PA in input mode */
      GPIO_InitStructure.GPIO_Pin = 
((GPIO_Pin_0)|(GPIO_Pin_1)|(GPIO_Pin_2)|(GPIO_Pin_3)|(GPIO_Pin_4)|(GPIO_ 
Pin_5))  ;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;              // 
enable internal Pullup resistors on the GPIO pins
      GPIO_Init(GPIOA, &GPIO_InitStructure);


  /*configure PC in output mode */

  GPIOC->MODER  |= 
((GPIO_MODER_MODER0_0)|(GPIO_MODER_MODER1_0)|(GPIO_MODER_MODER2_0)|(GPIO 
_MODER_MODER3_0)|(GPIO_MODER_MODER4_0)|(GPIO_MODER_MODER5_0))  ;
  //GPIOC-> GPIO_MODER_MODER8_0 = 0x01;
  GPIOC->OTYPER &= 
~((GPIO_OTYPER_OT_0)|(GPIO_OTYPER_OT_1)|(GPIO_OTYPER_OT_2)|(GPIO_OTYPER_ 
OT_3)|(GPIO_OTYPER_OT_4)|(GPIO_OTYPER_OT_5))  ;
  //GPIOC->OTYPER = 0x00;
  GPIOC->OSPEEDR |= 
((GPIO_OSPEEDER_OSPEEDR0)|(GPIO_OSPEEDER_OSPEEDR1)|(GPIO_OSPEEDER_OSPEED 
R2)|(GPIO_OSPEEDER_OSPEEDR3)|(GPIO_OSPEEDER_OSPEEDR4)|(GPIO_OSPEEDER_OSP 
EEDR5));
  //GPIOC->OSPEEDR = 0x00;
  GPIOC->PUPDR &= 
~((GPIO_PUPDR_PUPDR0)|(GPIO_PUPDR_PUPDR1)|(GPIO_PUPDR_PUPDR2)|(GPIO_PUPD 
R_PUPDR3)|(GPIO_PUPDR_PUPDR4)|(GPIO_PUPDR_PUPDR5));


  while(1)
  {
    if(GPIO_ReadInputDataBit(GPIOA, (GPIO_Pin_0|1|2|3|4|5==1)))
    {
      GPIO_SetBits(out_GPIO,(out0)|(out1)|(out2)|(out3)|(out4)|(out5));
        TM_DelayMillis(7);
        GPIO_ResetBits(out_GPIO,(out0)|(out1)|(out2)|(out3)|(out4)|(out5));

      while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0|1|2|3|4|5)==1)
        {

          GPIO_SetBits(out_GPIO,(out0)|(out1)|(out2)|(out3)|(out4)|(out5));
          TM_DelayMillis1(3);
          GPIO_ResetBits(out_GPIO,(out0)|(out1)|(out2)|(out3)|(out4)|(out5));
          TM_DelayMillis2(22);

        }
    }
  }
}

void TM_DelayMillis(uint32_t millis) {
    /* Multiply millis with multipler */
    /* Substract 10 */
    millis = 100  millis  multiplier - 10;
    /* 4 cycles for one loop */
    while (millis--);
}

void TM_DelayMillis1(uint32_t millis) {
    /* Multiply millis with multipler */
    /* Substract 10 */
    millis = 1  millis  multiplier - 10;
    /* 4 cycles for one loop */
    while (millis--);
}

void TM_DelayMillis2(uint32_t millis) {
    /* Multiply millis with multipler */
    /* Substract 10 */
    millis = 1  millis  multiplier - 10;
    /* 4 cycles for one loop */
    while (millis--);
}



void TM_Delay_Init(void) {
    RCC_ClocksTypeDef RCC_Clocks;

    /* Get system clocks */
    RCC_GetClocksFreq(&RCC_Clocks);

    /* While loop takes 4 cycles */
    /* For 1 us delay, we need to divide with 4M */
    multiplier = RCC_Clocks.HCLK_Frequency / 4000000;
}



NOTE:in this i have to make only one pin high if i make high that pin 
i.e when in press in0 only out0 should be high all other pins should be 
low vice versa
Attached files:

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now