CFSR; if(exception_code == CFSR_UFSR_DIVIDE_BY_ZERO) printf("Divide By Zero Error \n\r"); }"> CFSR; if(exception_code == CFSR_UFSR_DIVIDE_BY_ZERO) printf("Divide By Zero Error \n\r"); }"> CFSR; if(exception_code == CFSR_UFSR_DIVIDE_BY_ZERO) printf("Divide By Zero Error \n\r"); }">

image.png

image.png

image.png

image.png

#define CFSR_UFSR_DIVIDE_BY_ZERO    (1U<<25)

uint32_t exception_code;

extern uint16_t adc_raw_data[NUM_OF_CHANNELS];

uint32_t pressure_sensor, final_value;

int main(void)
{
    pressure_sensor = 0;

    uart2_tx_init();
    adc_dma_init();

    while(1)
    {
        printf("Value from sensor one : %d \\n\\r", adc_raw_data[0]);
        printf("Value from sensor two : %d \\n\\r", adc_raw_data[1]);

        for(int i = 0; i < 90000; i++) {}

        pressure_sensor = adc_raw_data[0];

        final_value = 10000 / pressure_sensor;
    }
}

void HardFault_Handler(void)
{
    exception_code = SCB->CFSR;

    if(exception_code == CFSR_UFSR_DIVIDE_BY_ZERO)
        printf("Divide By Zero Error \\n\\r");
}

SWV

#define PIN0    (1U<<0)

volatile uint32_t pwm_sig;

int main(void)
{
    /*Init pwm at pa0 and pa1*/
    tim2_pa0_pa1_pwm_init();

    /*Systick Init*/
    systick_5kHz_interrupt();

    tim2_pa0_pa1_pwm_set_dutycycle(1, 30);

    while(1)
    {

    }
}

static void systick_callback(void)
{
    pwm_sig = (uint32_t)(GPIOA->IDR & PIN0);
}

void SysTick_Handler(void)
{
    systick_callback();
}

image.png

image.png

image.png

or

image.png

Measuring the Execution Time of an Algorithm

image.png