-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.c
More file actions
95 lines (76 loc) · 2.7 KB
/
Copy pathmain.c
File metadata and controls
95 lines (76 loc) · 2.7 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
* @file funkcja główna programu inklinometru
* @author Bartłomiej Błeszyński
* @brief Elektroniczna poziomica - funkcja główna programu
*/
#include "stm32f10x.h"
#include "HD44780.h"
#include "stdlib.h"
#include "stm32f10x_gpio.h"
#include "string.h"
#include "stdio.h"
#include "stdbool.h"
#include "comm.h"
#include "utils.h"
#include "definitions.h"
uint8_t recieved_data[RECIEVED_DATA_LENGHT]; //bufor odebranych danych
bool degrees_data_to_read=false; // flaga wywołania odczytu z przesyłem UART dla stopni (po odebraniu zapytania przez uart GET::DEG)
bool radian_data_to_read=false; // flaga wywołania odczytu z przesyłem UART dla radianów (po odebraniu zapytania przez uart GET::RAD)
bool single_measure_no_send=false; // flaga wywołania odczytu po naciscnieciu przycisku bez przesłania UART dla stopni i radianów jednoczenie
bool single_measure_with_send=false; // flaga wywołania odczytu po naciscnieciu przycisku z przesyłem UART dla stopni i radianów jednoczenie
/**
* @brief funkcja główna
*/
int main(void)
{
config_pheripherials(recieved_data); //konfiguracja peryferiów
LED_R_OFF;
LED_L_OFF;
LCD_Initalize(); //inicjalizacja LCD
Enable_MEMS();; //inicjalizacja mems
display_static_menu(); //wywietla stałe menu ("stopnie=" "radiany=")
while(1)
{
operation(°rees_data_to_read,&radian_data_to_read,&single_measure_no_send,&single_measure_with_send); //główna funkcja
}
}
DMA1_Channel5_IRQHandler()
{
DMA1_Channel5->CCR &= ~(DMA_CCR1_EN); //wyłączenie dma
DMA1_Channel5->CNDTR = RECIEVED_DATA_LENGHT; //ponowne zapisanie długosci
DMA1->IFCR |= (DMA_IFCR_CGIF5); // reset przerwania dma
DMA1_Channel5->CMAR = recieved_data; //wskaźnik na początek tablicy
char tab[15]; //bufor tymczasowy
strcpy(tab,"GET::RAD\r");
if(strcmp(tab,recieved_data)==0) //porownywanie ciągów otrzymanych przez UART
{
LED_L_TGGL; //zmiana stanu diody
radian_data_to_read = true;
}
strcpy(tab,"GET::DEG\r");
if(strcmp(tab,recieved_data)==0)
{
LED_R_TGGL; //zmiana stanu diody
degrees_data_to_read = true;
}
DMA1_Channel5->CCR |= (DMA_CCR1_EN); //ponowne uruchomienie dma (oczekuje na kolejną komendę)
}
EXTI15_10_IRQHandler()
{
TIM3->CR1 |= (TIM_CR1_CEN); //częsc debouncingu (start timera TIM3)
EXTI->PR = (EXTI_PR_PR11)|(EXTI_PR_PR12); //usuwanie flag od przerwania zewnętrzenego
}
//przerwanie debouncingu (po upłynięci czasu timera TIM3 sprawdane są stany na SW1 i SW2)
TIM3_IRQHandler()
{
TIM3->SR &= ~(TIM_SR_UIF); // czyszenie flagi "update interupt"
if(SW_1_ON){
LED_P_TGGL;
single_measure_no_send = true; //ustawienie flagi : nacinięty przycisk -> pomiar bez wysłania
}
if(SW_2_ON)
{
LED_L_TGGL;
single_measure_with_send =true; //ustawienie flagi : nacinięty przycisk -> pomiar z wysłaniem
}
}