main.c 7.24 KB
Newer Older
Charles Sirois's avatar
Charles Sirois committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
24
#include "can.h"
Charles Sirois's avatar
Charles Sirois committed
25
26
#include "dma.h"
#include "spi.h"
27
#include "tim.h"
Charles Sirois's avatar
Charles Sirois committed
28
29
30
31
32
33
34
35
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "bsp_oled.h"
#include "bsp_usart.h"
36
37
38
39
40
41
42
43
44
#include "bsp_key.h"
#include "bsp_led.h"
#include "bsp_can.h"
#include "bsp_pwm.h"
#include "bsp_uart.h"


#include "pid.h"
#include "motor.h"
Charles Sirois's avatar
Charles Sirois committed
45
46
#include "oled.h"
#include "string.h"
47
#include "list_motor.h"
Charles Sirois's avatar
Charles Sirois committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
69
70
71
int16_t led_cnt;
float target_speed;

Baptiste Toussaint's avatar
Baptiste Toussaint committed
72
extern RC_ctrl_t rc_ctrl;	
73
74
75
//uint16_t pwm_pulse = 1080;  // default pwm pulse width:1080~1920


Charles Sirois's avatar
Charles Sirois committed
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

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  MX_SPI1_Init();
123
124
  MX_CAN1_Init();
  MX_TIM1_Init();
Charles Sirois's avatar
Charles Sirois committed
125
  /* USER CODE BEGIN 2 */
126
	HAL_GPIO_WritePin(GPIOH, POWER1_CTRL_Pin|POWER2_CTRL_Pin|POWER3_CTRL_Pin|POWER4_CTRL_Pin, GPIO_PIN_SET); // switch on 24v power
Charles Sirois's avatar
Charles Sirois committed
127
	
128
129
130
131
	/* open dbus uart receive it */
	dbus_uart_init();
	
	//Init OLED
Charles Sirois's avatar
Charles Sirois committed
132
133
134
135
136
137
	oled_init();
	oled_clear(Pen_Clear);
	oled_LOGO();
	oled_refresh_gram();
	
	HAL_GPIO_WritePin(LED_A_GPIO_Port, LED_A_Pin, GPIO_PIN_RESET);
138
	HAL_Delay(10);  
Charles Sirois's avatar
Charles Sirois committed
139
140
141
142
	
	oled_clear(Pen_Clear);
	oled_refresh_gram();
	
143
144
145
	
	can_user_init(&hcan1);                   // config can filter, start can
	pwm_init();                              // start pwm output
Baptiste Toussaint's avatar
Baptiste Toussaint committed
146
	motors_all_init();
147
148
	//PWM_ScaleAll(&htim1);									   // etalonnage du PWM entre 0 et 1 (a faire uniquement lors de l'installation des moteurs la 1ere fois) 

Charles Sirois's avatar
Charles Sirois committed
149
  /* USER CODE END 2 */
150
151
 
 
Charles Sirois's avatar
Charles Sirois committed
152
153
154
155
156
157

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
158
159
160

    /* USER CODE BEGIN 3 */
		
161
162
163
164
		/******************************************************************/
		/*				PENSER A CHANGER LE TYPE DE ROBOT SI BESOIN							*/
		/*				(aller dans motor.h et changer ROBOT_TYPE)							*/
		/******************************************************************/
Baptiste Toussaint's avatar
Baptiste Toussaint committed
165
		
166
167
		/* scan if key is pressed down */
    if (key_scan())
Baptiste Toussaint's avatar
m2006    
Baptiste Toussaint committed
168
    {
169
170
			/* put here the actions you want to do when key is pressed */
    }
Baptiste Toussaint's avatar
Baptiste Toussaint committed
171
		
172
173
		/* Setting the target for all motors according to the data received from the remote controler */
		set_all_targets_from_rc(); 
Baptiste Toussaint's avatar
Baptiste Toussaint committed
174
		
175
176
		/* Command all motors according to the target fixed */
		command_all_motors();
177
178

		/*Affichage de donnees sur le OLED*/
179
		oled_clear(Pen_Clear);
Nathan Girard's avatar
Nathan Girard committed
180
181
182
183
		oled_printf(1, 1,"  Down: %i", gm6020_down.MAX_POSITION);
		oled_printf(2, 1,"  Up: %i", gm6020_down.MIN_POSITION);
		oled_printf(3, 1,"  Target: %f", gm6020_down.target);
		oled_printf(4, 1,"  Target: %i", rc_ctrl.rc.ch[3]);
Baptiste Toussaint's avatar
Baptiste Toussaint committed
184
		oled_refresh_gram();
185
186
187
188
189
190
191
192
193
194
		
     /* led blink */
    led_cnt ++;
    if (led_cnt == 250)
    {
      led_cnt = 0;
      LED_RED_TOGGLE(); //blink cycle 500ms
    }
		
		HAL_Delay(10);	
Charles Sirois's avatar
Charles Sirois committed
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage 
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 6;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */

  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{ 
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/