stm32f30x_memory_map/
lib.rs1#![deny(missing_docs)]
4#![deny(warnings)]
5#![no_std]
6
7extern crate volatile_register;
8
9#[allow(missing_docs)]
10pub mod btim;
11#[allow(missing_docs)]
12pub mod dbgmcu;
13#[allow(missing_docs)]
14pub mod gpio;
15#[allow(missing_docs)]
16pub mod gptim;
17#[allow(missing_docs)]
18pub mod i2c;
19#[allow(missing_docs)]
20pub mod rcc;
21#[allow(missing_docs)]
22pub mod spi;
23#[allow(missing_docs)]
24pub mod usart;
25
26use btim::BTim;
27use dbgmcu::Dbgmcu;
28use gpio::Gpio;
29use gptim::GpTim;
30use i2c::I2c;
31use rcc::Rcc;
32use spi::Spi;
33use usart::Usart;
34
35const GPIOA: usize = 0x48000000;
36const GPIOB: usize = 0x48000400;
37const GPIOC: usize = 0x48000800;
38const GPIOD: usize = 0x48000c00;
39const GPIOE: usize = 0x48001000;
40const GPIOF: usize = 0x48001400;
41const GPIOG: usize = 0x48001800;
42const GPIOH: usize = 0x48001c00;
43const RCC: usize = 0x40021000;
47const TIM2: usize = 0x40000000;
50const TIM3: usize = 0x40000400;
51const TIM4: usize = 0x40000800;
52const USART1: usize = 0x40013800;
56const USART2: usize = 0x40004400;
57const USART3: usize = 0x40004800;
58const SPI1: usize = 0x40013000;
61const I2C1: usize = 0x40005400;
71const TIM6: usize = 0x40001000;
76const TIM7: usize = 0x40001400;
77const DBGMCU: usize = 0xe0042000;
81pub fn dbgmcu() -> &'static Dbgmcu {
94 unsafe { deref(DBGMCU) }
95}
96
97pub unsafe fn dbgmcu_mut() -> &'static mut Dbgmcu {
99 deref_mut(DBGMCU)
100}
101
102pub fn gpioa() -> &'static Gpio {
104 unsafe { deref(GPIOA) }
105}
106
107pub unsafe fn gpioa_mut() -> &'static mut Gpio {
109 deref_mut(GPIOA)
110}
111
112pub fn gpiob() -> &'static Gpio {
114 unsafe { deref(GPIOB) }
115}
116
117pub unsafe fn gpiob_mut() -> &'static mut Gpio {
119 deref_mut(GPIOB)
120}
121
122pub fn gpioc() -> &'static Gpio {
124 unsafe { deref(GPIOC) }
125}
126
127pub unsafe fn gpioc_mut() -> &'static mut Gpio {
129 deref_mut(GPIOC)
130}
131
132pub fn gpiod() -> &'static Gpio {
134 unsafe { deref(GPIOD) }
135}
136
137pub unsafe fn gpiod_mut() -> &'static mut Gpio {
139 deref_mut(GPIOD)
140}
141
142pub fn gpioe() -> &'static Gpio {
144 unsafe { deref(GPIOE) }
145}
146
147pub unsafe fn gpioe_mut() -> &'static mut Gpio {
149 deref_mut(GPIOE)
150}
151
152pub fn gpiof() -> &'static Gpio {
154 unsafe { deref(GPIOF) }
155}
156
157pub unsafe fn gpiof_mut() -> &'static mut Gpio {
159 deref_mut(GPIOF)
160}
161
162pub fn gpiog() -> &'static Gpio {
164 unsafe { deref(GPIOG) }
165}
166
167pub unsafe fn gpiog_mut() -> &'static mut Gpio {
169 deref_mut(GPIOG)
170}
171
172pub fn gpioh() -> &'static Gpio {
174 unsafe { deref(GPIOH) }
175}
176
177pub unsafe fn gpioh_mut() -> &'static mut Gpio {
179 deref_mut(GPIOH)
180}
181
182pub fn i2c1() -> &'static I2c {
184 unsafe { deref(I2C1) }
185}
186
187pub unsafe fn i2c1_mut() -> &'static mut I2c {
189 deref_mut(I2C1)
190}
191
192pub fn rcc() -> &'static Rcc {
194 unsafe { deref(RCC) }
195}
196
197pub unsafe fn rcc_mut() -> &'static mut Rcc {
199 deref_mut(RCC)
200}
201
202pub fn spi1() -> &'static Spi {
204 unsafe { deref(SPI1) }
205}
206
207pub unsafe fn spi1_mut() -> &'static mut Spi {
209 deref_mut(SPI1)
210}
211
212pub fn tim2() -> &'static GpTim {
214 unsafe { deref(TIM2) }
215}
216
217pub unsafe fn tim2_mut() -> &'static mut GpTim {
219 deref_mut(TIM2)
220}
221
222pub fn tim3() -> &'static GpTim {
224 unsafe { deref(TIM3) }
225}
226
227pub unsafe fn tim3_mut() -> &'static mut GpTim {
229 deref_mut(TIM3)
230}
231
232pub fn tim4() -> &'static GpTim {
234 unsafe { deref(TIM4) }
235}
236
237pub unsafe fn tim4_mut() -> &'static mut GpTim {
239 deref_mut(TIM4)
240}
241
242pub fn tim6() -> &'static BTim {
244 unsafe { deref(TIM6) }
245}
246
247pub unsafe fn tim6_mut() -> &'static mut BTim {
249 deref_mut(TIM6)
250}
251
252pub fn tim7() -> &'static BTim {
254 unsafe { deref(TIM7) }
255}
256
257pub unsafe fn tim7_mut() -> &'static mut BTim {
259 deref_mut(TIM7)
260}
261
262pub fn usart1() -> &'static Usart {
264 unsafe { deref(USART1) }
265}
266
267pub unsafe fn usart1_mut() -> &'static mut Usart {
269 deref_mut(USART1)
270}
271
272pub fn usart2() -> &'static Usart {
274 unsafe { deref(USART2) }
275}
276
277pub unsafe fn usart2_mut() -> &'static mut Usart {
279 deref_mut(USART2)
280}
281
282pub fn usart3() -> &'static Usart {
284 unsafe { deref(USART3) }
285}
286
287pub unsafe fn usart3_mut() -> &'static mut Usart {
289 deref_mut(USART3)
290}
291
292unsafe fn deref<T>(address: usize) -> &'static T {
293 &*(address as *const T)
294}
295
296unsafe fn deref_mut<T>(address: usize) -> &'static mut T {
297 &mut *(address as *mut T)
298}
299
300use core::ptr;
303
304impl spi::Dr {
305 pub fn read_u8(&self) -> u8 {
307 unsafe { ptr::read_volatile(self as *const _ as *const u8) }
308 }
309
310 pub fn write_u8(&mut self, value: u8) {
312 unsafe { ptr::write_volatile(self as *mut _ as *mut u8, value) }
313 }
314}