Micro-controllers, wireless transmission and database
This project assumes you have already installed STM32CubeIDE. You need to have previously done a basic blink sketch with blue-pill using STM32CubeIDE. I have made a complete video from installing STM32CubeIDE to LED blink program. You can watch it by clicking this link. https://www.youtube.com/watch?v=kXg467nVd_A
Click RCC → High Speed Clock (HSE) to Crystal/Ceramic Resonator
Click Clock Configuration tab → HCLK (MHz) to 72
Click Pinout and Configuration tab
Click Timer → Click TIM2 →
Clock Source set to Internal Clock
Configuration → Parameter Settings →
Prescaler set to 71
Set PA3, PA4, PA5 and PA6 GPIO_Output
/* USER CODE BEGIN 0 */ #define IN1_PIN GPIO_PIN_6 #define IN1_PORT GPIOA #define IN2_PIN GPIO_PIN_5 #define IN2_PORT GPIOA #define IN3_PIN GPIO_PIN_4 #define IN3_PORT GPIOA #define IN4_PIN GPIO_PIN_3 #define IN4_PORT GPIOA void microDelay (uint16_t delay) { __HAL_TIM_SET_COUNTER(&htim2, 0); while (__HAL_TIM_GET_COUNTER(&htim2) < delay); } void stepCCV (int steps, uint16_t delay) // CCV - Counter Clockwise { for(int x=0; x<steps; x=x+1) { HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_SET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_SET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_SET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_SET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_SET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_SET); // IN4 microDelay(delay); } } void stepCV (int steps, uint16_t delay) // CV - Clockwise { for(int x=0; x<steps; x=x+1) { HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_SET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_SET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_SET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_SET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_SET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_SET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2 HAL_GPIO_WritePin(IN3_PORT, IN3_PIN, GPIO_PIN_RESET); // IN3 HAL_GPIO_WritePin(IN4_PORT, IN4_PIN, GPIO_PIN_RESET); // IN4 microDelay(delay); } } /* USER CODE END 0 */ /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { // 512 full rev & 1 rpm - 14648 stepCV(256, 1000); // 256 half revolution HAL_Delay(100); stepCCV(128, 1000); // 128 quarter revolution HAL_Delay(100); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */