mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 17:28:36 -07:00
[FL-2969] FuriHal: add ADC API (#3583)
* Examples: remove unused context * FuriHal: add simple ADC API * Examples: add ADC example app * FuriHal: add extended configuration options for ADC API * FuriHal: add ADC clock configuration, fix calibration routine for single ended mode, new optimized parameters, documentation. * FuriHal: add FuriHalAdcChannelTEMPSENSOR sampling time note * FuriHal: update FuriHalAdcChannelVBAT description. * FuriHal: use insomnia while ADC is acquired. * Examples: cleanup example_adc a little bit
This commit is contained in:
@@ -31,6 +31,7 @@ void furi_hal_deinit_early(void) {
|
||||
|
||||
void furi_hal_init(void) {
|
||||
furi_hal_mpu_init();
|
||||
furi_hal_adc_init();
|
||||
furi_hal_clock_init();
|
||||
furi_hal_random_init();
|
||||
furi_hal_serial_control_init();
|
||||
|
||||
@@ -68,49 +68,161 @@ const GpioPin gpio_usb_dp = {.port = GPIOA, .pin = LL_GPIO_PIN_12};
|
||||
|
||||
const GpioPinRecord gpio_pins[] = {
|
||||
// 5V: 1
|
||||
{.pin = &gpio_ext_pa7, .name = "PA7", .number = 2, .debug = false},
|
||||
{.pin = &gpio_ext_pa6, .name = "PA6", .number = 3, .debug = false},
|
||||
{.pin = &gpio_ext_pa4, .name = "PA4", .number = 4, .debug = false},
|
||||
{.pin = &gpio_ext_pb3, .name = "PB3", .number = 5, .debug = false},
|
||||
{.pin = &gpio_ext_pb2, .name = "PB2", .number = 6, .debug = false},
|
||||
{.pin = &gpio_ext_pc3, .name = "PC3", .number = 7, .debug = false},
|
||||
{.pin = &gpio_ext_pa7,
|
||||
.name = "PA7",
|
||||
.channel = FuriHalAdcChannel12,
|
||||
.number = 2,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pa6,
|
||||
.name = "PA6",
|
||||
.channel = FuriHalAdcChannel11,
|
||||
.number = 3,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pa4,
|
||||
.name = "PA4",
|
||||
.channel = FuriHalAdcChannel9,
|
||||
.number = 4,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pb3,
|
||||
.name = "PB3",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 5,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pb2,
|
||||
.name = "PB2",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 6,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pc3,
|
||||
.name = "PC3",
|
||||
.channel = FuriHalAdcChannel4,
|
||||
.number = 7,
|
||||
.debug = false},
|
||||
// GND: 8
|
||||
// Space
|
||||
// 3v3: 9
|
||||
{.pin = &gpio_swclk, .name = "PA14", .number = 10, .debug = true},
|
||||
{.pin = &gpio_swclk,
|
||||
.name = "PA14",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 10,
|
||||
.debug = true},
|
||||
// GND: 11
|
||||
{.pin = &gpio_swdio, .name = "PA13", .number = 12, .debug = true},
|
||||
{.pin = &gpio_usart_tx, .name = "PB6", .number = 13, .debug = true},
|
||||
{.pin = &gpio_usart_rx, .name = "PB7", .number = 14, .debug = true},
|
||||
{.pin = &gpio_ext_pc1, .name = "PC1", .number = 15, .debug = false},
|
||||
{.pin = &gpio_ext_pc0, .name = "PC0", .number = 16, .debug = false},
|
||||
{.pin = &gpio_ibutton, .name = "PB14", .number = 17, .debug = true},
|
||||
{.pin = &gpio_swdio,
|
||||
.name = "PA13",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 12,
|
||||
.debug = true},
|
||||
{.pin = &gpio_usart_tx,
|
||||
.name = "PB6",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 13,
|
||||
.debug = true},
|
||||
{.pin = &gpio_usart_rx,
|
||||
.name = "PB7",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 14,
|
||||
.debug = true},
|
||||
{.pin = &gpio_ext_pc1,
|
||||
.name = "PC1",
|
||||
.channel = FuriHalAdcChannel2,
|
||||
.number = 15,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pc0,
|
||||
.name = "PC0",
|
||||
.channel = FuriHalAdcChannel1,
|
||||
.number = 16,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ibutton,
|
||||
.name = "PB14",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 17,
|
||||
.debug = true},
|
||||
// GND: 18
|
||||
|
||||
// 2nd column
|
||||
// 5V: 19
|
||||
{.pin = &gpio_ext_pc5, .name = "PC5", .number = 20, .debug = false},
|
||||
{.pin = &gpio_ext_pc4, .name = "PC4", .number = 21, .debug = false},
|
||||
{.pin = &gpio_ext_pa5, .name = "PA5", .number = 22, .debug = false},
|
||||
{.pin = &gpio_ext_pb9, .name = "PB9", .number = 23, .debug = false},
|
||||
{.pin = &gpio_ext_pa0, .name = "PA0", .number = 24, .debug = false},
|
||||
{.pin = &gpio_ext_pa1, .name = "PA1", .number = 25, .debug = false},
|
||||
{.pin = &gpio_ext_pc5,
|
||||
.name = "PC5",
|
||||
.channel = FuriHalAdcChannel14,
|
||||
.number = 20,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pc4,
|
||||
.name = "PC4",
|
||||
.channel = FuriHalAdcChannel13,
|
||||
.number = 21,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pa5,
|
||||
.name = "PA5",
|
||||
.channel = FuriHalAdcChannel10,
|
||||
.number = 22,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pb9,
|
||||
.name = "PB9",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 23,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pa0,
|
||||
.name = "PA0",
|
||||
.channel = FuriHalAdcChannel5,
|
||||
.number = 24,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pa1,
|
||||
.name = "PA1",
|
||||
.channel = FuriHalAdcChannel6,
|
||||
.number = 25,
|
||||
.debug = false},
|
||||
// KEY: 26
|
||||
// Space
|
||||
// 3v3: 27
|
||||
{.pin = &gpio_ext_pa15, .name = "PA15", .number = 28, .debug = false},
|
||||
{.pin = &gpio_ext_pa15,
|
||||
.name = "PA15",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 28,
|
||||
.debug = false},
|
||||
// GND: 29
|
||||
{.pin = &gpio_ext_pe4, .name = "PE4", .number = 30, .debug = false},
|
||||
{.pin = &gpio_ext_pa2, .name = "PA2", .number = 31, .debug = false},
|
||||
{.pin = &gpio_ext_pb4, .name = "PB4", .number = 32, .debug = false},
|
||||
{.pin = &gpio_ext_pb5, .name = "PB5", .number = 33, .debug = false},
|
||||
{.pin = &gpio_ext_pd0, .name = "PD0", .number = 34, .debug = false},
|
||||
{.pin = &gpio_ext_pb13, .name = "PB13", .number = 35, .debug = false},
|
||||
{.pin = &gpio_ext_pe4,
|
||||
.name = "PE4",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 30,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pa2,
|
||||
.name = "PA2",
|
||||
.channel = FuriHalAdcChannel7,
|
||||
.number = 31,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pb4,
|
||||
.name = "PB4",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 32,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pb5,
|
||||
.name = "PB5",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 33,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pd0,
|
||||
.name = "PD0",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 34,
|
||||
.debug = false},
|
||||
{.pin = &gpio_ext_pb13,
|
||||
.name = "PB13",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 35,
|
||||
.debug = false},
|
||||
// GND: 36
|
||||
|
||||
/* Dangerous pins, may damage hardware */
|
||||
{.pin = &gpio_usart_rx, .name = "PB7", .number = 0, .debug = true},
|
||||
{.pin = &gpio_speaker, .name = "PB8", .number = 0, .debug = true},
|
||||
{.pin = &gpio_usart_rx,
|
||||
.name = "PB7",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 0,
|
||||
.debug = true},
|
||||
{.pin = &gpio_speaker,
|
||||
.name = "PB8",
|
||||
.channel = FuriHalAdcChannelNone,
|
||||
.number = 0,
|
||||
.debug = true},
|
||||
};
|
||||
|
||||
const size_t gpio_pins_count = COUNT_OF(gpio_pins);
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <furi.h>
|
||||
|
||||
#include <stm32wbxx.h>
|
||||
#include <stm32wbxx_ll_gpio.h>
|
||||
#include <furi_hal_adc.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -41,6 +39,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
const GpioPin* pin;
|
||||
const char* name;
|
||||
const FuriHalAdcChannel channel;
|
||||
const uint8_t number;
|
||||
const bool debug;
|
||||
} GpioPinRecord;
|
||||
|
||||
Reference in New Issue
Block a user