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 connectivity --> Click CAN --> Mode --> Activated
Parameter Settings --> Prescalor 72 & Time Quanta in Bit Segment1 - 2 Times (Baud 125000)
Set PB9 to CAN_TX (PB8 will auto set to CAN_RX)
ADC1 - IN9 (tick)
Parameter Settings --> ADC Settings --> Continuous Conversion Mode (Enabled)
Click Clock Configuration tab → Set ADC Prescalor to /6
/* USER CODE BEGIN 0 */ uint16_t readValue; CAN_TxHeaderTypeDef TxHeader; uint32_t TxMailbox; uint8_t TxData[8]="NIZAR---"; /* USER CODE END 0 */ /* USER CODE BEGIN 2 */ HAL_ADC_Start(&hadc1); HAL_CAN_Start(&hcan); TxHeader.DLC = 8; // data length TxHeader.IDE = CAN_ID_STD; TxHeader.RTR = CAN_RTR_DATA; TxHeader.StdId = 0x6A5; // ID can be between Hex1 and Hex7FF (1-2047 decimal) /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_ADC_PollForConversion(&hadc1,1000); readValue = HAL_ADC_GetValue(&hadc1); // readValue is between 0-4095 but we need to transmit maximum 255 (one byte) // We divide readValue by 16 to get 0-255. Better way to divide is by shifting bits // (readValue >> 4) is same as (readValue / 16) TxData[7] = readValue >> 4; HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); HAL_Delay(1000); /* USER CODE END WHILE */
Click RCC → High Speed Clock (HSE) to Crystal/Ceramic Resonator
Click Clock Configuration tab → HCLK (MHz) to 72
Click Pinout and Configuration tab
Click connectivity --> Click CAN --> Mode --> Activated
Parameter Settings --> Prescalor 72 & Time Quanta in Bit Segment1 - 2 Times (Baud 125000)
NVIC Settings --> CAN RX1 Interrupt (tick)
Set PB9 to CAN_TX (PB8 will auto set to CAN_RX)
Set PC13 to GPIO_Output
/* USER CODE BEGIN 0 */ CAN_FilterTypeDef sFilterConfig; CAN_RxHeaderTypeDef RxHeader; uint8_t RxData[8]; uint8_t delayLED; void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) { HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader, RxData); delayLED = RxData[7]; } /* USER CODE END 0 */ /* USER CODE BEGIN 2 */ HAL_CAN_Start(&hcan); // Configure the filter sFilterConfig.FilterActivation = CAN_FILTER_ENABLE; sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO1; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterIdHigh = 0x6A5<<5; sFilterConfig.FilterIdLow = 0; sFilterConfig.FilterMaskIdHigh = 0x7FF<<5; // SET 0 to unfilter sFilterConfig.FilterMaskIdLow = 0; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; HAL_CAN_ConfigFilter(&hcan, &sFilterConfig); // Activate the notification HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO1_MSG_PENDING); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(delayLED); /* USER CODE END WHILE */