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 PB9 GPIO_Output
Set PB8 GPIO_Input
/* USER CODE BEGIN 0 */ #define DT_PIN GPIO_PIN_8 #define DT_PORT GPIOB #define SCK_PIN GPIO_PIN_9 #define SCK_PORT GPIOB uint32_t tare = 0; float knownOriginal = 1; // in milli gram float knownHX711 = 1; int weight; void microDelay(uint16_t delay) { __HAL_TIM_SET_COUNTER(&htim2, 0); while (__HAL_TIM_GET_COUNTER(&htim2) < delay); } int32_t getHX711(void) { uint32_t data = 0; uint32_t startTime = HAL_GetTick(); while(HAL_GPIO_ReadPin(DT_PORT, DT_PIN) == GPIO_PIN_SET) { if(HAL_GetTick() - startTime > 200) return 0; } for(int8_t len=0; len<24 ; len++) { HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_SET); microDelay(1); data = data << 1; HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_RESET); microDelay(1); if(HAL_GPIO_ReadPin(DT_PORT, DT_PIN) == GPIO_PIN_SET) data ++; } data = data ^ 0x800000; HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_SET); microDelay(1); HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_RESET); microDelay(1); return data; } int weigh() { int32_t total = 0; int32_t samples = 50; int milligram; float coefficient; for(uint16_t i=0 ; i<samples ; i++) { total += getHX711(); } int32_t average = (int32_t)(total / samples); coefficient = knownOriginal / knownHX711; milligram = (int)(average-tare)*coefficient; return milligram; } /* USER CODE END 0 */ /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim2); HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_SET); HAL_Delay(10); HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_RESET); HAL_Delay(10); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { weight = weigh(); // in milligram /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */