-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathfun.c
155 lines (145 loc) · 3.19 KB
/
fun.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <stm32f10x_usart.h>
#include <stm32f10x_spi.h>
#include <stm32f10x_gpio.h>
const char ascii[] = "0123456789ABCDEF";
int srednia_u[5]={0,0,0,0,0};
int HexCharToInt(char ch)
{
if (ch < 48 || (ch > 57 && ch < 65) || ch > 70) return 0;
return (ch < 58) ? ch - 48 : ch - 55;
}
void print( char* s)
{
while (*s)
{
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART3, *(s++));
}
}
void sendtogps(char* s, unsigned char cun)
{
unsigned char CK_A=0;
unsigned char CK_B=0;
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, *(s++));
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, *(s++));
cun--;
cun--;
while (cun-- != 0)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
CK_A += *(s);
CK_B += CK_A;
USART_SendData(USART1, *(s++));
}
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, CK_A);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, CK_B);
}
void send_hex(unsigned char data)
{
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART3, ascii[data >> 4 ]);
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART3, ascii[data & 0x0f ]);
}
uint8_t spi_sendrecv(uint16_t byte)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
// wait for tx buffer
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, byte);
// wait for data in rx buffer
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
return SPI_I2S_ReceiveData(SPI2);
}
unsigned char czytaj_GPS(unsigned char pos,unsigned char len, char *source, char * destination)
{
char *wyn;
char pet = 0;
wyn=source;
while( pos-- !=0)
{
while (*(wyn++) != ',');
}
if (*(wyn) == 0)
{
return 0;
}
else
{
while((*(wyn) !=',') && (*(wyn) != 0)&& (len-- !=0))
{
*(destination++) = *(wyn++);
pet = 1;
}
if (pet == 0)
{
return 0;
}
*(destination) = 0;
}
return 1;
}
uint16_t gps_CRC16_checksum (char *string)
{
uint16_t crc = 0xffff;
char i;
while (*(string) != 0)
{
crc = crc ^ (*(string++) << 8);
for (i=0; i<8; i++)
{
if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021;
else
crc <<= 1;
}
}
return crc;
}
int srednia (int dana)
{
volatile char nr_pom=0;
volatile char first=1;
char i;
int sr=0;
if(first)
{
for (i=0; i<5; i++)
{
srednia_u[i] = dana;
}
first =0;
}
srednia_u[nr_pom] = dana;
if (++nr_pom >4)
{
nr_pom=0;
}
for (i=0; i<5; i++)
{
sr += srednia_u[i];
}
sr = sr/5;
return sr;
}