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

Dependencies:   RemoteIR

Committer:
sb8718
Date:
Thu Apr 09 09:32:04 2020 +0000
Revision:
112:5a7629ace1c4
Parent:
111:15fa6baff793
Child:
113:be6b329fe2d5
lab1-7 ing2;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sb8718 109:5274dd9bebe1 1 #include "mbed.h"
sb8718 109:5274dd9bebe1 2
sb8718 111:15fa6baff793 3
sb8718 111:15fa6baff793 4 int interval;
sb8718 111:15fa6baff793 5
sb8718 109:5274dd9bebe1 6 void led2_init(void);
sb8718 109:5274dd9bebe1 7 void button_init(void);
sb8718 109:5274dd9bebe1 8 void led2_toggle(void);
sb8718 109:5274dd9bebe1 9
sb8718 111:15fa6baff793 10 void button_Handler(void);
sb8718 111:15fa6baff793 11
sb8718 111:15fa6baff793 12
sb8718 109:5274dd9bebe1 13 int main() {
sb8718 109:5274dd9bebe1 14
sb8718 109:5274dd9bebe1 15 led2_init();
sb8718 109:5274dd9bebe1 16 button_init();
sb8718 109:5274dd9bebe1 17
sb8718 111:15fa6baff793 18 NVIC_SetVector(EXTI15_10_IRQn,(uint32_t)button_Handler);
sb8718 111:15fa6baff793 19
sb8718 111:15fa6baff793 20 interval = 500;
sb8718 111:15fa6baff793 21
sb8718 109:5274dd9bebe1 22 while(true) {
sb8718 109:5274dd9bebe1 23
sb8718 111:15fa6baff793 24 led2_toggle();
sb8718 109:5274dd9bebe1 25
sb8718 109:5274dd9bebe1 26 ThisThread::sleep_for(interval);
sb8718 109:5274dd9bebe1 27 }
sb8718 109:5274dd9bebe1 28 }
sb8718 109:5274dd9bebe1 29 void led2_init(void) {
sb8718 109:5274dd9bebe1 30 __HAL_RCC_GPIOA_CLK_ENABLE();
sb8718 109:5274dd9bebe1 31 GPIOA->MODER &= ~(0b11<< (5 * 2)); // reset PA5 mode
sb8718 109:5274dd9bebe1 32 GPIOA->MODER |= 0b01<< (5 * 2); // 01 - write mode
sb8718 109:5274dd9bebe1 33 }
Jonathan Austin 0:2757d7abb7d9 34
Jonathan Austin 0:2757d7abb7d9 35
sb8718 109:5274dd9bebe1 36 void led2_toggle(void){
sb8718 107:ba39981af538 37
sb8718 110:6a67af628913 38 uint32_t isOn;
sb8718 110:6a67af628913 39
sb8718 110:6a67af628913 40 isOn = GPIOA->IDR & (0b1 << 5); //recent write value
sb8718 110:6a67af628913 41
sb8718 110:6a67af628913 42 if(isOn > 0) {
sb8718 109:5274dd9bebe1 43
sb8718 109:5274dd9bebe1 44 GPIOA->BSRR &= ~(0b1 << 5); //set 0 on PA_5_5
sb8718 109:5274dd9bebe1 45 GPIOA->BSRR |= 0b1<< (5 + 16); // set 1 on PA5_21
sb8718 109:5274dd9bebe1 46
sb8718 109:5274dd9bebe1 47 } else {
sb8718 108:0fd7ff91ac95 48
sb8718 109:5274dd9bebe1 49 GPIOA->BSRR |= 0b1 << 5; // set 1 on PA5_5
sb8718 109:5274dd9bebe1 50 GPIOA->BSRR &= ~(0b1 << (5 + 16)); // set 0 on PA5_21
Jonathan Austin 0:2757d7abb7d9 51 }
Jonathan Austin 0:2757d7abb7d9 52 }
sb8718 109:5274dd9bebe1 53
sb8718 109:5274dd9bebe1 54
sb8718 109:5274dd9bebe1 55 void button_init(void) {
sb8718 111:15fa6baff793 56
sb8718 109:5274dd9bebe1 57 __HAL_RCC_GPIOC_CLK_ENABLE();
sb8718 112:5a7629ace1c4 58 GPIOC->MODER &= ~(0b11<< (13 * 2)); // reset PC13 mode
sb8718 112:5a7629ace1c4 59 GPIOC->MODER |= 0b00<< (13 * 2); // 00 - read mode
sb8718 111:15fa6baff793 60
sb8718 111:15fa6baff793 61 SYSCFG->EXTICR[3] &= ~(0b1111 << 4);
sb8718 111:15fa6baff793 62 SYSCFG->EXTICR[3] |= (0b0010 << 4);
sb8718 111:15fa6baff793 63
sb8718 111:15fa6baff793 64 EXTI->IMR |= (0b1 << 13);
sb8718 111:15fa6baff793 65 EXTI->FTSR |= (0b1 << 13);
sb8718 111:15fa6baff793 66
sb8718 109:5274dd9bebe1 67 }
sb8718 111:15fa6baff793 68
sb8718 111:15fa6baff793 69 void button_Handler(void){
sb8718 109:5274dd9bebe1 70
sb8718 111:15fa6baff793 71 if(interval < 2000) {
sb8718 111:15fa6baff793 72 interval *= 2;
sb8718 111:15fa6baff793 73 } else {
sb8718 111:15fa6baff793 74 interval = 500;
sb8718 111:15fa6baff793 75 }
sb8718 109:5274dd9bebe1 76
sb8718 111:15fa6baff793 77 EXTI->PR |= (0b1 << 13);
sb8718 109:5274dd9bebe1 78 }