diff --git a/2.Firmware/ServoDrive-fw-ll/src/main.c b/2.Firmware/ServoDrive-fw-ll/src/main.c index 81642a1..06415ef 100644 --- a/2.Firmware/ServoDrive-fw-ll/src/main.c +++ b/2.Firmware/ServoDrive-fw-ll/src/main.c @@ -160,242 +160,6 @@ void SystemClock_Config(void) LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_HSI); } -/** - * @brief ADC Initialization Function - * @param None - * @retval None - */ -// static void MX_ADC_Init(void) -// { - -// /* USER CODE BEGIN ADC_Init 0 */ - -// /* USER CODE END ADC_Init 0 */ - -// LL_ADC_InitTypeDef ADC_InitStruct = {0}; -// LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = {0}; - -// LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - -// /* Peripheral clock enable */ -// LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_ADC1); - -// LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); -// /**ADC GPIO Configuration -// PA4 ------> ADC_IN4 -// */ -// GPIO_InitStruct.Pin = LL_GPIO_PIN_4; -// GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; -// GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; -// LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - -// /* ADC DMA Init */ - -// /* ADC Init */ -// LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_PERIPH_TO_MEMORY); - -// LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_LOW); - -// LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_CIRCULAR); - -// LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT); - -// LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT); - -// LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_HALFWORD); - -// LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_HALFWORD); - -// LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,1); -// LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_1,(uint32_t )&adcData); -// LL_DMA_SetPeriphAddress(DMA1,LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA)); - -// LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_1); - -// /* ADC interrupt Init */ -// // NVIC_SetPriority(ADC1_IRQn, 1); -// // NVIC_EnableIRQ(ADC1_IRQn); - -// /* USER CODE BEGIN ADC_Init 1 */ - -// /* USER CODE END ADC_Init 1 */ -// /** Configure Regular Channel -// */ -// LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_4); -// /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) -// */ -// ADC_InitStruct.Clock = LL_ADC_CLOCK_ASYNC; -// ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B; -// ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; -// ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE; -// LL_ADC_Init(ADC1, &ADC_InitStruct); -// ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE; -// ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE; -// ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_SINGLE; -// ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_UNLIMITED; -// ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_PRESERVED; -// LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct); -// LL_ADC_REG_SetSequencerScanDirection(ADC1, LL_ADC_REG_SEQ_SCAN_DIR_FORWARD); -// LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_1CYCLE_5); -// /* USER CODE BEGIN ADC_Init 2 */ -// LL_ADC_Enable(ADC1); -// // LL_ADC_StartCalibration(ADC1); -// // while( LL_ADC_IsCalibrationOnGoing(ADC1)); - -// LL_ADC_REG_StartConversion(ADC1); - -// LL_ADC_REG_SetDMATransfer(ADC1,LL_ADC_REG_DMA_TRANSFER_UNLIMITED); - -// /* USER CODE END ADC_Init 2 */ - -// } - -/** - * @brief TIM3 Initialization Function - * @param None - * @retval None - */ -// static void MX_TIM3_Init(void) -// { - -// /* USER CODE BEGIN TIM3_Init 0 */ - -// /* USER CODE END TIM3_Init 0 */ - -// LL_TIM_InitTypeDef TIM_InitStruct = {0}; -// LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0}; - -// LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - -// /* Peripheral clock enable */ -// LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3); - -// /* USER CODE BEGIN TIM3_Init 1 */ - -// /* USER CODE END TIM3_Init 1 */ -// TIM_InitStruct.Prescaler = 0; -// TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; -// TIM_InitStruct.Autoreload = 999; -// TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; -// LL_TIM_Init(TIM3, &TIM_InitStruct); -// LL_TIM_DisableARRPreload(TIM3); -// LL_TIM_OC_EnablePreload(TIM3, LL_TIM_CHANNEL_CH1); -// TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1; -// TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE; -// TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE; -// TIM_OC_InitStruct.CompareValue = 0; -// TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH; -// LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct); -// LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH1); -// LL_TIM_OC_EnablePreload(TIM3, LL_TIM_CHANNEL_CH2); -// LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct); -// LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH2); -// LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET); -// LL_TIM_DisableMasterSlaveMode(TIM3); -// /* USER CODE BEGIN TIM3_Init 2 */ - -// /* USER CODE END TIM3_Init 2 */ -// LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); -// /**TIM3 GPIO Configuration -// PA6 ------> TIM3_CH1 -// PA7 ------> TIM3_CH2 -// */ -// GPIO_InitStruct.Pin = LL_GPIO_PIN_6; -// GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; -// GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; -// GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; -// GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; -// GPIO_InitStruct.Alternate = LL_GPIO_AF_1; -// LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - -// GPIO_InitStruct.Pin = LL_GPIO_PIN_7; -// GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; -// GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; -// GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; -// GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; -// GPIO_InitStruct.Alternate = LL_GPIO_AF_1; -// LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - -// } - -// /** -// * @brief TIM14 Initialization Function -// * @param None -// * @retval None -// */ -// static void MX_TIM14_Init(void) -// { - -// /* USER CODE BEGIN TIM14_Init 0 */ - -// /* USER CODE END TIM14_Init 0 */ - -// LL_TIM_InitTypeDef TIM_InitStruct = {0}; - -// /* Peripheral clock enable */ -// LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM14); - -// /* TIM14 interrupt Init */ -// NVIC_SetPriority(TIM14_IRQn, 3); -// NVIC_EnableIRQ(TIM14_IRQn); - -// /* USER CODE BEGIN TIM14_Init 1 */ - -// /* USER CODE END TIM14_Init 1 */ -// TIM_InitStruct.Prescaler = 47; -// TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; -// TIM_InitStruct.Autoreload = 4999; -// TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; -// LL_TIM_Init(TIM14, &TIM_InitStruct); -// LL_TIM_DisableARRPreload(TIM14); -// /* USER CODE BEGIN TIM14_Init 2 */ - -// /* USER CODE END TIM14_Init 2 */ - -// } - -/** - * Enable DMA controller clock - */ -// static void MX_DMA_Init(void) -// { - -// /* Init with LL driver */ -// /* DMA controller clock enable */ -// LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1); - -// /* DMA interrupt init */ -// /* DMA1_Channel1_IRQn interrupt configuration */ -// // NVIC_SetPriority(DMA1_Channel1_IRQn, 0); -// // NVIC_EnableIRQ(DMA1_Channel1_IRQn); - -// } - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -// static void MX_GPIO_Init(void) -// { -// LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; - -// /* GPIO Ports Clock Enable */ -// LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); - -// /**/ -// LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_1); - -// /**/ -// GPIO_InitStruct.Pin = LL_GPIO_PIN_1; -// GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; -// GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; -// GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; -// GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; -// LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - -// } - /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ diff --git a/2.Firmware/ServoDrive-fw-ll/src/motor.cpp b/2.Firmware/ServoDrive-fw-ll/src/motor.cpp index 1cdcb1d..b7188a1 100644 --- a/2.Firmware/ServoDrive-fw-ll/src/motor.cpp +++ b/2.Firmware/ServoDrive-fw-ll/src/motor.cpp @@ -1,6 +1,5 @@ #include "motor.h" -//#include "tim.h" -#include"stm32f0xx_ll_tim.h" +#include "tim.h" float Motor::CalcDceOutput(float _inputPos, float _inputVel) { @@ -34,14 +33,14 @@ void Motor::SetPwm(int16_t _pwm) { // __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 0); // __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, _pwm > 1000 ? 1000 : _pwm); - LL_TIM_OC_SetCompareCH2(TIM3,0); - LL_TIM_OC_SetCompareCH1(TIM3,_pwm > 1000 ? 1000 : _pwm); + LL_TIM_OC_SetCompareCH1(TIM3,0); + LL_TIM_OC_SetCompareCH2(TIM3,_pwm > 1000 ? 1000 : _pwm); } else { // __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 0); // __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, _pwm < -1000 ? 1000 : -_pwm); - LL_TIM_OC_SetCompareCH2(TIM3,_pwm < -1000 ? 1000 : -_pwm); - LL_TIM_OC_SetCompareCH1(TIM3,0); + LL_TIM_OC_SetCompareCH1(TIM3,_pwm < -1000 ? 1000 : -_pwm); + LL_TIM_OC_SetCompareCH2(TIM3,0); } } else { diff --git a/2.Firmware/ServoDrive-fw-ll/src/stm32f0xx_it.c b/2.Firmware/ServoDrive-fw-ll/src/stm32f0xx_it.c index 3957d66..358e5e3 100644 --- a/2.Firmware/ServoDrive-fw-ll/src/stm32f0xx_it.c +++ b/2.Firmware/ServoDrive-fw-ll/src/stm32f0xx_it.c @@ -42,13 +42,12 @@ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ - +extern I2C_HandleTypeDef hi2c1; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN PFP */ -extern void TIM14_PeriodElapsedCallback(); -extern void i2c1_callback(); + /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ @@ -177,6 +176,7 @@ void TIM14_IRQHandler(void) /* USER CODE BEGIN TIM14_IRQn 0 */ TIM14_PeriodElapsedCallback(); LL_TIM_ClearFlag_UPDATE(TIM14); + /* USER CODE END TIM14_IRQn 0 */ /* USER CODE BEGIN TIM14_IRQn 1 */ @@ -186,7 +186,7 @@ void TIM14_IRQHandler(void) /** * @brief This function handles I2C1 event global interrupt / I2C1 wake-up interrupt through EXTI line 23. */ -extern I2C_HandleTypeDef hi2c1; + void I2C1_IRQHandler(void) { /* USER CODE BEGIN I2C1_IRQn 0 */