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

Dependencies:   RemoteIR

Revision:
117:cc2a98cdd8fa
Parent:
116:82faef102371
Child:
118:88f30fadf08f
--- a/main.cpp	Mon Apr 13 14:31:17 2020 +0000
+++ b/main.cpp	Wed Apr 15 07:17:28 2020 +0000
@@ -1,24 +1,82 @@
 #include "mbed.h"
 
-RawSerial pc(PA_2, PA_3, 115200); // USART2
-DigitalOut led(LED2);
+int interval;
+
+void led2_init(void);
+void button_init(void);
+void led2_toggle(void);
+
+void button_Handler(void);
+
+int main() {
 
-void rx_handler(void) {
-    int ch = pc.getc();
-            pc.putc(ch);
-            if(ch == 0x0D) {
-                while(!pc.writeable());
-                pc.putc(0x0A);
-            }
+    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
 }
 
-int main() {
-    pc.attach(&rx_handler);
-    pc.printf("\r\n Welcome to UART Lab_2_2!\r\n");
-    pc.printf("Enter characters..\r\n");
+
+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();
     
-    while(true) {
-        ThisThread::sleep_for(500);
-        led = !led;
-    }
+    RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
+//    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
+    SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI13_PC;
+    
+    GPIOC->MODER &= ~(GPIO_MODER_MODER13); // input mode for PC13
+    GPIOC->PUPDR &= ~(GPIO_PUPDR_PUPDR13);
+
+    EXTI->RTSR |= EXTI_RTSR_TR13;
+    EXTI->IMR |= EXTI_IMR_MR13;
+    
+    NVIC_SetPriority(EXTI15_10_IRQn, 1);
+    NVIC_EnableIRQ(EXTI15_10_IRQn);
+    
+    
+}
+
+void button_Handler(void){
+    
+    if(interval < 2000) {
+        interval *= 2;
+    } else {
+        interval = 500;
+    }    
+    
+    EXTI->PR = (0b1 << 13);
 }
\ No newline at end of file