-
Notifications
You must be signed in to change notification settings - Fork 0
/
silniki.c
88 lines (73 loc) · 2.26 KB
/
silniki.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
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
#include "silniki.h"
#include "dane.h"
#include "timery.h"
#include "sensory.h"
extern volatile daneTypeDef dane;
void inicjalizacja_silniki()
{
GPIO_InitTypeDef *silniki = malloc(sizeof(GPIO_InitTypeDef));
silniki->GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
silniki->GPIO_Mode = GPIO_Mode_Out_PP; //wyjscie pull-up
silniki->GPIO_Speed = GPIO_Speed_2MHz; //mo¿na wybraæ 2,10,50 MHz
GPIO_Init(GPIOB, silniki);
free (silniki);
GPIO_WriteBit(GPIOB, SILNIK1 | SILNIK2 | SILNIK3 | SILNIK4, Bit_RESET );
}
void ustaw_silnik(uint8_t ktory, uint8_t wartosc)
{
}
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) //sprawdzenie zrodla
{
TIM_ClearFlag(TIM2, TIM_FLAG_Update); //wyzerowanie flagi przerwania
GPIO_WriteBit(GPIOB, SILNIK1 | SILNIK2 | SILNIK3 | SILNIK4, Bit_SET);
TIM4->CNT = 0;
TIM4->DIER = TIM_DIER_UIE; //wlaczenie przerwania szerokosci impulsu
TIM_ClearFlag(TIM4, TIM_FLAG_Update); //wyzerowanie flagi przerwania
//odczyt_sensory();
}
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) //sprawdzenie zrodla
{
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //wyzerowanie flagi przerwania
if (dane.pwm.pwm1 > dane.pwm.timer)
GPIO_WriteBit(GPIOB, SILNIK1, Bit_SET);
else
GPIO_WriteBit(GPIOB, SILNIK1, Bit_RESET);
if (dane.pwm.pwm2 > dane.pwm.timer)
GPIO_WriteBit(GPIOB, SILNIK2, Bit_SET);
else
GPIO_WriteBit(GPIOB, SILNIK2, Bit_RESET);
if (dane.pwm.pwm3 > dane.pwm.timer)
GPIO_WriteBit(GPIOB, SILNIK3, Bit_SET);
else
GPIO_WriteBit(GPIOB, SILNIK3, Bit_RESET);
if (dane.pwm.pwm4 > dane.pwm.timer)
GPIO_WriteBit(GPIOB, SILNIK4, Bit_SET);
else
GPIO_WriteBit(GPIOB, SILNIK4, Bit_RESET);
if (dane.pwm.timer >= 99)
{
TIM3->DIER = 0; //wylaczenie przerwania
GPIO_WriteBit(GPIOB, SILNIK1 | SILNIK2 | SILNIK3 | SILNIK4, Bit_RESET);
odczyt_sensory();
}
//dane.pwm.timer = 0;
else
dane.pwm.timer++;
}
}
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) == SET) //sprawdzenie zrodla
{
TIM4->DIER = 0; // wylaczenie tego przerwania
TIM_ClearFlag(TIM4, TIM_FLAG_Update); //wyzerowanie flagi przerwania
dane.pwm.timer = 0;
TIM3->CNT = 0;
TIM3->DIER = TIM_DIER_UIE; //wlaczenie przerwania szerokosci impulsu
}
}