27
27
#endif
28
28
29
29
#if defined(STM32C0xx)
30
- #define VTEMP 760
30
+ #define VTEMP 760
31
31
#define AVG_SLOPE 2530
32
- #define VREFINT 1212
32
+ #define VREFINT 1212
33
33
#elif defined(STM32F1xx)
34
- #define VTEMP 1430
34
+ #define VTEMP 1430
35
35
#define AVG_SLOPE 4300
36
- #define VREFINT 1200
36
+ #define VREFINT 1200
37
37
#elif defined(STM32F2xx) || defined(STM32F4xx)
38
- #define VTEMP 760
38
+ #define VTEMP 760
39
39
#define AVG_SLOPE 2500
40
- #define VREFINT 1210
40
+ #define VREFINT 1210
41
41
#endif
42
42
43
43
/* Analog read resolution */
44
+ #if defined(LL_ADC_RESOLUTION_12B)
44
45
#define LL_ADC_RESOLUTION LL_ADC_RESOLUTION_12B
46
+ #elif defined(LL_ADC_DS_DATA_WIDTH_12_BIT)
47
+ #define LL_ADC_RESOLUTION LL_ADC_DS_DATA_WIDTH_12_BIT
48
+ #else
49
+ #error "ADC resolution could not be defined!"
50
+ #endif
45
51
#define ADC_RANGE 4096
46
52
47
53
// the setup routine runs once when you press reset:
48
54
void setup () {
49
55
// initialize serial communication at 9600 bits per second:
50
56
Serial.begin (9600 );
51
- while (!Serial);
57
+ while (!Serial)
58
+ ;
52
59
analogReadResolution (12 );
53
60
}
54
61
55
- static int32_t readVref ()
56
- {
62
+ #ifdef AVREF
63
+ static uint32_t readVref () {
64
+ uint32_t Vref = 3300 ;
57
65
#ifdef STM32U0xx
58
66
/* On some devices Internal voltage reference calibration value not programmed
59
67
during production and return 0xFFFF. See errata sheet. */
60
- if ((uint32_t )(*VREFINT_CAL_ADDR) == 0xFFFF ) {
61
- return 3300U ;
62
- }
68
+ if ((uint32_t )(*VREFINT_CAL_ADDR) != 0xFFFF ) {
63
69
#endif
64
70
#ifdef __LL_ADC_CALC_VREFANALOG_VOLTAGE
65
71
#ifdef STM32U5xx
66
- return ( __LL_ADC_CALC_VREFANALOG_VOLTAGE (ADC1, analogRead (AVREF), LL_ADC_RESOLUTION) );
72
+ Vref = __LL_ADC_CALC_VREFANALOG_VOLTAGE (ADC1, analogRead (AVREF), LL_ADC_RESOLUTION);
67
73
#else
68
- return ( __LL_ADC_CALC_VREFANALOG_VOLTAGE (analogRead (AVREF), LL_ADC_RESOLUTION) );
74
+ Vref = __LL_ADC_CALC_VREFANALOG_VOLTAGE (analogRead (AVREF), LL_ADC_RESOLUTION);
69
75
#endif
70
76
#else
71
- return (VREFINT * ADC_RANGE / analogRead (AVREF)); // ADC sample to mV
77
+ Vref = VREFINT * ADC_RANGE / analogRead (AVREF); // ADC sample to mV
78
+ #endif
79
+ #ifdef STM32U0xx
80
+ }
72
81
#endif
82
+ return Vref;
73
83
}
84
+ #endif
74
85
75
86
#ifdef ATEMP
76
- static int32_t readTempSensor (int32_t VRef)
77
- {
87
+ static int32_t readTempSensor (int32_t VRef) {
88
+ uint32_t temp = 0 ;
78
89
#ifdef __LL_ADC_CALC_TEMPERATURE
79
90
#ifdef STM32U5xx
80
- return (__LL_ADC_CALC_TEMPERATURE (ADC1, VRef, analogRead (ATEMP), LL_ADC_RESOLUTION));
91
+ temp = __LL_ADC_CALC_TEMPERATURE (ADC1, VRef, analogRead (ATEMP), LL_ADC_RESOLUTION);
92
+ #elif defined(STM32WB0x)
93
+ (void )VRef;
94
+ temp = __LL_ADC_CALC_TEMPERATURE (analogRead (ATEMP), LL_ADC_DS_DATA_WIDTH_12_BIT);
81
95
#else
82
- return ( __LL_ADC_CALC_TEMPERATURE (VRef, analogRead (ATEMP), LL_ADC_RESOLUTION) );
96
+ temp = __LL_ADC_CALC_TEMPERATURE (VRef, analogRead (ATEMP), LL_ADC_RESOLUTION);
83
97
#endif
84
98
#elif defined(__LL_ADC_CALC_TEMPERATURE_TYP_PARAMS)
85
- return (__LL_ADC_CALC_TEMPERATURE_TYP_PARAMS (AVG_SLOPE, VTEMP, CALX_TEMP, VRef, analogRead (ATEMP), LL_ADC_RESOLUTION));
86
- #else
87
- return 0 ;
99
+ temp = __LL_ADC_CALC_TEMPERATURE_TYP_PARAMS (AVG_SLOPE, VTEMP, CALX_TEMP, VRef, analogRead (ATEMP), LL_ADC_RESOLUTION);
88
100
#endif
101
+ return temp;
89
102
}
90
103
#endif
91
104
92
- static int32_t readVoltage (int32_t VRef, uint32_t pin)
93
- {
105
+ static int32_t readVoltage (int32_t VRef, uint32_t pin) {
94
106
#ifdef STM32U5xx
95
107
return (__LL_ADC_CALC_DATA_TO_VOLTAGE (ADC1, VRef, analogRead (pin), LL_ADC_RESOLUTION));
96
108
#else
@@ -100,7 +112,7 @@ static int32_t readVoltage(int32_t VRef, uint32_t pin)
100
112
101
113
// The loop routine runs over and over again forever:
102
114
void loop () {
103
- #if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
115
+ #if defined(ICACHE) && defined(HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
104
116
bool icache_enabled = false ;
105
117
if (HAL_ICACHE_IsEnabled () == 1 ) {
106
118
icache_enabled = true ;
@@ -110,9 +122,15 @@ void loop() {
110
122
}
111
123
}
112
124
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
125
+
113
126
// Print out the value read
127
+ #ifdef AVREF
114
128
int32_t VRef = readVref ();
115
129
Serial.printf (" VRef(mv)= %i" , VRef);
130
+ #else
131
+ // No Vref fro STM32WB0xx
132
+ int32_t VRef = LL_ADC_VIN_RANGE_3V6;
133
+ #endif
116
134
#ifdef ATEMP
117
135
Serial.printf (" \t Temp(°C)= %i" , readTempSensor (VRef));
118
136
#endif
@@ -121,9 +139,8 @@ void loop() {
121
139
#endif
122
140
Serial.printf (" \t A0(mv)= %i\n " , readVoltage (VRef, A0));
123
141
delay (200 );
124
- #if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
125
- if (icache_enabled)
126
- {
142
+ #if defined(ICACHE) && defined(HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
143
+ if (icache_enabled) {
127
144
/* Re-enable instruction cache */
128
145
if (HAL_ICACHE_Enable () != HAL_OK) {
129
146
Error_Handler ();
0 commit comments