@@ -58,8 +58,8 @@ UART_HandleTypeDef huart6;
5858/* USER CODE BEGIN PV */
5959
6060// Odometry
61- Encoder right_encoder = Encoder(&htim5, RIGHT_TICKS_PER_METER );
62- Encoder left_encoder = Encoder(&htim2, LEFT_TICKS_PER_METER );
61+ Encoder right_encoder = Encoder(&htim5, RIGHT_WHEEL_CIRCUMFERENCE );
62+ Encoder left_encoder = Encoder(&htim2, LEFT_WHEEL_CIRCUMFERENCE );
6363Odometry odom = Odometry();
6464
6565float left_velocity;
@@ -75,25 +75,25 @@ int left_dutycycle;
7575int right_dutycycle;
7676
7777// MotorController
78- MotorController left_motor (sleep1_GPIO_Port,
78+ MotorController right_motor (sleep1_GPIO_Port,
7979sleep1_Pin,
80- dir1_GPIO_Port,
81- dir1_Pin,
82- &htim4,
83- TIM_CHANNEL_4 );
84- MotorController right_motor (sleep2_GPIO_Port,
85- sleep2_Pin,
86- dir2_GPIO_Port,
87- dir2_Pin,
80+ dir1_GPIO_Port,
81+ dir1_Pin,
8882 &htim4,
89- TIM_CHANNEL_3 );
83+ TIM_CHANNEL_4 );
84+ MotorController left_motor (sleep2_GPIO_Port,
85+ sleep2_Pin,
86+ dir2_GPIO_Port,
87+ dir2_Pin,
88+ &htim4,
89+ TIM_CHANNEL_3 );
9090
9191// Communication
9292uint8_t *tx_buffer;
9393uint8_t *rx_buffer;
9494
95- odometry_msg odom_msg;
9695velocity_msg vel_msg;
96+ wheel_msg wheels_msg;
9797
9898uint8_t mode = 0 ; // setup mode
9999
@@ -160,18 +160,16 @@ int main(void) {
160160
161161 left_motor.setup ();
162162 right_motor.setup ();
163+
163164 left_motor.coast ();
164165 right_motor.coast ();
165166
166- tx_buffer = (uint8_t *) &odom_msg ;
167+ tx_buffer = (uint8_t *) &wheels_msg ;
167168 rx_buffer = (uint8_t *) &vel_msg;
168169
169170 // Enables UART RX interrupt
170171 HAL_UART_Receive_IT (&huart6, rx_buffer, 8 );
171172
172- // Enables TIM6 interrupt (used for periodic transmission)
173- HAL_TIM_Base_Start_IT (&htim6);
174-
175173 /* USER CODE END 2 */
176174
177175 /* Infinite loop */
@@ -193,11 +191,11 @@ void SystemClock_Config(void) {
193191 RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };
194192 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = { 0 };
195193
196- /* * Configure the main internal regulator output voltage
194+ /* * Configure the main internal regulator output voltage
197195 */
198196 __HAL_RCC_PWR_CLK_ENABLE ();
199197 __HAL_PWR_VOLTAGESCALING_CONFIG (PWR_REGULATOR_VOLTAGE_SCALE3 );
200- /* * Initializes the CPU, AHB and APB busses clocks
198+ /* * Initializes the CPU, AHB and APB busses clocks
201199 */
202200 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI ;
203201 RCC_OscInitStruct.HSIState = RCC_HSI_ON ;
@@ -206,7 +204,7 @@ void SystemClock_Config(void) {
206204 if (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK ) {
207205 Error_Handler ();
208206 }
209- /* * Initializes the CPU, AHB and APB busses clocks
207+ /* * Initializes the CPU, AHB and APB busses clocks
210208 */
211209 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
212210 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 ;
@@ -237,7 +235,7 @@ static void MX_NVIC_Init(void) {
237235 HAL_NVIC_SetPriority (TIM6_DAC_IRQn, 2 , 2 );
238236 HAL_NVIC_EnableIRQ (TIM6_DAC_IRQn);
239237 /* USART6_IRQn interrupt configuration */
240- HAL_NVIC_SetPriority (USART6_IRQn, 2 , 0 );
238+ HAL_NVIC_SetPriority (USART6_IRQn, 1 , 0 );
241239 HAL_NVIC_EnableIRQ (USART6_IRQn);
242240}
243241
@@ -481,9 +479,9 @@ static void MX_USART6_UART_Init(void) {
481479 /* USER CODE END USART6_Init 1 */
482480 huart6.Instance = USART6 ;
483481 huart6.Init .BaudRate = 115200 ;
484- huart6.Init .WordLength = UART_WORDLENGTH_9B ;
482+ huart6.Init .WordLength = UART_WORDLENGTH_8B ;
485483 huart6.Init .StopBits = UART_STOPBITS_1 ;
486- huart6.Init .Parity = UART_PARITY_ODD ;
484+ huart6.Init .Parity = UART_PARITY_NONE ;
487485 huart6.Init .Mode = UART_MODE_TX_RX ;
488486 huart6.Init .HwFlowCtl = UART_HWCONTROL_NONE ;
489487 huart6.Init .OverSampling = UART_OVERSAMPLING_16 ;
@@ -591,14 +589,16 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
591589 left_dutycycle += cross_dutycycle;
592590 right_dutycycle -= cross_dutycycle;
593591
592+ wheels_msg.left_vel = left_velocity;
593+ wheels_msg.right_vel = right_velocity;
594+
594595 }
595596
596597 // TIMER 2Hz Transmit
597598 if (htim->Instance == TIM6 ) {
598599
599600 // TODO odometry
600-
601- HAL_UART_Transmit (&huart6, tx_buffer, 8 , 100 );
601+ HAL_UART_Transmit_IT (&huart6, tx_buffer, 8 );
602602 }
603603}
604604
@@ -625,6 +625,8 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
625625 mode = 1 ;
626626 // Enables TIM3 interrupt (used for PID control)
627627 HAL_TIM_Base_Start_IT (&htim3);
628+ // Enables TIM6 interrupt (used for periodic transmission)
629+ HAL_TIM_Base_Start_IT (&htim6);
628630
629631 }
630632
0 commit comments