Skip to content

Commit 4fab197

Browse files
committed
Initial support for PWM
- Update timer.rs with features from `stm32f4xx-hal` - Remove chip feature for examples - Use H7 HAL as a base for `pwm.rs`
1 parent 679b4d9 commit 4fab197

File tree

10 files changed

+2283
-173
lines changed

10 files changed

+2283
-173
lines changed

Cargo.toml

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -113,54 +113,58 @@ lto = true
113113

114114
[[example]]
115115
name = "blinky_delay"
116-
required-features = ["stm32f746", "rt"]
116+
required-features = ["rt"] # stm32f746
117117

118118
[[example]]
119119
name = "blinky"
120-
required-features = ["stm32f746", "rt"]
120+
required-features = ["device-selected", "rt"] # stm32f746
121121

122122
[[example]]
123123
name = "flash"
124-
required-features = ["stm32f746", "rt"]
124+
required-features = ["device-selected", "rt"] # stm32f746
125125

126126
[[example]]
127127
name = "fmc"
128-
required-features = ["stm32f746", "rt", "fmc"]
128+
required-features = ["device-selected", "rt", "fmc"] # stm32f746
129129

130130
[[example]]
131131
name = "hello"
132-
required-features = ["stm32f746", "rt"]
132+
required-features = ["device-selected", "rt"] # stm32f746
133+
134+
[[example]]
135+
name = "pwm"
136+
required-features = ["device-selected", "rt"] # stm32f767
133137

134138
[[example]]
135139
name = "serial_delay"
136-
required-features = ["stm32f746", "rt"]
140+
required-features = ["device-selected", "rt"] # stm32f746
137141

138142
[[example]]
139143
name = "serial_echo"
140-
required-features = ["stm32f746", "rt"]
144+
required-features = ["device-selected", "rt"] # stm32f746
141145

142146
[[example]]
143147
name = "timer"
144-
required-features = ["stm32f746", "rt"]
148+
required-features = ["device-selected", "rt"] # stm32f746
145149

146150
[[example]]
147151
name = "stm32f7disco-screen"
148-
required-features = ["stm32f746", "rt"]
152+
required-features = ["device-selected", "rt"] # stm32f746
149153

150154
[[example]]
151155
name = "exti_button"
152-
required-features = ["stm32f767", "rt"]
156+
required-features = ["device-selected", "rt"] # stm32f746
153157

154158
[[example]]
155159
name = "usb_serial"
156-
required-features = ["stm32f723", "rt", "synopsys-usb-otg"]
160+
required-features = ["device-selected", "rt", "synopsys-usb-otg"] # stm32f723
157161

158162
[[example]]
159163
name = "rng"
160164

161165
[[example]]
162166
name = "stm32f7disco-qspi-flash"
163-
required-features = ["stm32f746", "rt"]
167+
required-features = ["device-selected", "rt"] # stm32f746
164168

165169
[[example]]
166170
name = "can-echo"

examples/pwm.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//! Test the PWM
2+
3+
//#![deny(warnings)]
4+
#![no_std]
5+
#![no_main]
6+
7+
extern crate panic_semihosting;
8+
9+
use cortex_m_rt::entry;
10+
11+
use stm32f7xx_hal::{
12+
pac,
13+
prelude::*,
14+
};
15+
16+
#[entry]
17+
fn main() -> ! {
18+
let dp = pac::Peripherals::take().unwrap();
19+
20+
let rcc = dp.RCC.constrain();
21+
let clocks = rcc.cfgr.freeze();
22+
23+
let gpioa = dp.GPIOA.split();
24+
let channels = (gpioa.pa0.into_alternate(), gpioa.pa1.into_alternate());
25+
26+
let pwm = dp.TIM2.pwm(channels, 20_000u32.Hz(), &clocks);
27+
let (mut ch1, _ch2) = pwm;
28+
let max_duty = ch1.get_max_duty();
29+
ch1.set_duty(max_duty / 4);
30+
ch1.enable();
31+
32+
loop {}
33+
}

examples/timer.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use stm32f7xx_hal::{
1717
interrupt, pac,
1818
prelude::*,
1919
timer::{Event, Timer},
20+
embedded_time::rate::Extensions,
2021
};
2122

2223
#[entry]
@@ -32,7 +33,8 @@ fn main() -> ! {
3233
unsafe {
3334
NVIC::unmask(pac::Interrupt::TIM2);
3435
}
35-
let mut timer = Timer::tim2(dp.TIM2, 1.Hz(), clocks, &mut rcc.apb1);
36+
let mut timer = Timer::new(dp.TIM2, &clocks).count_down();
37+
timer.start(1.Hz());
3638
timer.listen(Event::TimeOut);
3739

3840
loop {}

src/i2c.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::gpio::gpioh::{PH4, PH5, PH7, PH8};
1212
use crate::gpio::AlternateOD;
1313
use crate::hal::blocking::i2c::{Read, Write, WriteRead};
1414
use crate::pac::{DWT, I2C1, I2C2, I2C3};
15-
use crate::rcc::{Clocks, Enable, GetBusFreq, RccBus, Reset};
15+
use crate::rcc::{Clocks, Enable, BusClock, RccBus, Reset};
1616
use nb::Error::{Other, WouldBlock};
1717
use nb::{Error as NbError, Result as NbResult};
1818

@@ -410,7 +410,7 @@ macro_rules! hal {
410410
$I2CX::enable(apb);
411411
$I2CX::reset(apb);
412412

413-
let pclk = <$I2CX as RccBus>::Bus::get_frequency(&clocks).0;
413+
let pclk = <$I2CX as RccBus>::Bus::clock(&clocks).0;
414414

415415
let mut i2c = I2c { i2c, pins, mode, pclk };
416416
i2c.init();

src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ pub mod fmc_lcd;
9090
#[cfg(feature = "device-selected")]
9191
pub mod gpio;
9292

93+
#[cfg(feature = "device-selected")]
94+
pub mod pwm;
95+
9396
#[cfg(feature = "device-selected")]
9497
pub mod dac;
9598

src/prelude.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ pub use crate::fmc::FmcExt as _stm327xx_hal_fmc_FmcExt;
55

66
pub use crate::gpio::GpioExt as _stm327xx_hal_gpio_GpioExt;
77
pub use crate::hal::digital::v2::{InputPin, OutputPin};
8+
pub use crate::hal::timer::Cancel;
89
pub use crate::hal::prelude::*;
10+
pub use crate::pwm::PwmExt as _stm32f7xx_hal_pwm_PwmExt;
911
pub use crate::rcc::RccExt as _stm32f7xx_hal_rcc_RccExt;
1012
pub use crate::rng::RngExt as _;

0 commit comments

Comments
 (0)