Seongbin Lim
/
sb_first_project
This is a very simple guide, reviewing the steps required to get Blinky working on an Mbed OS platform.
main.cpp@110:6a67af628913, 2020-04-07 (annotated)
- Committer:
- sb8718
- Date:
- Tue Apr 07 09:33:40 2020 +0000
- Revision:
- 110:6a67af628913
- Parent:
- 109:5274dd9bebe1
- Child:
- 111:15fa6baff793
lab1-6 (Better)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sb8718 | 109:5274dd9bebe1 | 1 | #include "mbed.h" |
sb8718 | 109:5274dd9bebe1 | 2 | |
sb8718 | 109:5274dd9bebe1 | 3 | void led2_init(void); |
sb8718 | 109:5274dd9bebe1 | 4 | void button_init(void); |
sb8718 | 109:5274dd9bebe1 | 5 | uint32_t button_input(void); |
sb8718 | 109:5274dd9bebe1 | 6 | void led2_toggle(void); |
sb8718 | 109:5274dd9bebe1 | 7 | |
sb8718 | 109:5274dd9bebe1 | 8 | int main() { |
sb8718 | 109:5274dd9bebe1 | 9 | int interval = 500; |
sb8718 | 109:5274dd9bebe1 | 10 | uint32_t val; |
sb8718 | 109:5274dd9bebe1 | 11 | |
sb8718 | 109:5274dd9bebe1 | 12 | led2_init(); |
sb8718 | 109:5274dd9bebe1 | 13 | button_init(); |
sb8718 | 109:5274dd9bebe1 | 14 | |
sb8718 | 109:5274dd9bebe1 | 15 | while(true) { |
sb8718 | 109:5274dd9bebe1 | 16 | |
sb8718 | 109:5274dd9bebe1 | 17 | val = button_input(); |
sb8718 | 109:5274dd9bebe1 | 18 | |
sb8718 | 109:5274dd9bebe1 | 19 | if(val == 0) { |
sb8718 | 109:5274dd9bebe1 | 20 | interval = interval <<1; |
sb8718 | 109:5274dd9bebe1 | 21 | if(interval > 2000) |
sb8718 | 109:5274dd9bebe1 | 22 | interval = 500; |
sb8718 | 109:5274dd9bebe1 | 23 | } |
sb8718 | 109:5274dd9bebe1 | 24 | led2_toggle(); |
sb8718 | 109:5274dd9bebe1 | 25 | ThisThread::sleep_for(interval); |
sb8718 | 109:5274dd9bebe1 | 26 | } |
sb8718 | 109:5274dd9bebe1 | 27 | } |
sb8718 | 109:5274dd9bebe1 | 28 | void led2_init(void) { |
sb8718 | 109:5274dd9bebe1 | 29 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
sb8718 | 109:5274dd9bebe1 | 30 | GPIOA->MODER &= ~(0b11<< (5 * 2)); // reset PA5 mode |
sb8718 | 109:5274dd9bebe1 | 31 | GPIOA->MODER |= 0b01<< (5 * 2); // 01 - write mode |
sb8718 | 109:5274dd9bebe1 | 32 | } |
Jonathan Austin |
0:2757d7abb7d9 | 33 | |
Jonathan Austin |
0:2757d7abb7d9 | 34 | |
sb8718 | 109:5274dd9bebe1 | 35 | void led2_toggle(void){ |
sb8718 | 107:ba39981af538 | 36 | |
sb8718 | 110:6a67af628913 | 37 | uint32_t isOn; |
sb8718 | 110:6a67af628913 | 38 | |
sb8718 | 110:6a67af628913 | 39 | isOn = GPIOA->IDR & (0b1 << 5); //recent write value |
sb8718 | 110:6a67af628913 | 40 | |
sb8718 | 110:6a67af628913 | 41 | if(isOn > 0) { |
sb8718 | 109:5274dd9bebe1 | 42 | |
sb8718 | 109:5274dd9bebe1 | 43 | GPIOA->BSRR &= ~(0b1 << 5); //set 0 on PA_5_5 |
sb8718 | 109:5274dd9bebe1 | 44 | GPIOA->BSRR |= 0b1<< (5 + 16); // set 1 on PA5_21 |
sb8718 | 109:5274dd9bebe1 | 45 | |
sb8718 | 109:5274dd9bebe1 | 46 | } else { |
sb8718 | 108:0fd7ff91ac95 | 47 | |
sb8718 | 109:5274dd9bebe1 | 48 | GPIOA->BSRR |= 0b1 << 5; // set 1 on PA5_5 |
sb8718 | 109:5274dd9bebe1 | 49 | GPIOA->BSRR &= ~(0b1 << (5 + 16)); // set 0 on PA5_21 |
Jonathan Austin |
0:2757d7abb7d9 | 50 | } |
Jonathan Austin |
0:2757d7abb7d9 | 51 | } |
sb8718 | 109:5274dd9bebe1 | 52 | |
sb8718 | 109:5274dd9bebe1 | 53 | |
sb8718 | 109:5274dd9bebe1 | 54 | void button_init(void) { |
sb8718 | 109:5274dd9bebe1 | 55 | __HAL_RCC_GPIOC_CLK_ENABLE(); |
sb8718 | 109:5274dd9bebe1 | 56 | GPIOC->MODER &= ~(0b11<< (13 * 2)); // reset PC13 mode |
sb8718 | 109:5274dd9bebe1 | 57 | GPIOC->MODER |= 0b00<< (13 * 2); // 01 - read mode |
sb8718 | 109:5274dd9bebe1 | 58 | } |
sb8718 | 109:5274dd9bebe1 | 59 | uint32_t button_input(void) { |
sb8718 | 109:5274dd9bebe1 | 60 | |
sb8718 | 110:6a67af628913 | 61 | uint32_t val = GPIOC->IDR & (0b1<<13); |
sb8718 | 109:5274dd9bebe1 | 62 | |
sb8718 | 109:5274dd9bebe1 | 63 | return val; |
sb8718 | 109:5274dd9bebe1 | 64 | } |