Skip to content

Commit 6d861ce

Browse files
committed
chore: add STM32WB0 support to internal channel examples
Signed-off-by: Frederic Pillon <frederic.pillon@st.com>
1 parent 523b71e commit 6d861ce

File tree

1 file changed

+45
-28
lines changed

1 file changed

+45
-28
lines changed

examples/Peripherals/ADC/Internal_channels/Internal_channels.ino

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,70 +27,82 @@
2727
#endif
2828

2929
#if defined(STM32C0xx)
30-
#define VTEMP 760
30+
#define VTEMP 760
3131
#define AVG_SLOPE 2530
32-
#define VREFINT 1212
32+
#define VREFINT 1212
3333
#elif defined(STM32F1xx)
34-
#define VTEMP 1430
34+
#define VTEMP 1430
3535
#define AVG_SLOPE 4300
36-
#define VREFINT 1200
36+
#define VREFINT 1200
3737
#elif defined(STM32F2xx) || defined(STM32F4xx)
38-
#define VTEMP 760
38+
#define VTEMP 760
3939
#define AVG_SLOPE 2500
40-
#define VREFINT 1210
40+
#define VREFINT 1210
4141
#endif
4242

4343
/* Analog read resolution */
44+
#if defined(LL_ADC_RESOLUTION_12B)
4445
#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
4551
#define ADC_RANGE 4096
4652

4753
// the setup routine runs once when you press reset:
4854
void setup() {
4955
// initialize serial communication at 9600 bits per second:
5056
Serial.begin(9600);
51-
while (!Serial);
57+
while (!Serial)
58+
;
5259
analogReadResolution(12);
5360
}
5461

55-
static int32_t readVref()
56-
{
62+
#ifdef AVREF
63+
static uint32_t readVref() {
64+
uint32_t Vref = 3300;
5765
#ifdef STM32U0xx
5866
/* On some devices Internal voltage reference calibration value not programmed
5967
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) {
6369
#endif
6470
#ifdef __LL_ADC_CALC_VREFANALOG_VOLTAGE
6571
#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);
6773
#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);
6975
#endif
7076
#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+
}
7281
#endif
82+
return Vref;
7383
}
84+
#endif
7485

7586
#ifdef ATEMP
76-
static int32_t readTempSensor(int32_t VRef)
77-
{
87+
static int32_t readTempSensor(int32_t VRef) {
88+
uint32_t temp = 0;
7889
#ifdef __LL_ADC_CALC_TEMPERATURE
7990
#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);
8195
#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);
8397
#endif
8498
#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);
88100
#endif
101+
return temp;
89102
}
90103
#endif
91104

92-
static int32_t readVoltage(int32_t VRef, uint32_t pin)
93-
{
105+
static int32_t readVoltage(int32_t VRef, uint32_t pin) {
94106
#ifdef STM32U5xx
95107
return (__LL_ADC_CALC_DATA_TO_VOLTAGE(ADC1, VRef, analogRead(pin), LL_ADC_RESOLUTION));
96108
#else
@@ -100,7 +112,7 @@ static int32_t readVoltage(int32_t VRef, uint32_t pin)
100112

101113
// The loop routine runs over and over again forever:
102114
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)
104116
bool icache_enabled = false;
105117
if (HAL_ICACHE_IsEnabled() == 1) {
106118
icache_enabled = true;
@@ -110,9 +122,15 @@ void loop() {
110122
}
111123
}
112124
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
125+
113126
// Print out the value read
127+
#ifdef AVREF
114128
int32_t VRef = readVref();
115129
Serial.printf("VRef(mv)= %i", VRef);
130+
#else
131+
// No Vref fro STM32WB0xx
132+
int32_t VRef = LL_ADC_VIN_RANGE_3V6;
133+
#endif
116134
#ifdef ATEMP
117135
Serial.printf("\tTemp(°C)= %i", readTempSensor(VRef));
118136
#endif
@@ -121,9 +139,8 @@ void loop() {
121139
#endif
122140
Serial.printf("\tA0(mv)= %i\n", readVoltage(VRef, A0));
123141
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) {
127144
/* Re-enable instruction cache */
128145
if (HAL_ICACHE_Enable() != HAL_OK) {
129146
Error_Handler();

0 commit comments

Comments
 (0)