Skip to content

Releases: stm32-rs/stm32f3xx-hal

Release v0.10.0

30 Nov 20:18
Compare
Choose a tag to compare

Breaking changes

  • Update stm32f3 pac to v0.15.1 (#335)
  • Update bxcan pac to v0.7.0 (#335)
  • Remove Toggle enum and use Switch instead for better naming purposes
  • Fix undefined behavior in SPI implementation (#346)
    • Add num_traits::PrimInt bounds to Word
  • Remove Serial::split, which possibly creates two mutable references two
    one Serial instance, which could've caused UB. The use case of this function
    was hard to find out anyway. (#351)
  • Remove defmt-* features (defmt feature is still available), to finalize
    migration from defmt-0.2.x -> defmt-0.3.x. (#349)
  • Removed implicit stm32-usbd feature (use usb instead) (#349)

Added

  • Add missing ADC channels (#337 & #345)
  • Add many #[must_use] instances (#347)

Fixed

  • Fix wrong timer frequency calculation and unexpected panics (#338)
  • Fixed integer saturation in Timer::start, see #342 (#356)

Changed

  • The PWM implementation was deprecated. There is not yet an alternative
    implementation, but it is hard to maintain the current implementation
    and not easy to verify if it is really a safe implementation.
    It is also not consistent with the rest of the crates API. (#352)
  • Use critical-section crate instead of interrupt_free, which is not always
    sound. (#350)
    It is also not consistent with the rest of the crates API.
  • The MSRV was bumped to 1.60 (#349)

Release v0.9.2

21 Feb 09:33
Compare
Choose a tag to compare

Added

  • Add missing ADC channels (#337)

Fixed

  • Fix wrong timer frequency calculation and unexpected panics (#338)

Changed

  • The MSRV was bumped to 1.59 (#340)

Release v0.9.1

07 Sep 21:38
Compare
Choose a tag to compare

Added

  • Add a minimal DAC driver (#318)

Fixed

  • Missing MosiPin impl for PB5 (#322)
  • Read valid data from data register even if reception of next character
    has started (#317)

Release v0.9.0

06 Mar 20:43
Compare
Choose a tag to compare

Added

  • Generic into_af_push_pull<A> and into_af_open_drain<A> (#308)
  • BusClock and BusTimerClock traits (#302)
  • RccBus, Enable, Reset traits and implementations for peripherals (#299)
  • Support cortex-m-rt v0.7.0 but still allow v0.6.13 (#283)
  • Make timer InterruptTypes fields public to be useful. (#304)
  • Add support for the internal signature peripheral (#281)
  • Add common derives to Toggle. (#281)
  • Add is_interrupt_configured and configured_interrupts function to
    serial::Serial and timer::Timer. (#281)

Fixed

  • Fix can support. Can would not build for stm32f302x6 for example.
    Also support can for every chip other than stm32f301 and stm32f318.
    (#283)
  • Fix wrong ADC votlage regulator startup time calculation effecting
    calibration. (#281)

Breaking Changes

  • Make rtc an optional feature. Without that feature rtcc as a dependency is
    not needed. (#283)
  • Update rtcc to v0.3.0. For a detailed changelog, go here. (#314)
  • Enable rt, usb, can, rtc and ld feature by default.
    To disable that behavior, set default-features = false. (#283)
  • The MSRV was bumped to 1.54 (#308)
  • Update stm32f3 pac to v0.14.0 (#282)
  • Remove the bxcan re-export. (#304)
  • The LICENSE has been changed from BSD 0-clause to the familiar dual license
    MIT / Apache 2.0. This has been done, as this fits the ecosystem better and
    the dependencies where using the MIT / Apache 2.0 dual licensing already,
    which resulted into the situtation, that BSD 0-clause was not affectivly
    0-clause as MIT conditions had to be met anyways. (🧂 IANAL). (#309)
  • Renamed Serial::raw_read to Serial::read_data_register. (#281)
  • Seal FlashExt and RccExt traits. These are no longer implementable by
    a user of this crate. (#281)
  • Move ADC from a macro to a generic implementation, meaning that
    it is possible to obtain an ADC instance via Adc::new instead of
    Adc::adc1. (#281)
  • Remove adc::ClockMode and the clock configuration of the ADC.
    • Clock configuration effects the common ADC which inturn controls e.g. ADC1
      and ADC2, which the old API did not resemble.
    • The API provides no clock configuration for ADC peripherals yet, but
      correctly acts upon changes done through the pac. (#281)
  • Major rework of the ADC implementation: (#281)
    • Add CommonAdc support.
    • Add internal sensor peripheral support like TemeperaturSensor and similar.
    • Lift restriction of the ADC implementation for stm32f303, though
      stm32f373 is still not supported.
    • Enable manual configuration of the Adc peripheral of most important features
      • ConversionMode
      • Sequence length
      • OverrunMode
      • etc.
    • Leverage type states to:
      • Allow a Disabled ADC, which can be manually calibrated.
      • Allow a OneShot ADC implementation through into_oneshot with an
        optimal configuration for the OneShot embedded-hal trait.
    • Support every possible ADC channel.
    • Add interrupt support.

Release v0.8.2

14 Dec 07:22
Compare
Choose a tag to compare

Added

  • Add missing SPI impls for the gpio-f303 device groups (e.g. stm32f303vc) (#304)

Release v0.8.1

27 Oct 06:21
Compare
Choose a tag to compare

Fixed

  • ADC Channel SMP Register mismatch. (#291)
    • While read()ing a Pin mapped to channel 10 and unexpected panic happened.

Release v0.8.0

16 Aug 06:55
Compare
Choose a tag to compare

Added

  • Readd MonoTimer. This was accidentally removed before. (#247)
    • Different to before, frequency() and now() now do not consume the MonoTimer.
      &self is used instead. (#267)
  • Basic serial implementation also available for UART4 and UART5 (#246)
  • Implement serial DMA also for Serial (#246)
  • Add enumset as a optional dependency, which allow more ergonomic functions
    regarding enums. This is especially useful for status event query functions.
    (#253)
  • As serial Error and serial Events share things in common. TryFrom<Event>
    and From<Error> is implemented for conversions. (#253)
  • Add serial character match function, with which events can be triggered for
    the set character. (#253)
  • Add receiver timeout function, which configures the serial peripheral to
    trigger an event, if nothing happened after a certain time on the serial
    receiver line. (#253)
  • Add raw_read() function, which does no error handling and also does not
    clear any Event by itself. Useful, if the error_handling has to be done in
    another context (like an interrupt rountine). (#253)
  • Introduce Toggle, with On and Off as a convinience wrapper around bool
    for configuration purposes. (#253)
  • Add an associated const to serial::Instance to return the corresponding
    pac::Interrupt-number, which is useful to unmask() interrupts.
    An interrupt() function to Serial was also added for convinience. (#253)
  • Add a Serial::is_busy() function to check, if the serial device is busy.
    Useful to block on this function, e.g. while serial.is_busy() {}. (#253)
  • Add BaudTable a convinience wrapper around Baud to configure the Serial
    to the most commen baud rates. (#253)
  • Add Serial::detect_overrun() function, to en- or disable the overrun
    detection of the Serial. If overrun is disabled (enabled by default), than
    newly arrived bytes are overwriting the current data in the read receive
    register without throwing any event. (#253).
  • Lift generic constraint of most Serial method on TxPin and RxPin.
    This should make it easier to generically use the Serial peripheral. (#253)
  • Greatly increase coverage of Debug and defmt::Format implementations.
    Almost all important types should now be supported. (#265)
  • Add a free() function to the RTC implementation to retrieve the passed-in
    peripheral. (#266)
  • Implement an API to return the corresponding interrupt number of timer through
    the newly introduced InterruptNumber trait, where the Interrupt is held
    as an associated const. (#267)
    • Depending on the timer one Interrupt or a bundle of InterruptTypes is
      returned.
    • On the bases of these interrupts, the interrupt controller (NVIC) can
      be set to mask or unmask these interrupts.
  • Implement the embedded-hal::timer::Cancel trait for timers. (#267)
  • Add use_pll to CFGR - the clock configuration - to force to use the PLL
    source for the systemclock. Also Clocks::pllclk() was introduced to be able
    to check, whether PLL is used.
  • Add unsafe peripheral function to access underlying peripheral (#277)
  • Implement fmt::Write for Serial (#278)
    • This allowes using writeln! in combination with Serial.

Changed

  • PXx struct (representing a generic GPIO pin) implements Send and Sync (#251)
  • Each pin aliases (PA0, PA1, ..) are defined under gpio module directly.
    Re-export from gpio port sub-modules are provided for compatibility. (#257)
  • The embedded-hal Read implementation of Serial does now return WoudBlock
    if the peripheral is busy. Also if an Overrun occured the receive data
    register (RDR) is flushed to have a more consistent API. (#253)
  • Remove cargo-metadata as a build dependency to cut down dependencies and
    the reliance on resolver = "2". (#270)

Fixed

  • The "unproven" feature, which itself does enable the "embedded-hal/unproven"
    features, can no longer be disabled. (#259)
    1. The "unproven" features are no longer unproven and used anywhere anyways.
    2. This crate was not building successfully without the unproven feature.
  • Set the correct baud rate for chips where USART1SW_A::PCLK leads to a
    baud rate derived from PCLK1, rather than the ports own bus clock, PCLK2.
    (#260)

Breaking Changes

  • Refactor CAN to use the bxCan crate. (#207)
  • Add support for configuring parity and stop bits in addition to baud rate for
    Serial with serial::config::Config. (#239)
  • Implement Serial::join which allows to re-create the serial peripheral,
    when Serial::split was previously called. (#252)
  • Parameterized usb::Peripheral and usb::UsbType on the pin configuration
    used (#255)
  • Add (almost) all missing serial (interrupt and status) events.
    Also rename all the event names to be more descriptive. (#253)
  • A new serial interrupt API was introduced: (#253)
    • listen() and unlisten() are renamed to enable_interrupt() and
      disable_interrupt().
    • is_tc() and other non-parametrizable functions are removed.
    • configure_interrupt() was added, which can be parameterized.
    • clear_event() was added to clear specific events.
    • clear_events() was added to clear all events at once.
    • is_event_triggered() can check if an Event is triggered.
    • triggered_events returns an EnumSet of triggered events.
  • Change gpio interrupt API to be more in line with the new serial interrupt
    API. (#262)
  • Move EXTI interrupt management to SysCfg. (#262)
    • Becuase EXTI interrupt confiugration could cancel out, make it more obvious
      in that SysCfg manages the interrupts, not the pin itself.
      Change make_interrupt_source() to SysCfg::select_exti_interrupt_source().
  • Change dma interrupt API to be more in line with the new serial interrupt
    API. (#263)
  • Change timer interrupt API to the same of the serial interface. (#264)
  • Make timer Events #[non_exhaustive]. (#264)
  • Renames timers release() function to free() to be more in line with the
    rest of this crate. (#264)
  • rtc's Error type and OperationMode and CkMode of adc are now #[non_exhaustive].
    (#266)
  • All non-camel-case types are chaged to be consistently camel-case types.
    Types which do not follow these rules are re-exported types by stm32f3 for
    example. (#266)
  • Adc's SampleTime type has been reworked and is now a consistent wrapper around
    the underlying types for stm32f3's SMP9_A and SMP18_A type. (#266)
  • Rename CkMode to ClockMode (#266)
  • Rename stm32-usbd feature to usb. stm32-usbd is still used as a
    dependency. (#271)
  • Rework the timer implementation: (#267)
    • PclkSrc trait was removed in favor of generic Instance trait, which
      is a common ground for all available timers.
    • Timer::tim1 and so on are renamed to Timer::new
    • The implementation of the timers are corrected to better represent the
      avaibilities of timers of the hardware.
    • Timer::new now does not take a timeout value. This means, that the
      timer will now not be started automatically and one has to explicitly call
      start().
  • Rework SPI implementation: (#273)
    • A generic Instance trait now represents all Spi peripherals.
    • Spi::spi1 and so on are renamed to Spi::new.
    • Add SPI configuration type to be passed into Spi::new
  • Remove public fields from Adc and Rtc (#277)

Release v0.7.0

18 Jun 20:07
Compare
Choose a tag to compare

Added

  • Make Clocks ppre1() and ppre2() methods public, to get the current
    Prescaler value. ([#210])
  • Support for more CAN bit rates and modes. ([#186])
  • Implement into_xxx methods for partially erased pins ([#189])
  • Enable better GPIO internal resistor configuration ([#189])
  • Support for GPIO output slew rate configuration ([#189])
  • Support for GPIO interrupts ([#189])
  • ld feature, which enables the memory.x generation ([#216])
  • Implement DelayMs for Milliseconds and DelayUs for Microseconds ([#234])
  • ADC can now be free()'d ([#212])
  • Serial does now implement embedded_hal::serial::{Read, Write}.
    No split() necessary. ([#232])
  • Serial can now listen for the "Transmission Complete" Tc interrupt event ([#232])
  • Serial can now listen for the Idle interrupt event ([#238])

Changed

  • The structure of gpio.rs is greatly changed. Generic Pin struct is used
    for every GPIO pin now ([#189])

Fixed

  • Delay based on systick no longer panics ([#203]) for to high values
    and support longer delays ([#208])
  • Long delay during ADC initialization ([#217])

Breaking Changes

  • The MSRV was bumped to 1.51 ([#227])
  • Replace custom time based units with types defined in the [embedded-time][]
    crate ([#192])
  • The rcc public API now expects time based units in Megahertz.
    If the supplied frequency cannot be converted to Hertz the code
    will panic. This will occur if the supplied Megahertz frequency
    cannot fit into u32::MAX when converting to Hertz ([#192])
// The supplied frequencies must be in `MHz`.
let clocks = rcc
    .cfgr
    .use_hse(8.MHz())
    .hclk(48.MHz())
    .sysclk(48.MHz())
    .pclk1(12.MHz())
    .pclk2(12.MHz())
  • You always required to select a sub-target for target chips ([#216])
  • Bump dependencies: ([#229])
    • cortex-m to 0.7.2
    • cortex-m-rt to 0.6.4
    • defmt to 0.2.2
    • embedded-hal to 0.2.5
    • nb to 1.0.0
    • stm32f3 to 0.13.2
    • stm32-usbd to 0.6.0
  • into_afx methods are splitted into into_afx_push_pull and
    into_afx_open_drain ([#189])
  • GPIO output mode (PushPull or OpenDrain) is encoded into pin typestate
    in alternate function mode ([#189])
  • GPIO internal resistor configuration is no longer encoded into pin typestate
    in input mode ([#189])
  • Remove stm32 module. Use use stm32f3xx_hal::pac instead.
    This module was a deprecated in [v0.5.0][] and is now subject for
    removal. ([#220])
  • Serial::uart1 ... functions are renamed to Serial::new. ([#212])

v0.6.1

20 Dec 23:02
c68c36c
Compare
Choose a tag to compare

Read the Changelog for changes included in this release.

v0.6.0

10 Dec 10:13
7d9954e
Compare
Choose a tag to compare

Read the Changelog for changes included in this release.