Open
Description
To be able to manipulation of peripheral registers through bit-banding, the values of the offset of the modifiable bit fields in the registers are required.
For example, there are functions for bit-banding here: https://docs.rs/stm32f1xx-hal/0.9.0/stm32f1xx_hal/bb/index.html
Implementation variant:
pub mod perih_name {
...
pub mod reg_name {
...
pub const field_name_OFFSET: u8 = ...;
...
}
...
}
Example of an implementation variant (stm32f1):
pub mod rcc {
...
pub mod apb2enr {
...
pub const USART1EN_OFFSET: u8 = 14;
...
impl<'a> USART1EN_W<'a> {
...
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << USART1EN_OFFSET)) | ((value as u32 & 0x01) << USART1EN_OFFSET);
self.w
}
}
...
impl R {
...
pub fn usart1en(&self) -> USART1EN_R {
USART1EN_R::new(((self.bits >> USART1EN_OFFSET) & 0x01) != 0)
}
...
}
...
}
...
}
Usage example:
unsafe {
use stm32f1xx_hal::{self as hal, pac};
hal::bb::set(&(*pac::RCC::PTR).apb2enr, pac::rcc::apb2enr::USART1EN_OFFSET);
}
Metadata
Metadata
Assignees
Labels
No labels