This is a very simple guide, reviewing the steps required to get Blinky working on an Mbed OS platform.

Dependencies:   RemoteIR

main.cpp

Committer:
sb8718
Date:
2020-04-09
Revision:
112:5a7629ace1c4
Parent:
111:15fa6baff793
Child:
113:be6b329fe2d5

File content as of revision 112:5a7629ace1c4:

#include "mbed.h"


int interval;

void led2_init(void);
void button_init(void);
void led2_toggle(void);

void button_Handler(void);


int main() {

    led2_init();
    button_init();

    NVIC_SetVector(EXTI15_10_IRQn,(uint32_t)button_Handler);

    interval = 500;

    while(true) {
        
        led2_toggle();
        
        ThisThread::sleep_for(interval);
    }
}
void led2_init(void) {
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIOA->MODER &= ~(0b11<< (5 * 2)); // reset PA5 mode
    GPIOA->MODER |= 0b01<< (5 * 2); // 01 - write mode
}


void led2_toggle(void){
    
    uint32_t isOn;
    
    isOn = GPIOA->IDR & (0b1 << 5); //recent write value
    
    if(isOn > 0) {
        
        GPIOA->BSRR &= ~(0b1 << 5); //set 0 on PA_5_5
        GPIOA->BSRR |= 0b1<< (5 + 16); // set 1 on PA5_21
        
    } else {
        
        GPIOA->BSRR |= 0b1 << 5; // set 1 on PA5_5
        GPIOA->BSRR &= ~(0b1 << (5 + 16)); // set 0 on PA5_21
    }
}


void button_init(void) {
    
    __HAL_RCC_GPIOC_CLK_ENABLE();
    GPIOC->MODER &= ~(0b11<< (13 * 2)); // reset PC13 mode
    GPIOC->MODER |= 0b00<< (13 * 2); // 00 - read mode
    
    SYSCFG->EXTICR[3] &= ~(0b1111 << 4);
    SYSCFG->EXTICR[3] |= (0b0010 << 4);
    
    EXTI->IMR |= (0b1 << 13);
    EXTI->FTSR |= (0b1 << 13);
    
}

void button_Handler(void){
    
    if(interval < 2000) {
        interval *= 2;
    } else {
        interval = 500;
    }    
    
    EXTI->PR |= (0b1 << 13);
}