aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-12-08 19:30:50 +0000
committerGitHub <[email protected]>2023-12-08 19:30:50 +0000
commita9ec623622de294478506630c02bb003a9e15734 (patch)
tree100cf3c9b11b0d181d6866074cc36e42568bca11 /tests
parentc94a9b8d75ef938aaeb3df18c1eaeb996d655ba0 (diff)
parentfe218ed978a76014b45410e188f974e20adba1a0 (diff)
Merge pull request #2246 from CaptainMaso/adc_f3_v1_1
stm32: add ADC f3_v1_1
Diffstat (limited to 'tests')
-rw-r--r--tests/stm32/Cargo.toml17
-rw-r--r--tests/stm32/src/bin/dac.rs5
-rw-r--r--tests/stm32/src/bin/dac_l1.rs86
-rw-r--r--tests/stm32/src/common.rs9
4 files changed, 105 insertions, 12 deletions
diff --git a/tests/stm32/Cargo.toml b/tests/stm32/Cargo.toml
index c37d89a40..4f53e84f0 100644
--- a/tests/stm32/Cargo.toml
+++ b/tests/stm32/Cargo.toml
@@ -10,14 +10,14 @@ stm32c031c6 = ["embassy-stm32/stm32c031c6", "cm0", "not-gpdma"]
10stm32f103c8 = ["embassy-stm32/stm32f103c8", "not-gpdma"] 10stm32f103c8 = ["embassy-stm32/stm32f103c8", "not-gpdma"]
11stm32f207zg = ["embassy-stm32/stm32f207zg", "chrono", "not-gpdma", "eth", "rng"] 11stm32f207zg = ["embassy-stm32/stm32f207zg", "chrono", "not-gpdma", "eth", "rng"]
12stm32f303ze = ["embassy-stm32/stm32f303ze", "chrono", "not-gpdma"] 12stm32f303ze = ["embassy-stm32/stm32f303ze", "chrono", "not-gpdma"]
13stm32f429zi = ["embassy-stm32/stm32f429zi", "chrono", "eth", "stop", "can", "not-gpdma", "dac-adc-pin", "rng"] 13stm32f429zi = ["embassy-stm32/stm32f429zi", "chrono", "eth", "stop", "can", "not-gpdma", "dac", "rng"]
14stm32f446re = ["embassy-stm32/stm32f446re", "chrono", "stop", "can", "not-gpdma", "dac-adc-pin", "sdmmc"] 14stm32f446re = ["embassy-stm32/stm32f446re", "chrono", "stop", "can", "not-gpdma", "dac", "sdmmc"]
15stm32f767zi = ["embassy-stm32/stm32f767zi", "chrono", "not-gpdma", "eth", "rng"] 15stm32f767zi = ["embassy-stm32/stm32f767zi", "chrono", "not-gpdma", "eth", "rng"]
16stm32g071rb = ["embassy-stm32/stm32g071rb", "cm0", "not-gpdma", "dac-adc-pin"] 16stm32g071rb = ["embassy-stm32/stm32g071rb", "cm0", "not-gpdma", "dac"]
17stm32g491re = ["embassy-stm32/stm32g491re", "chrono", "stop", "not-gpdma", "rng"] 17stm32g491re = ["embassy-stm32/stm32g491re", "chrono", "stop", "not-gpdma", "rng"]
18stm32h563zi = ["embassy-stm32/stm32h563zi", "chrono", "eth", "rng"] 18stm32h563zi = ["embassy-stm32/stm32h563zi", "chrono", "eth", "rng"]
19stm32h753zi = ["embassy-stm32/stm32h753zi", "chrono", "not-gpdma", "eth", "rng"] 19stm32h753zi = ["embassy-stm32/stm32h753zi", "chrono", "not-gpdma", "eth", "rng"]
20stm32h755zi = ["embassy-stm32/stm32h755zi-cm7", "chrono", "not-gpdma", "eth", "dac-adc-pin", "rng"] 20stm32h755zi = ["embassy-stm32/stm32h755zi-cm7", "chrono", "not-gpdma", "eth", "dac", "rng"]
21stm32h7a3zi = ["embassy-stm32/stm32h7a3zi", "not-gpdma", "rng"] 21stm32h7a3zi = ["embassy-stm32/stm32h7a3zi", "not-gpdma", "rng"]
22stm32l073rz = ["embassy-stm32/stm32l073rz", "cm0", "not-gpdma", "rng"] 22stm32l073rz = ["embassy-stm32/stm32l073rz", "cm0", "not-gpdma", "rng"]
23stm32l152re = ["embassy-stm32/stm32l152re", "chrono", "not-gpdma"] 23stm32l152re = ["embassy-stm32/stm32l152re", "chrono", "not-gpdma"]
@@ -41,7 +41,7 @@ ble = ["dep:embassy-stm32-wpan", "embassy-stm32-wpan/ble"]
41mac = ["dep:embassy-stm32-wpan", "embassy-stm32-wpan/mac"] 41mac = ["dep:embassy-stm32-wpan", "embassy-stm32-wpan/mac"]
42embassy-stm32-wpan = [] 42embassy-stm32-wpan = []
43not-gpdma = [] 43not-gpdma = []
44dac-adc-pin = [] 44dac = []
45 45
46cm0 = ["portable-atomic/unsafe-assume-single-core"] 46cm0 = ["portable-atomic/unsafe-assume-single-core"]
47 47
@@ -84,7 +84,12 @@ required-features = [ "can",]
84[[bin]] 84[[bin]]
85name = "dac" 85name = "dac"
86path = "src/bin/dac.rs" 86path = "src/bin/dac.rs"
87required-features = [ "dac-adc-pin",] 87required-features = [ "dac",]
88
89[[bin]]
90name = "dac_l1"
91path = "src/bin/dac_l1.rs"
92required-features = [ "stm32l152re",]
88 93
89[[bin]] 94[[bin]]
90name = "eth" 95name = "eth"
diff --git a/tests/stm32/src/bin/dac.rs b/tests/stm32/src/bin/dac.rs
index cf43106b3..9d64742df 100644
--- a/tests/stm32/src/bin/dac.rs
+++ b/tests/stm32/src/bin/dac.rs
@@ -1,7 +1,7 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4// required-features: dac-adc-pin 4// required-features: dac
5 5
6#[path = "../common.rs"] 6#[path = "../common.rs"]
7mod common; 7mod common;
@@ -22,12 +22,13 @@ async fn main(_spawner: Spawner) {
22 // Initialize the board and obtain a Peripherals instance 22 // Initialize the board and obtain a Peripherals instance
23 let p: embassy_stm32::Peripherals = embassy_stm32::init(config()); 23 let p: embassy_stm32::Peripherals = embassy_stm32::init(config());
24 24
25 let adc = peri!(p, ADC);
25 let dac = peri!(p, DAC); 26 let dac = peri!(p, DAC);
26 let dac_pin = peri!(p, DAC_PIN); 27 let dac_pin = peri!(p, DAC_PIN);
27 let mut adc_pin = unsafe { core::ptr::read(&dac_pin) }; 28 let mut adc_pin = unsafe { core::ptr::read(&dac_pin) };
28 29
29 let mut dac = DacCh1::new(dac, NoDma, dac_pin); 30 let mut dac = DacCh1::new(dac, NoDma, dac_pin);
30 let mut adc = Adc::new(p.ADC1, &mut Delay); 31 let mut adc = Adc::new(adc, &mut Delay);
31 32
32 #[cfg(feature = "stm32h755zi")] 33 #[cfg(feature = "stm32h755zi")]
33 let normalization_factor = 256; 34 let normalization_factor = 256;
diff --git a/tests/stm32/src/bin/dac_l1.rs b/tests/stm32/src/bin/dac_l1.rs
new file mode 100644
index 000000000..f8b00aaef
--- /dev/null
+++ b/tests/stm32/src/bin/dac_l1.rs
@@ -0,0 +1,86 @@
1#![no_std]
2#![no_main]
3
4// required-features: stm32l152re
5
6#[path = "../common.rs"]
7mod common;
8use core::f32::consts::PI;
9
10use common::*;
11use defmt::assert;
12use embassy_executor::Spawner;
13use embassy_stm32::adc::Adc;
14use embassy_stm32::dac::{DacCh1, Value};
15use embassy_stm32::dma::NoDma;
16use embassy_stm32::{bind_interrupts, peripherals};
17use embassy_time::Timer;
18use micromath::F32Ext;
19use {defmt_rtt as _, panic_probe as _};
20
21bind_interrupts!(struct Irqs {
22 ADC1 => embassy_stm32::adc::InterruptHandler<peripherals::ADC>;
23});
24
25#[embassy_executor::main]
26async fn main(_spawner: Spawner) {
27 // Initialize the board and obtain a Peripherals instance
28 let p: embassy_stm32::Peripherals = embassy_stm32::init(config());
29
30 let adc = peri!(p, ADC);
31 let dac = peri!(p, DAC);
32 let dac_pin = peri!(p, DAC_PIN);
33 let mut adc_pin = unsafe { core::ptr::read(&dac_pin) };
34
35 let mut dac = DacCh1::new(dac, NoDma, dac_pin);
36 let mut adc = Adc::new(adc, Irqs);
37
38 #[cfg(feature = "stm32h755zi")]
39 let normalization_factor = 256;
40 #[cfg(any(
41 feature = "stm32f429zi",
42 feature = "stm32f446re",
43 feature = "stm32g071rb",
44 feature = "stm32l152re",
45 ))]
46 let normalization_factor: i32 = 16;
47
48 dac.set(Value::Bit8(0));
49 // Now wait a little to obtain a stable value
50 Timer::after_millis(30).await;
51 let offset = adc.read(&mut adc_pin).await;
52
53 for v in 0..=255 {
54 // First set the DAC output value
55 let dac_output_val = to_sine_wave(v);
56 dac.set(Value::Bit8(dac_output_val));
57
58 // Now wait a little to obtain a stable value
59 Timer::after_millis(30).await;
60
61 // Need to steal the peripherals here because PA4 is obviously in use already
62 let measured = adc.read(&mut unsafe { embassy_stm32::Peripherals::steal() }.PA4).await;
63 // Calibrate and normalize the measurement to get close to the dac_output_val
64 let measured_normalized = ((measured as i32 - offset as i32) / normalization_factor) as i16;
65
66 info!("value / measured: {} / {}", dac_output_val, measured_normalized);
67
68 // The deviations are quite enormous but that does not matter since this is only a quick test
69 assert!((dac_output_val as i16 - measured_normalized).abs() < 15);
70 }
71
72 info!("Test OK");
73 cortex_m::asm::bkpt();
74}
75
76fn to_sine_wave(v: u8) -> u8 {
77 if v >= 128 {
78 // top half
79 let r = PI * ((v - 128) as f32 / 128.0);
80 (r.sin() * 128.0 + 127.0) as u8
81 } else {
82 // bottom half
83 let r = PI + PI * (v as f32 / 128.0);
84 (r.sin() * 128.0 + 127.0) as u8
85 }
86}
diff --git a/tests/stm32/src/common.rs b/tests/stm32/src/common.rs
index 155e1d9df..313380b35 100644
--- a/tests/stm32/src/common.rs
+++ b/tests/stm32/src/common.rs
@@ -101,14 +101,14 @@ define_peris!(
101define_peris!( 101define_peris!(
102 UART = USART1, UART_TX = PC4, UART_RX = PC5, UART_TX_DMA = DMA1_CH1, UART_RX_DMA = DMA1_CH2, 102 UART = USART1, UART_TX = PC4, UART_RX = PC5, UART_TX_DMA = DMA1_CH1, UART_RX_DMA = DMA1_CH2,
103 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH1, SPI_RX_DMA = DMA1_CH2, 103 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH1, SPI_RX_DMA = DMA1_CH2,
104 DAC = DAC1, DAC_PIN = PA4, 104 ADC = ADC1, DAC = DAC1, DAC_PIN = PA4,
105 @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, 105 @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;},
106); 106);
107#[cfg(feature = "stm32f429zi")] 107#[cfg(feature = "stm32f429zi")]
108define_peris!( 108define_peris!(
109 UART = USART6, UART_TX = PG14, UART_RX = PG9, UART_TX_DMA = DMA2_CH6, UART_RX_DMA = DMA2_CH1, 109 UART = USART6, UART_TX = PG14, UART_RX = PG9, UART_TX_DMA = DMA2_CH6, UART_RX_DMA = DMA2_CH1,
110 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA2_CH3, SPI_RX_DMA = DMA2_CH2, 110 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA2_CH3, SPI_RX_DMA = DMA2_CH2,
111 DAC = DAC, DAC_PIN = PA4, 111 ADC = ADC1, DAC = DAC, DAC_PIN = PA4,
112 CAN = CAN1, CAN_RX = PD0, CAN_TX = PD1, 112 CAN = CAN1, CAN_RX = PD0, CAN_TX = PD1,
113 @irq UART = {USART6 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART6>;}, 113 @irq UART = {USART6 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART6>;},
114); 114);
@@ -116,7 +116,7 @@ define_peris!(
116define_peris!( 116define_peris!(
117 UART = USART1, UART_TX = PA9, UART_RX = PA10, UART_TX_DMA = DMA2_CH7, UART_RX_DMA = DMA2_CH5, 117 UART = USART1, UART_TX = PA9, UART_RX = PA10, UART_TX_DMA = DMA2_CH7, UART_RX_DMA = DMA2_CH5,
118 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA2_CH3, SPI_RX_DMA = DMA2_CH2, 118 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA2_CH3, SPI_RX_DMA = DMA2_CH2,
119 DAC = DAC, DAC_PIN = PA4, 119 ADC = ADC1, DAC = DAC, DAC_PIN = PA4,
120 CAN = CAN1, CAN_RX = PA11, CAN_TX = PA12, 120 CAN = CAN1, CAN_RX = PA11, CAN_TX = PA12,
121 @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, 121 @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;},
122); 122);
@@ -130,7 +130,7 @@ define_peris!(
130define_peris!( 130define_peris!(
131 UART = USART1, UART_TX = PB6, UART_RX = PB7, UART_TX_DMA = DMA1_CH0, UART_RX_DMA = DMA1_CH1, 131 UART = USART1, UART_TX = PB6, UART_RX = PB7, UART_TX_DMA = DMA1_CH0, UART_RX_DMA = DMA1_CH1,
132 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PB5, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH0, SPI_RX_DMA = DMA1_CH1, 132 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PB5, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH0, SPI_RX_DMA = DMA1_CH1,
133 DAC = DAC1, DAC_PIN = PA4, 133 ADC = ADC1, DAC = DAC1, DAC_PIN = PA4,
134 @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, 134 @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;},
135); 135);
136#[cfg(feature = "stm32h7a3zi")] 136#[cfg(feature = "stm32h7a3zi")]
@@ -191,6 +191,7 @@ define_peris!(
191define_peris!( 191define_peris!(
192 UART = USART3, UART_TX = PB10, UART_RX = PB11, UART_TX_DMA = DMA1_CH2, UART_RX_DMA = DMA1_CH3, 192 UART = USART3, UART_TX = PB10, UART_RX = PB11, UART_TX_DMA = DMA1_CH2, UART_RX_DMA = DMA1_CH3,
193 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH3, SPI_RX_DMA = DMA1_CH2, 193 SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH3, SPI_RX_DMA = DMA1_CH2,
194 ADC = ADC, DAC = DAC, DAC_PIN = PA4,
194 @irq UART = {USART3 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART3>;}, 195 @irq UART = {USART3 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART3>;},
195); 196);
196#[cfg(feature = "stm32l552ze")] 197#[cfg(feature = "stm32l552ze")]