質問編集履歴

1

質問の解答

2019/04/16 13:39

投稿

aiai8976
aiai8976

スコア112

test CHANGED
File without changes
test CHANGED
@@ -21,3 +21,463 @@
21
21
  main.c:40:18: fatal error: main.h そのようなファイルやディレクトリはありません
22
22
 
23
23
  ```
24
+
25
+
26
+
27
+ ###ソース
28
+
29
+ 入りきらないため、一部割愛しています。
30
+
31
+ Lidarってゆうセンサのコードです。
32
+
33
+
34
+
35
+ ```main.c
36
+
37
+
38
+
39
+ /* Includes ------------------------------------------------------------------*/
40
+
41
+ #include "main.h"
42
+
43
+ #include "stm32f1xx_hal.h"
44
+
45
+ #include "can.h"
46
+
47
+ #include "i2c.h"
48
+
49
+ #include "tim.h"
50
+
51
+ #include "usart.h"
52
+
53
+ #include "gpio.h"
54
+
55
+
56
+
57
+ /* USER CODE BEGIN Includes */
58
+
59
+ #include "oled.h"
60
+
61
+ #include "sensor.h"
62
+
63
+ #include "util.h"
64
+
65
+ #include <stdbool.h>
66
+
67
+ /* USER CODE END Includes */
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+ /* USER CODE END 0 */
76
+
77
+
78
+
79
+ int main(void)
80
+
81
+ {
82
+
83
+
84
+
85
+ /* USER CODE BEGIN 1 */
86
+
87
+ CAN_FilterConfTypeDef sFilterConfig;
88
+
89
+ uint16_t mag_i = 0;
90
+
91
+ uint8_t mag_exp = 0;
92
+
93
+ uint8_t data_buff[32] = {0};
94
+
95
+ char str_buff[32] = {0};
96
+
97
+ /* USER CODE END 1 */
98
+
99
+
100
+
101
+ /* MCU Configuration----------------------------------------------------------*/
102
+
103
+
104
+
105
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
106
+
107
+ HAL_Init();
108
+
109
+
110
+
111
+ /* USER CODE BEGIN Init */
112
+
113
+
114
+
115
+ /* USER CODE END Init */
116
+
117
+
118
+
119
+ /* Configure the system clock */
120
+
121
+ SystemClock_Config();
122
+
123
+
124
+
125
+ /* USER CODE BEGIN SysInit */
126
+
127
+
128
+
129
+ /* USER CODE END SysInit */
130
+
131
+
132
+
133
+ /* Initialize all configured peripherals */
134
+
135
+ MX_GPIO_Init();
136
+
137
+ MX_I2C1_Init();
138
+
139
+ MX_CAN_Init();
140
+
141
+ MX_USART1_UART_Init();
142
+
143
+ MX_USART2_UART_Init();
144
+
145
+ MX_TIM2_Init();
146
+
147
+
148
+
149
+ /* USER CODE BEGIN 2 */
150
+
151
+ hcan.pRxMsg = &RxMessage;
152
+
153
+ hcan.pTxMsg = &TxMessage;
154
+
155
+ //��ʼ��CAN Filter
156
+
157
+ sFilterConfig.FilterIdHigh = 0;
158
+
159
+ sFilterConfig.FilterIdLow = 0;
160
+
161
+ sFilterConfig.FilterMaskIdHigh = 0;
162
+
163
+ sFilterConfig.FilterMaskIdLow = 0;
164
+
165
+ sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;
166
+
167
+ sFilterConfig.FilterNumber = 1;
168
+
169
+ sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
170
+
171
+ sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
172
+
173
+ sFilterConfig.FilterActivation = ENABLE;
174
+
175
+ sFilterConfig.BankNumber = 1;
176
+
177
+
178
+
179
+ if(HAL_OK != HAL_CAN_ConfigFilter(&hcan, &sFilterConfig))
180
+
181
+ {
182
+
183
+ //uart2_write("init can filter failed\n", 23);
184
+
185
+ }
186
+
187
+
188
+
189
+
190
+
191
+ if(HAL_OK != HAL_CAN_WakeUp(&hcan))
192
+
193
+ {
194
+
195
+ //uart2_write("init can filter failed\n", 23);
196
+
197
+ }
198
+
199
+ HAL_TIM_Base_Stop_IT(&htim2);
200
+
201
+ HAL_Delay(500);//�ȴ���������ʼ������
202
+
203
+ OLED_Init(); //???OLED
204
+
205
+ OLED_ShowString(0,0,"CVER:",0);//small front
206
+
207
+ OLED_ShowString(0,1,"DIST:",0);
208
+
209
+ OLED_ShowString(0,2,"MAGN:",0);
210
+
211
+ //OLED_ShowString(0,3,"TVER:",0);
212
+
213
+
214
+
215
+ //��ȡCAN ������ID��
216
+
217
+ hcan.pTxMsg->StdId = 0x731 & 0x7ff;//
218
+
219
+ hcan.pTxMsg->IDE = CAN_ID_STD;//
220
+
221
+ hcan.pTxMsg->RTR = CAN_RTR_DATA;
222
+
223
+ hcan.pTxMsg->DLC = 8;
224
+
225
+ hcan.pTxMsg->Data[0] = 0xf0;;
226
+
227
+ hcan.pTxMsg->Data[1] = 0xff;
228
+
229
+ hcan.pTxMsg->Data[2] = 0x00;
230
+
231
+ hcan.pTxMsg->Data[3] = 0xb0;
232
+
233
+ HAL_CAN_Transmit(&hcan, 100);
234
+
235
+ if(HAL_OK == HAL_CAN_Receive(&hcan, CAN_FIFO0, 300))
236
+
237
+ {
238
+
239
+ sensorID_CAN = hcan.pRxMsg->Data[0] & 0xf0;//������ID��
240
+
241
+ //����CAN�жϽ�������
242
+
243
+ if(HAL_OK != HAL_CAN_Receive_IT(&hcan, CAN_FIFO0))
244
+
245
+ {
246
+
247
+ //uart2_write("init can filter failed\n", 23);
248
+
249
+ }
250
+
251
+ //CAN�̼��汾
252
+
253
+ hcan.pTxMsg->StdId = 0x731 & 0x7ff;//
254
+
255
+ hcan.pTxMsg->IDE = CAN_ID_STD;//
256
+
257
+ hcan.pTxMsg->RTR = CAN_RTR_DATA;
258
+
259
+ hcan.pTxMsg->DLC = 8;
260
+
261
+ hcan.pTxMsg->Data[0] = sensorID_CAN | 0x0;;
262
+
263
+ hcan.pTxMsg->Data[1] = 0xfe;
264
+
265
+ HAL_CAN_Transmit(&hcan, 100);
266
+
267
+
268
+
269
+ //ToF�̼���Ϣ
270
+
271
+ hcan.pTxMsg->StdId = 0x731 & 0x7ff;//
272
+
273
+ hcan.pTxMsg->IDE = CAN_ID_STD;//
274
+
275
+ hcan.pTxMsg->RTR = CAN_RTR_DATA;
276
+
277
+ hcan.pTxMsg->DLC = 8;
278
+
279
+ hcan.pTxMsg->Data[0] = sensorID_CAN | 0x0;;
280
+
281
+ hcan.pTxMsg->Data[1] = 0x2e;
282
+
283
+ HAL_CAN_Transmit(&hcan, 100);
284
+
285
+
286
+
287
+ //Τ��CANЭ����Ҫ�����ض������????���������������������
288
+
289
+ hcan.pTxMsg->StdId = 0x731 & 0x7ff;//
290
+
291
+ hcan.pTxMsg->IDE = CAN_ID_STD;//
292
+
293
+ hcan.pTxMsg->RTR = CAN_RTR_DATA;
294
+
295
+ hcan.pTxMsg->DLC = 8;
296
+
297
+ hcan.pTxMsg->Data[0] = sensorID_CAN | 0x0;;
298
+
299
+ hcan.pTxMsg->Data[1] = 0xf7;
300
+
301
+ hcan.pTxMsg->Data[2] = 0xf5;
302
+
303
+ hcan.pTxMsg->Data[3] = 0x1;
304
+
305
+ HAL_CAN_Transmit(&hcan, 100);
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+ //������������ģʽ
316
+
317
+ hcan.pTxMsg->StdId = 0x731 & 0x7ff;//
318
+
319
+ hcan.pTxMsg->IDE = CAN_ID_STD;//
320
+
321
+ hcan.pTxMsg->RTR = CAN_RTR_DATA;
322
+
323
+ hcan.pTxMsg->DLC = 8;
324
+
325
+ hcan.pTxMsg->Data[0] = sensorID_CAN | 0x0;
326
+
327
+ hcan.pTxMsg->Data[1] = 0x24;
328
+
329
+ HAL_CAN_Transmit(&hcan, 100);
330
+
331
+
332
+
333
+ }
334
+
335
+ else
336
+
337
+ {
338
+
339
+ //����CAN�жϽ�������
340
+
341
+ if(HAL_OK != HAL_CAN_Receive_IT(&hcan, CAN_FIFO0))
342
+
343
+ {
344
+
345
+ //uart2_write("init can filter failed\n", 23);
346
+
347
+ }
348
+
349
+ }
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+ //����UART1��UART2�Ĵ�������������ģʽ
358
+
359
+ continuous_Stop(USE_UART1);
360
+
361
+ uart1_read(buff, 8, 200);//���ܻ���������Ϣ(Hypersen)��Ҫ�˵�
362
+
363
+ if(sensor_get_DeviceInfo(buff, USE_UART1) == 1)
364
+
365
+ {
366
+
367
+ sprintf(str_buff, "20%d-%d-%d V%d.%d", buff[17], buff[18], buff[19], buff[20], buff[21]);
368
+
369
+ OLED_ShowString(0,3, (uint8_t *)str_buff,0);
370
+
371
+ }
372
+
373
+ sensor_continuous_start(USE_UART1);
374
+
375
+ continuous_Stop(USE_UART2);
376
+
377
+ uart2_read(buff, 8, 200); //���ܻ���������Ϣ(Hypersen)��Ҫ�˵�
378
+
379
+ if(sensor_get_DeviceInfo(buff, USE_UART2) == 1)
380
+
381
+ {
382
+
383
+ sprintf(str_buff, "20%d-%d-%d V%d.%d", buff[17], buff[18], buff[19], buff[20], buff[21]);
384
+
385
+ OLED_ShowString(0,3, (uint8_t *)str_buff,0);
386
+
387
+ }
388
+
389
+ sensor_continuous_start(USE_UART2);
390
+
391
+ HAL_TIM_Base_Start_IT(&htim2);
392
+
393
+
394
+
395
+
396
+
397
+ /* USER CODE END 2 */
398
+
399
+
400
+
401
+ /* Infinite loop */
402
+
403
+ /* USER CODE BEGIN WHILE */
404
+
405
+ while (1)
406
+
407
+ {
408
+
409
+ /* USER CODE END WHILE */
410
+
411
+
412
+
413
+ /* USER CODE BEGIN 3 */
414
+
415
+ uart2_rx_done = false;
416
+
417
+ HAL_UART_Receive_IT(&huart2 ,buff, 2);
418
+
419
+ while(!uart2_rx_done);
420
+
421
+ if(buff[0] == 0x0a && buff[1] == 0x0d)
422
+
423
+ {
424
+
425
+ HAL_NVIC_DisableIRQ(TIM2_IRQn);
426
+
427
+ if(HAL_OK == HAL_UART_Receive(&huart2, buff+2, 0x0d, 10))
428
+
429
+ {
430
+
431
+ if(packet_parser(buff, data_buff) == 1)
432
+
433
+ {
434
+
435
+ dist = (data_buff[3]<<8)+data_buff[4];
436
+
437
+ mag_i = (data_buff[5] <<8) + data_buff[6];
438
+
439
+ mag_exp = data_buff[7];
440
+
441
+ mag = ((uint32_t)mag_i)<<(mag_exp);
442
+
443
+ ambient = data_buff[8];
444
+
445
+ dev[0] = 'U';
446
+
447
+ dev[1] = 'A';
448
+
449
+ dev[2] = 'R';
450
+
451
+ dev[3] = 'T';
452
+
453
+ dev[4] = '2';
454
+
455
+ dev[5] = 0;
456
+
457
+ }
458
+
459
+ }
460
+
461
+ HAL_NVIC_EnableIRQ(TIM2_IRQn);
462
+
463
+ }
464
+
465
+ buff[0] = 0;
466
+
467
+ buff[1] = 0;
468
+
469
+ }
470
+
471
+ /* USER CODE END 3 */
472
+
473
+
474
+
475
+ }
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+ ```