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@112:5a7629ace1c4, 2020-04-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |