8void configure_RCC_APB1(
void) {
9 RCC->APB1ENR |= (RCC_APB1ENR_CAN1EN | RCC_APB1ENR_CAN2EN | RCC_APB1ENR_USART3EN | RCC_APB1ENR_SPI3EN | RCC_APB1ENR_SPI2EN | RCC_APB1ENR_TIM6EN | RCC_APB1ENR_TIM7EN);
10 RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST | RCC_APB1RSTR_CAN2RST | RCC_APB1RSTR_USART3RST | RCC_APB1RSTR_SPI3RST | RCC_APB1RSTR_SPI2RST | RCC_APB1RSTR_TIM6RST | RCC_APB1RSTR_TIM7RST);
13 RCC->APB1RSTR &= (uint16_t)(~(RCC_APB1RSTR_CAN1RST | RCC_APB1RSTR_CAN2RST | RCC_APB1RSTR_USART3RST | RCC_APB1RSTR_SPI3RST | RCC_APB1RSTR_SPI2RST | RCC_APB1RSTR_TIM6RST | RCC_APB1RSTR_TIM7RST));
19void configure_RCC_APB2(
void) {
20 RCC->APB2ENR |= (RCC_APB2ENR_SPI1EN | RCC_APB2ENR_USART6EN | RCC_APB2ENR_SPI4EN | RCC_APB2ENR_SYSCFGEN);
21 RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST | RCC_APB2RSTR_USART6RST | RCC_APB2RSTR_SPI4RST | RCC_APB2RSTR_SYSCFGRST);
24 RCC->APB2RSTR &= (uint16_t)(~(RCC_APB2RSTR_SPI1RST | RCC_APB2RSTR_USART6RST | RCC_APB2RSTR_SPI4RST | RCC_APB2RSTR_SYSCFGRST));
30void configure_RCC_AHB1(
void) {
31 RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN | RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_GPIOEEN);
32 RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOARST | RCC_AHB1RSTR_GPIOBRST | RCC_AHB1RSTR_GPIOCRST | RCC_AHB1RSTR_GPIODRST | RCC_AHB1RSTR_GPIOERST);
35 RCC->AHB1RSTR &= (uint16_t)(~(RCC_AHB1RSTR_GPIOARST | RCC_AHB1RSTR_GPIOBRST | RCC_AHB1RSTR_GPIOCRST | RCC_AHB1RSTR_GPIODRST | RCC_AHB1RSTR_GPIOERST));
42void configure_SPI4_Flash(
void) {
43 GPIOE->MODER &= (~(GPIO_MODER_MODE12_Msk | GPIO_MODER_MODE13_Msk | GPIO_MODER_MODE14_Msk));
44 GPIOE->MODER |= ((0x2 << GPIO_MODER_MODE12_Pos) | (0x2 << GPIO_MODER_MODE13_Pos) | (0x2 << GPIO_MODER_MODE14_Pos));
45 GPIOE->AFR[1] &= (uint32_t)(~(0x0FFFF000));
46 GPIOE->AFR[1] |= (0x05555000);
47 GPIOE->MODER &= (~(GPIO_MODER_MODE9_Msk | GPIO_MODER_MODE10_Msk | GPIO_MODER_MODE11_Msk));
48 GPIOE->MODER |= ((0x1 << GPIO_MODER_MODE9_Pos) | (0x1 << GPIO_MODER_MODE10_Pos) | (0x1 << GPIO_MODER_MODE11_Pos));
49 GPIOE->OTYPER &= (uint16_t)(~(GPIO_OTYPER_OT9 | GPIO_OTYPER_OT10 | GPIO_OTYPER_OT11));
50 GPIOE->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED9_Msk | GPIO_OSPEEDR_OSPEED10_Msk | GPIO_OSPEEDR_OSPEED11_Msk));
51 GPIOE->OSPEEDR |= ((0x2 << GPIO_OSPEEDR_OSPEED9_Pos) | (0x2 << GPIO_OSPEEDR_OSPEED10_Pos) | (0x2 << GPIO_OSPEEDR_OSPEED11_Pos));
52 GPIOE->OTYPER &= (~(GPIO_OTYPER_OT12 | GPIO_OTYPER_OT13 | GPIO_OTYPER_OT14));
53 GPIOE->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED12_Msk | GPIO_OSPEEDR_OSPEED13_Msk | GPIO_OSPEEDR_OSPEED14_Msk));
54 GPIOE->OSPEEDR |= (0x2 << GPIO_OSPEEDR_OSPEED12_Pos | 0x2 << GPIO_OSPEEDR_OSPEED13_Pos | 0x2 << GPIO_OSPEEDR_OSPEED14_Pos);
55 GPIOE->ODR |= (GPIO_ODR_OD10) | (GPIO_ODR_OD11) | (GPIO_ODR_OD9);
56 SPI4->CR1 &= (~(SPI_CR1_BR_Msk));
57 SPI4->CR1 &= (~(SPI_CR1_CPHA_Msk) | (SPI_CR1_CPOL_Msk));
58 SPI4->CR1 |= SPI_CR1_MSTR;
59 SPI4->CR1 |= SPI_CR1_SSM | SPI_CR1_SSI;
60 SPI4->CR1 &= (~(SPI_CR1_LSBFIRST_Msk));
61 SPI4->CR1 &= ~(SPI_CR1_BIDIMODE | SPI_CR1_RXONLY);
62 SPI4->CR1 &= (~(SPI_CR1_BR_Msk));
63 SPI4->CR1 |= ((0x00 << SPI_CR1_BR_Pos));
64 SPI4->CR1 |= (0x1 << SPI_CR1_SPE_Pos);
71void configure_SPI3_LoRa() {
72 GPIOC->MODER &= (~(GPIO_MODER_MODE10_Msk | GPIO_MODER_MODE11_Msk | GPIO_MODER_MODE12_Msk));
73 GPIOC->MODER |= ((0x2 << GPIO_MODER_MODE10_Pos) | (0x2 << GPIO_MODER_MODE11_Pos) | (0x2 << GPIO_MODER_MODE12_Pos));
74 GPIOC->PUPDR &= (~(GPIO_PUPDR_PUPD10_Msk | GPIO_PUPDR_PUPD11_Msk | GPIO_PUPDR_PUPD12_Msk));
75 GPIOC->PUPDR |= ((0X1 << GPIO_PUPDR_PUPD10_Pos) | (0X1 << GPIO_PUPDR_PUPD11_Pos) | (0X1 << GPIO_PUPDR_PUPD12_Pos));
76 GPIOD->PUPDR |= (0X1 << GPIO_PUPDR_PUPD1_Pos);
77 GPIOD->MODER &= (~(GPIO_MODER_MODE0_Msk) | (GPIO_MODER_MODE7_Msk) | (GPIO_MODER_MODE1_Msk));
78 GPIOD->MODER |= (0X01 << GPIO_MODER_MODE0_Pos) | (0X01 << GPIO_MODER_MODE7_Pos);
79 TIM6->ARR &= (~(TIM_ARR_ARR_Msk));
80 TIM6->PSC &= (~(TIM_PSC_PSC_Msk));
84 GPIOD->ODR |= (GPIO_ODR_OD7);
85 TIM6->CR1 |= TIM_CR1_CEN;
86 while ((TIM6->SR & TIM_SR_UIF) == 0);
87 GPIOD->ODR &= (~(GPIO_ODR_OD7));
88 TIM6->SR &= ~(TIM_SR_UIF);
90 GPIOC->OTYPER &= (~(GPIO_OTYPER_OT10 | GPIO_OTYPER_OT11 | GPIO_OTYPER_OT12));
91 GPIOC->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED10_Msk | GPIO_OSPEEDR_OSPEED11_Msk | GPIO_OSPEEDR_OSPEED12_Msk));
92 GPIOC->OSPEEDR |= (0x2 << GPIO_OSPEEDR_OSPEED10_Pos | 0x2 << GPIO_OSPEEDR_OSPEED11_Pos | 0x2 << GPIO_OSPEEDR_OSPEED12_Pos);
93 GPIOD->ODR |= GPIO_ODR_OD0;
94 GPIOC->AFR[1] &= (uint32_t)(~(0x000FFF00));
95 GPIOC->AFR[1] |= (0x00066600);
97 SPI3->CR1 &= (~(SPI_CR1_BR_Msk));
98 SPI3->CR1 |= (0x2 << SPI_CR1_BR_Pos);
99 SPI3->CR1 &= (~(SPI_CR1_CPHA_Msk) | (SPI_CR1_CPOL_Msk));
101 SPI3->CR1 |= SPI_CR1_MSTR;
102 SPI3->CR1 |= SPI_CR1_SSM | SPI_CR1_SSI;
103 SPI3->CR1 &= (~(SPI_CR1_LSBFIRST_Msk));
104 SPI3->CR1 |= SPI_CR1_DFF;
105 SPI3->CR1 &= ~(SPI_CR1_BIDIMODE | SPI_CR1_RXONLY);
106 SPI3->CR1 |= (0x1 << SPI_CR1_SPE_Pos);
113void configure_UART3_GPS(
void) {
114 GPIOD->MODER &= (~(GPIO_MODER_MODE8_Msk | GPIO_MODER_MODE9_Msk | GPIO_MODER_MODE13_Msk));
115 GPIOD->MODER |= ((0x2 << GPIO_MODER_MODE8_Pos) | (0x2 << GPIO_MODER_MODE9_Pos) | (0x1 << GPIO_MODER_MODE13_Pos));
116 GPIOD->AFR[1] &= (uint32_t)(~(0x000000FF));
117 GPIOD->AFR[1] |= (0x00000077);
119 GPIOD->PUPDR |= (0X1 << GPIO_PUPDR_PUPD9_Pos);
121 GPIOD->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED8 | GPIO_OSPEEDR_OSPEED9 | GPIO_OSPEEDR_OSPEED13));
122 GPIOD->OSPEEDR |= (0x3 << GPIO_OSPEEDR_OSPEED8_Pos) | (0x3 << GPIO_OSPEEDR_OSPEED9_Pos) | (0x3 << GPIO_OSPEEDR_OSPEED13_Pos);
125 USART3->BRR &= (
unsigned int)(0xFFFF0000);
126 USART3->BRR |= (0x0002227);
128 USART3->CR1 &= (
unsigned int)(~(0x400));
129 USART3->CR2 &= (
unsigned int)(~(0xE00));
130 USART3->CR3 &= (
unsigned int)(~(0x300));
131 USART3->CR1 |= (
unsigned int)(0x200C);
132 USART3->CR1 |= USART_CR1_OVER8;
135 GPIOD->ODR |= GPIO_ODR_OD13;
139void configure_MISC_GPIO(
void) {
140 GPIOD->MODER &= (~(GPIO_MODER_MODE14_Msk | GPIO_MODER_MODE15_Msk));
141 GPIOD->MODER |= ((0x1 << GPIO_MODER_MODE14_Pos) | (0x1 << GPIO_MODER_MODE15_Pos));
142 GPIOD->OTYPER &= (uint16_t)(~(GPIO_OTYPER_OT14 | GPIO_OTYPER_OT15));
143 GPIOD->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED14_Msk | GPIO_OSPEEDR_OSPEED15_Msk));
144 GPIOD->OSPEEDR |= ((0x2 << GPIO_OSPEEDR_OSPEED14_Pos) | (0x2 << GPIO_OSPEEDR_OSPEED15_Pos));
148 GPIOD->ODR &= (~(GPIO_ODR_OD14 | GPIO_ODR_OD15));
150 GPIOB->MODER &= (~(GPIO_MODER_MODE15_Pos));
151 GPIOB->MODER |= (0x1 << GPIO_MODER_MODE15_Pos);
152 GPIOB->OTYPER &= (~(GPIO_OTYPER_OT15_Msk));
153 GPIOB->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED15_Msk));
154 GPIOB->OSPEEDR |= (0x2 << GPIO_OSPEEDR_OSPEED15_Pos);
155 GPIOB->ODR &= (~(GPIO_ODR_OD15));
158 GPIOB->MODER &= (~(GPIO_MODER_MODE1_Pos));
159 GPIOB->OTYPER &= (~(GPIO_OTYPER_OT1_Msk));
160 GPIOB->OSPEEDR &= (~(GPIO_OSPEEDR_OSPEED1_Msk));
161 GPIOB->OSPEEDR |= (0x2 << GPIO_OSPEEDR_OSPEED1_Pos);
162 GPIOB->PUPDR &= (~(GPIO_PUPDR_PUPD1));
163 GPIOB->PUPDR |= (0x01 << GPIO_PUPDR_PUPD1_Pos);
171 RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;
172 RCC->APB1RSTR |= RCC_APB1RSTR_TIM6RST;
175 RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST);
178 TIM6->CR1 |= TIM_CR1_OPM;
185 RCC->APB1ENR |= RCC_APB1ENR_TIM7EN;
186 RCC->APB1RSTR |= RCC_APB1RSTR_TIM7RST;
189 RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST);
192 TIM7->CR1 |= TIM_CR1_OPM;
194 TIM7->ARR &= (~(TIM_ARR_ARR_Msk));
202void buzzer(
int count) {
203 TIM6->ARR &= (~(TIM_ARR_ARR_Msk));
204 TIM6->PSC &= (~(TIM_PSC_PSC_Msk));
207 TIM6->CR1 |= TIM_CR1_CEN;
208 GPIOB->ODR |= 0x8000;
210 for(
long i = 0; i < count; i++) {
211 GPIOB->ODR ^= 0x8000;
212 while ((TIM6->SR & TIM_SR_UIF) == 0);
213 TIM6->SR &= ~(TIM_SR_UIF);
215 TIM6->CR1 |= TIM_CR1_CEN;