-
Notifications
You must be signed in to change notification settings - Fork 0
/
Lab_1_Led_Toogle_STM32.c
52 lines (46 loc) · 1.57 KB
/
Lab_1_Led_Toogle_STM32.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
******************************************************************************
* @file : main.c
* @author : Auto-generated by STM32CubeIDE
* @brief : Main program body
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2020 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
#include <stdint.h>
#define RCC_BASE 0x40021000
#define PortA_BASE 0x40010800
#define RCC_APB2ENR *(volatile uint32_t *)(RCC_BASE + 0x18)
#define GPIO_CRH *(volatile uint32_t *)(PortA_BASE + 0x04)
#define GPIO_ODR *(volatile uint32_t *)(RCC_BASE + 0x0C)
#define LED_ON (unsigned int)1
#define LED_OFF (unsigned int)0
typedef union {
volatile uint32_t all_fields;
struct {
volatile uint32_t reserved :13;
volatile uint32_t P_13 :1;
} Pin;
} R_ODR_t;
volatile R_ODR_t* ODR = (volatile R_ODR_t *) (RCC_BASE + 0x0C); // pointer type Union to reigster GPIO_PA_ODR
int main(void) {
RCC_APB2ENR |= 1 << 2; // Enable 2nd bit equal 1
GPIO_CRH &= 0xFF0FFFFF;
GPIO_CRH |= 0x00200000;
/* Loop forever */
for (;;) {
ODR->Pin.P_13 = LED_ON;
for (int i = 0; i < 5000; i++)
ODR->Pin.P_13 = LED_OFF;
for (int i = 0; i < 5000; i++);
}
}