Motor Shield Example code for 2.74 Class @ MIT
Dependents: experiment_example motor_shield_example Lab3_experiment_example jumping_leg_clicky
HardwareSetup.cpp
- Committer:
- elijahsj
- Date:
- 2020-08-25
- Revision:
- 1:4c3c2b7337a6
- Child:
- 2:30503be9a375
File content as of revision 1:4c3c2b7337a6:
#include "mbed.h" #include "HardwareSetup.h" #include "stm32h7xx_hal.h" TIM_HandleTypeDef htim12; TIM_HandleTypeDef htim15; TIM_HandleTypeDef htim13; TIM_HandleTypeDef htim14; TIM_HandleTypeDef htim16; TIM_HandleTypeDef htim17; void SystemClock_Config(void); void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim); static void MX_TIM12_Init(void); void initHardware(){ /* Initialise the HAL Layer */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_TIM12_Init(); HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1); // start pwm generation HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_2); // start pwm generation } static void MX_TIM12_Init(void) { /* USER CODE BEGIN TIM12_Init 0 */ /* USER CODE END TIM12_Init 0 */ __HAL_RCC_TIM12_CLK_ENABLE(); TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM12_Init 1 */ /* USER CODE END TIM12_Init 1 */ htim12.Instance = TIM12; htim12.Init.Prescaler = 0; htim12.Init.CounterMode = TIM_COUNTERMODE_UP; htim12.Init.Period = PWM_PERIOD; htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim12) != HAL_OK) { //Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { //Error_Handler(); } if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { //Error_Handler(); } /* USER CODE BEGIN TIM12_Init 2 */ /* USER CODE END TIM12_Init 2 */ HAL_TIM_MspPostInit(&htim12); } void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) { /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; if(htim->Instance==TIM12) { /**TIM12 GPIO Configuration PB14 ------> TIM12_CH1 PB15 ------> TIM12_CH2 */ GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM12; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN TIM12_MspPostInit 1 */ /* USER CODE END TIM12_MspPostInit 1 */ } else if(htim->Instance==TIM13) { /* USER CODE BEGIN TIM13_MspPostInit 0 */ /* USER CODE END TIM13_MspPostInit 0 */ __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM13 GPIO Configuration PA6 ------> TIM13_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF9_TIM13; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN TIM13_MspPostInit 1 */ /* USER CODE END TIM13_MspPostInit 1 */ } else if(htim->Instance==TIM14) { /* USER CODE BEGIN TIM14_MspPostInit 0 */ /* USER CODE END TIM14_MspPostInit 0 */ __HAL_RCC_GPIOF_CLK_ENABLE(); /**TIM14 GPIO Configuration PF9 ------> TIM14_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF9_TIM14; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); /* USER CODE BEGIN TIM14_MspPostInit 1 */ /* USER CODE END TIM14_MspPostInit 1 */ } else if(htim->Instance==TIM15) { /* USER CODE BEGIN TIM15_MspPostInit 0 */ /* USER CODE END TIM15_MspPostInit 0 */ __HAL_RCC_GPIOE_CLK_ENABLE(); /**TIM15 GPIO Configuration PE5 ------> TIM15_CH1 PE6 ------> TIM15_CH2 */ GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF4_TIM15; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* USER CODE BEGIN TIM15_MspPostInit 1 */ /* USER CODE END TIM15_MspPostInit 1 */ } else if(htim->Instance==TIM16) { /* USER CODE BEGIN TIM16_MspPostInit 0 */ /* USER CODE END TIM16_MspPostInit 0 */ __HAL_RCC_GPIOF_CLK_ENABLE(); /**TIM16 GPIO Configuration PF6 ------> TIM16_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM16; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); /* USER CODE BEGIN TIM16_MspPostInit 1 */ /* USER CODE END TIM16_MspPostInit 1 */ } else if(htim->Instance==TIM17) { /* USER CODE BEGIN TIM17_MspPostInit 0 */ /* USER CODE END TIM17_MspPostInit 0 */ __HAL_RCC_GPIOF_CLK_ENABLE(); /**TIM17 GPIO Configuration PF7 ------> TIM17_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM17; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); /* USER CODE BEGIN TIM17_MspPostInit 1 */ /* USER CODE END TIM17_MspPostInit 1 */ } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; /** Supply configuration update enable */ HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); /** Configure the main internal regulator output voltage */ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} /** Macro to configure the PLL clock source */ __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSI); /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; 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_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1; RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { //Error_Handler(); } }