diff --git a/CHANGELOG.md b/CHANGELOG.md
index 52adb8f20..2708e6b1d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## Unreleased
+No changes.
+
+## [v0.9.0] - 2022-03-06
+
### Added
- Generic `into_af_push_pull` and `into_af_open_drain` ([#308])
@@ -651,7 +655,8 @@ let clocks = rcc
[#2]: https://github.com/stm32-rs/stm32f3xx-hal/pull/2
-[v0.8.2]: https://github.com/stm32-rs/stm32f3xx-hal/releases/tag/v0.8.2
+[v0.9.0]: https://github.com/stm32-rs/stm32f3xx-hal/releases/tag/v0.9.0
+[v0.8.1]: https://github.com/stm32-rs/stm32f3xx-hal/releases/tag/v0.8.1
[v0.8.1]: https://github.com/stm32-rs/stm32f3xx-hal/releases/tag/v0.8.1
[v0.8.0]: https://github.com/stm32-rs/stm32f3xx-hal/releases/tag/v0.8.0
[v0.7.0]: https://github.com/stm32-rs/stm32f3xx-hal/releases/tag/v0.7.0
diff --git a/Cargo.toml b/Cargo.toml
index 9b6071344..72e0424c8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@ name = "stm32f3xx-hal"
readme = "README.md"
repository = "https://github.com/stm32-rs/stm32f3xx-hal"
documentation = "https://docs.rs/stm32f3xx-hal"
-version = "0.8.1"
+version = "0.9.0"
exclude = [
"codegen",
".markdownlint.yml"
diff --git a/README.md b/README.md
index a6edaf148..c5639ad32 100644
--- a/README.md
+++ b/README.md
@@ -57,7 +57,7 @@ cortex-m-rt = { version = "0.6.13", features = ["device"] }
# Panic behaviour, see https://crates.io/keywords/panic-impl for alternatives
panic-halt = "0.2.0"
# Replace stm32f303xc with your target chip, see next section for more info
-stm32f3xx-hal = { version = "0.8.1", features = ["ld", "rt", "stm32f303xc"] }
+stm32f3xx-hal = { version = "0.9.0", features = ["ld", "rt", "stm32f303xc"] }
```
We also need to tell Rust about target architecture and how to link our
diff --git a/src/adc.rs b/src/adc.rs
index 46f21aa01..bd50d28dc 100644
--- a/src/adc.rs
+++ b/src/adc.rs
@@ -7,7 +7,7 @@
//! It can be built for the STM32F3Discovery running
//! `cargo build --example adc --features=stm32f303xc`
//!
-//! [examples/adc.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/adc.rs
+//! [examples/adc.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/adc.rs
use core::ops::Deref;
use core::{convert::TryInto, marker::PhantomData};
@@ -263,7 +263,7 @@ macro_rules! sp_pins {
///
/// Code example can be seen in [examples/adc.rs].
///
- /// [examples/adc.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/adc.rs
+ /// [examples/adc.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/adc.rs
/// [RM0316]: https://www.st.com/resource/en/reference_manual/dm00094349.pdf
// FIXME(Sh3Rm4n): Soundness hole: Still mutliple sensor objects can be created.
// An idea might be to split out the sensors from CommonAdc similar to the
diff --git a/src/can.rs b/src/can.rs
index 9a4213c63..a8f0ad2a1 100644
--- a/src/can.rs
+++ b/src/can.rs
@@ -9,7 +9,7 @@
//!
//! A usage example of the can peripheral can be found at [examples/can.rs]
//!
-//! [examples/can.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/can.rs
+//! [examples/can.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/can.rs
use crate::gpio::{gpioa, gpiob};
use crate::gpio::{PushPull, AF9};
diff --git a/src/dma.rs b/src/dma.rs
index 479512e05..93876b8a8 100644
--- a/src/dma.rs
+++ b/src/dma.rs
@@ -6,7 +6,7 @@
//!
//! An example how to use DMA for serial, can be found at [examples/serial_dma.rs]
//!
-//! [examples/serial_dma.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/serial_dma.rs
+//! [examples/serial_dma.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/serial_dma.rs
// To learn about most of the ideas implemented here, check out the DMA section
// of the Embedonomicon: https://docs.rust-embedded.org/embedonomicon/dma.html
diff --git a/src/gpio.rs b/src/gpio.rs
index b6ad13a1d..bcc9bf56a 100644
--- a/src/gpio.rs
+++ b/src/gpio.rs
@@ -58,7 +58,7 @@
//!
//! [InputPin]: embedded_hal::digital::v2::InputPin
//! [OutputPin]: embedded_hal::digital::v2::OutputPin
-//! [examples/toggle.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/toggle.rs
+//! [examples/toggle.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/toggle.rs
use core::{convert::Infallible, marker::PhantomData};
@@ -322,7 +322,7 @@ impl crate::private::Sealed for Pin {}
///
/// See [examples/gpio_erased.rs] as an example.
///
-/// [examples/gpio_erased.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/gpio_erased.rs
+/// [examples/gpio_erased.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/gpio_erased.rs
pub type PXx = Pin;
impl Pin, Mode> {
diff --git a/src/i2c.rs b/src/i2c.rs
index a6c30896a..d1cd792da 100644
--- a/src/i2c.rs
+++ b/src/i2c.rs
@@ -4,7 +4,7 @@
//!
//! A usage example of the i2c peripheral can be found at [examples/i2c_scanner.rs]
//!
-//! [examples/i2c_scanner.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/i2c_scanner.rs
+//! [examples/i2c_scanner.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/i2c_scanner.rs
use core::{convert::TryFrom, ops::Deref};
diff --git a/src/lib.rs b/src/lib.rs
index 2277d933a..8144cee9f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -68,7 +68,7 @@
For more information, see the [README][].
- [README]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/README.md#selecting-the-right-chip
+ [README]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/README.md#selecting-the-right-chip
### `ld`
diff --git a/src/spi.rs b/src/spi.rs
index 774c65fed..238ae9713 100644
--- a/src/spi.rs
+++ b/src/spi.rs
@@ -4,7 +4,7 @@
//!
//! A usage example of the can peripheral can be found at [examples/spi.rs]
//!
-//! [examples/spi.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/spi.rs
+//! [examples/spi.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/spi.rs
use core::{fmt, marker::PhantomData, ops::Deref, ptr};
@@ -194,7 +194,7 @@ impl Spi {
///
/// ```
///
- /// To get a better example, look [here](https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/spi.rs).
+ /// To get a better example, look [here](https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/spi.rs).
///
// TODO(Sh3Rm4n): See alternative modes provided besides FullDuplex (as listed in Stm32CubeMx).
pub fn new(
diff --git a/src/timer.rs b/src/timer.rs
index 016aca0a9..6560e8244 100644
--- a/src/timer.rs
+++ b/src/timer.rs
@@ -8,7 +8,7 @@
//! Check out [examples/adc.rs], where a [`Periodic`] timer is used to wake
//! up the main-loop regularly.
//!
-//! [examples/adc.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/adc.rs
+//! [examples/adc.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/adc.rs
use core::convert::{From, TryFrom};
diff --git a/src/usb.rs b/src/usb.rs
index 152b0f986..fea3e2c37 100644
--- a/src/usb.rs
+++ b/src/usb.rs
@@ -6,7 +6,7 @@
//!
//! See [examples/usb_serial.rs] for a usage example.
//!
-//! [examples/usb_serial.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/usb_serial.rs
+//! [examples/usb_serial.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/usb_serial.rs
use core::fmt;
diff --git a/src/watchdog.rs b/src/watchdog.rs
index c571ca828..99c5fcbb4 100644
--- a/src/watchdog.rs
+++ b/src/watchdog.rs
@@ -4,7 +4,7 @@
//!
//! A usage example of the watchdog can be found at [examples/can.rs]
//!
-//! [examples/can.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.8.1/examples/can.rs
+//! [examples/can.rs]: https://github.com/stm32-rs/stm32f3xx-hal/blob/v0.9.0/examples/can.rs
use core::fmt;
use embedded_time::fixed_point::FixedPoint;