Sergii Kaplia
/
Internal_Temperature_F103RB1
test
main.cpp@2:bd6594739176, 2016-03-28 (annotated)
- Committer:
- hudakz
- Date:
- Mon Mar 28 08:14:41 2016 +0000
- Revision:
- 2:bd6594739176
- Parent:
- 1:09a5e83ea18f
- Child:
- 4:f5c604b5eceb
Updated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 2:bd6594739176 | 1 | /* |
hudakz | 2:bd6594739176 | 2 | * Reading built-in temperature sensor of STM32F103RB chip on NUCLEO-F103RB board |
hudakz | 2:bd6594739176 | 3 | */ |
hudakz | 0:dfdf46225b14 | 4 | |
hudakz | 0:dfdf46225b14 | 5 | #include "mbed.h" |
hudakz | 0:dfdf46225b14 | 6 | |
hudakz | 2:bd6594739176 | 7 | /* |
hudakz | 2:bd6594739176 | 8 | * STM32F103x data-sheet: |
hudakz | 2:bd6594739176 | 9 | * 5.3.19 Temperature sensor characteristics |
hudakz | 2:bd6594739176 | 10 | * Table 50. TS characteristics, Page 80 |
hudakz | 2:bd6594739176 | 11 | */ |
hudakz | 0:dfdf46225b14 | 12 | const float AVG_SLOPE = 4.3E-03; |
hudakz | 0:dfdf46225b14 | 13 | const float V25 = 1.43; |
hudakz | 0:dfdf46225b14 | 14 | const float ACD_TO_VOLT = 3.3 / 4096; |
hudakz | 0:dfdf46225b14 | 15 | |
hudakz | 0:dfdf46225b14 | 16 | Serial pc(USBTX, USBRX); |
hudakz | 2:bd6594739176 | 17 | DigitalOut led(LED1); |
hudakz | 0:dfdf46225b14 | 18 | ADC_HandleTypeDef hadc1; |
hudakz | 2:bd6594739176 | 19 | uint16_t adcValue; |
hudakz | 0:dfdf46225b14 | 20 | float temp; |
hudakz | 0:dfdf46225b14 | 21 | |
hudakz | 0:dfdf46225b14 | 22 | /* ADC1 init function */ |
hudakz | 0:dfdf46225b14 | 23 | void MX_ADC1_Init(void) { |
hudakz | 0:dfdf46225b14 | 24 | ADC_ChannelConfTypeDef sConfig; |
hudakz | 0:dfdf46225b14 | 25 | |
hudakz | 0:dfdf46225b14 | 26 | /**Common config |
hudakz | 0:dfdf46225b14 | 27 | */ |
hudakz | 0:dfdf46225b14 | 28 | hadc1.Instance = ADC1; |
hudakz | 0:dfdf46225b14 | 29 | hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; |
hudakz | 0:dfdf46225b14 | 30 | hadc1.Init.ContinuousConvMode = DISABLE; |
hudakz | 0:dfdf46225b14 | 31 | hadc1.Init.DiscontinuousConvMode = DISABLE; |
hudakz | 0:dfdf46225b14 | 32 | hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; |
hudakz | 0:dfdf46225b14 | 33 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; |
hudakz | 0:dfdf46225b14 | 34 | hadc1.Init.NbrOfConversion = 1; |
hudakz | 0:dfdf46225b14 | 35 | HAL_ADC_Init(&hadc1); |
hudakz | 0:dfdf46225b14 | 36 | |
hudakz | 0:dfdf46225b14 | 37 | /**Configure Regular Channel |
hudakz | 0:dfdf46225b14 | 38 | */ |
hudakz | 0:dfdf46225b14 | 39 | sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; |
hudakz | 0:dfdf46225b14 | 40 | sConfig.Rank = 1; |
hudakz | 0:dfdf46225b14 | 41 | sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; |
hudakz | 0:dfdf46225b14 | 42 | HAL_ADC_ConfigChannel(&hadc1, &sConfig); |
hudakz | 0:dfdf46225b14 | 43 | } |
hudakz | 0:dfdf46225b14 | 44 | |
hudakz | 0:dfdf46225b14 | 45 | int main() { |
hudakz | 0:dfdf46225b14 | 46 | MX_ADC1_Init(); |
hudakz | 0:dfdf46225b14 | 47 | while(HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK); |
hudakz | 0:dfdf46225b14 | 48 | |
hudakz | 0:dfdf46225b14 | 49 | while(1) { |
hudakz | 2:bd6594739176 | 50 | /* |
hudakz | 2:bd6594739176 | 51 | * STM32F103xx Reference Manual: |
hudakz | 2:bd6594739176 | 52 | * 11.10 Temperature sensor |
hudakz | 2:bd6594739176 | 53 | * Reading the temperature, Page 235 |
hudakz | 2:bd6594739176 | 54 | */ |
hudakz | 0:dfdf46225b14 | 55 | HAL_ADC_Start(&hadc1); |
hudakz | 1:09a5e83ea18f | 56 | while(HAL_ADC_PollForConversion(&hadc1, 1000000) != HAL_OK); |
hudakz | 0:dfdf46225b14 | 57 | adcValue = HAL_ADC_GetValue(&hadc1); |
hudakz | 0:dfdf46225b14 | 58 | temp = (V25 - adcValue * ACD_TO_VOLT) / AVG_SLOPE + 25.0f; |
hudakz | 0:dfdf46225b14 | 59 | pc.printf("temp = %3.1f%cC\n", temp, 176); |
hudakz | 2:bd6594739176 | 60 | led = !led; |
hudakz | 0:dfdf46225b14 | 61 | wait_ms(1000); |
hudakz | 0:dfdf46225b14 | 62 | } |
hudakz | 0:dfdf46225b14 | 63 | } |