AnsweredAssumed Answered

Problem with switch/case

Question asked by Jakub B on Apr 3, 2018
Latest reply on Apr 6, 2018 by AvaTar

Hi

I got a problem with a switch in my MCU. I use custom board with STM32F030C8T6.

This here is part of my program:

void rozkaz3(void) {
     switch(bufor[3]){

        case 0:
                            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);        
                            HAL_Delay(1000);
                            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
                            break;

        case 1:   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);        
                            HAL_Delay(1000);
                            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
                            break;
        case 2:
                            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_RESET);
                            HAL_Delay(1000);
                            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET);
                            break;
        case 3:
                            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
                            HAL_Delay(1000);
                            HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);
                            break;

        case 5:
                            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
                            HAL_Delay(1000);
                            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
                            break;
        case 6:
                            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
                            HAL_Delay(1000);
                            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
                            break;
        case 7:
        case 4:
        default:
                            break;
        case 12:
                            NVIC_SystemReset();
                            break;

it switches on and off outputs i chose based on number. My board  has 6 outputs. Case 4 and case 7 are not configured and not connected.

If i order case 0,1,2,3,5,6,11,12 all works well.

If i order case 4 or 7 my program works on case 0 then case 4/7. If i delete case 0 it will work on case 1 and  then case 4/7 and so on.

It works first available case in switch then case i ordered.

Now if i change only this:

 

        case 7:
        case 4:
        default:

                            HAL_Delay(1000);
                            break;

I works ok.

And with HAL_Delay(1) its not working again.

 

Whats happening and how to make it work right without HAL_Delay ?

Outcomes