@@ -15,38 +15,58 @@ use as_slice::{
1515 AsMutSlice ,
1616} ;
1717
18- use crate :: hal:: blocking:: i2c:: { Read , Write , WriteRead } ;
1918
2019#[ cfg( feature = "stm32l0x2" ) ]
2120use crate :: dma:: {
2221 self ,
2322 Buffer
2423} ;
25- use crate :: gpio:: gpioa:: { PA10 , PA9 } ;
26- use crate :: gpio:: gpiob:: { PB6 , PB7 } ;
27- use crate :: gpio:: { AltMode , OpenDrain , Output } ;
2824use crate :: pac:: {
2925 i2c1:: {
3026 RegisterBlock ,
3127 cr2:: RD_WRN_A ,
3228 }
3329} ;
34- pub use crate :: pac:: I2C1 ;
3530use crate :: rcc:: Rcc ;
3631use crate :: time:: Hertz ;
3732use cast:: u8;
3833
39- # [ cfg ( feature = "stm32l0x1" ) ]
40- use crate :: gpio :: gpioa :: { PA13 , PA4 } ;
34+ // I²C traits
35+ use crate :: hal :: blocking :: i2c :: { Read , Write , WriteRead } ;
4136
42- #[ cfg( any( feature = "stm32l0x2" , feature = "stm32l0x3" ) ) ]
37+ // I/O Imports
38+ use crate :: gpio:: { AltMode , OpenDrain , Output } ;
39+ #[ cfg( feature = "io-STM32L021" ) ]
40+ use crate :: {
41+ gpio:: {
42+ gpioa:: { PA4 , PA9 , PA10 , PA13 } ,
43+ gpiob:: { PB6 , PB7 , PB8 } ,
44+ } ,
45+ pac:: I2C1 ,
46+ } ;
47+ #[ cfg( feature = "io-STM32L031" ) ]
4348use crate :: {
4449 gpio:: {
45- gpioa:: PA8 ,
46- gpiob:: { PB10 , PB11 , PB13 , PB14 , PB4 , PB8 , PB9 } ,
47- gpioc:: { PC0 , PC1 } ,
50+ gpioa:: { PA9 , PA10 } ,
51+ gpiob:: { PB6 , PB7 , PB8 , PB9 } ,
4852 } ,
49- pac:: { I2C2 , I2C3 } ,
53+ pac:: I2C1 ,
54+ } ;
55+ #[ cfg( feature = "io-STM32L051" ) ]
56+ use crate :: {
57+ gpio:: {
58+ gpiob:: { PB6 , PB7 , PB8 , PB9 , PB10 , PB11 , PB13 , PB14 } ,
59+ } ,
60+ pac:: { I2C1 , I2C2 } ,
61+ } ;
62+ #[ cfg( feature = "io-STM32L071" ) ]
63+ use crate :: {
64+ gpio:: {
65+ gpioa:: { PA8 , PA9 , PA10 } ,
66+ gpiob:: { PB4 , PB6 , PB7 , PB8 , PB9 , PB10 , PB11 , PB13 , PB14 } ,
67+ gpioc:: { PC0 , PC1 , PC9 } ,
68+ } ,
69+ pac:: { I2C1 , I2C2 , I2C3 } ,
5070} ;
5171
5272/// I2C abstraction
@@ -488,32 +508,71 @@ macro_rules! i2c {
488508 } ;
489509}
490510
491- #[ cfg( feature = "stm32l0x1" ) ]
511+
512+ #[ cfg( feature = "io-STM32L021" ) ]
492513i2c ! (
493- I2C1 ,
494- i2c1en,
495- i2c1rst,
514+ I2C1 , i2c1en, i2c1rst,
496515 sda: [
497- ( PB7 <Output <OpenDrain >>, AltMode :: AF1 ) ,
498- ( PA10 <Output <OpenDrain >>, AltMode :: AF6 ) ,
516+ ( PA10 <Output <OpenDrain >>, AltMode :: AF1 ) ,
499517 ( PA13 <Output <OpenDrain >>, AltMode :: AF3 ) ,
518+ ( PB7 <Output <OpenDrain >>, AltMode :: AF1 ) ,
500519 ] ,
501520 scl: [
502- ( PB6 <Output <OpenDrain >>, AltMode :: AF1 ) ,
503- ( PA9 <Output <OpenDrain >>, AltMode :: AF6 ) ,
504521 ( PA4 <Output <OpenDrain >>, AltMode :: AF3 ) ,
522+ ( PA9 <Output <OpenDrain >>, AltMode :: AF1 ) ,
523+ ( PB6 <Output <OpenDrain >>, AltMode :: AF1 ) ,
524+ ( PB8 <Output <OpenDrain >>, AltMode :: AF4 ) ,
505525 ] ,
506526) ;
507527
508- #[ cfg( any ( feature = "stm32l0x2" , feature = "stm32l0x3" ) ) ]
528+ #[ cfg( feature = "io-STM32L031" ) ]
509529i2c ! (
510- I2C1 ,
511- i2c1en,
512- i2c1rst,
530+ I2C1 , i2c1en, i2c1rst,
531+ sda: [
532+ ( PA10 <Output <OpenDrain >>, AltMode :: AF1 ) ,
533+ ( PB7 <Output <OpenDrain >>, AltMode :: AF1 ) ,
534+ ( PB9 <Output <OpenDrain >>, AltMode :: AF4 ) ,
535+ ] ,
536+ scl: [
537+ ( PA9 <Output <OpenDrain >>, AltMode :: AF1 ) ,
538+ ( PB6 <Output <OpenDrain >>, AltMode :: AF1 ) ,
539+ ( PB8 <Output <OpenDrain >>, AltMode :: AF4 ) ,
540+ ] ,
541+ ) ;
542+
543+ #[ cfg( feature = "io-STM32L051" ) ]
544+ i2c ! (
545+ I2C1 , i2c1en, i2c1rst,
546+ sda: [
547+ ( PB7 <Output <OpenDrain >>, AltMode :: AF1 ) ,
548+ ( PB9 <Output <OpenDrain >>, AltMode :: AF4 ) ,
549+ ] ,
550+ scl: [
551+ ( PB6 <Output <OpenDrain >>, AltMode :: AF1 ) ,
552+ ( PB8 <Output <OpenDrain >>, AltMode :: AF4 ) ,
553+ ] ,
554+ ) ;
555+
556+ #[ cfg( feature = "io-STM32L051" ) ]
557+ i2c ! (
558+ I2C2 , i2c2en, i2c2rst,
559+ sda: [
560+ ( PB11 <Output <OpenDrain >>, AltMode :: AF6 ) ,
561+ ( PB14 <Output <OpenDrain >>, AltMode :: AF5 ) ,
562+ ] ,
563+ scl: [
564+ ( PB10 <Output <OpenDrain >>, AltMode :: AF6 ) ,
565+ ( PB13 <Output <OpenDrain >>, AltMode :: AF5 ) ,
566+ ] ,
567+ ) ;
568+
569+ #[ cfg( feature = "io-STM32L071" ) ]
570+ i2c ! (
571+ I2C1 , i2c1en, i2c1rst,
513572 sda: [
514573 ( PA10 <Output <OpenDrain >>, AltMode :: AF6 ) ,
515- ( PB7 <Output <OpenDrain >>, AltMode :: AF1 ) ,
516- ( PB9 <Output <OpenDrain >>, AltMode :: AF4 ) ,
574+ ( PB7 <Output <OpenDrain >>, AltMode :: AF1 ) ,
575+ ( PB9 <Output <OpenDrain >>, AltMode :: AF4 ) ,
517576 ] ,
518577 scl: [
519578 ( PA9 <Output <OpenDrain >>, AltMode :: AF6 ) ,
@@ -522,11 +581,9 @@ i2c!(
522581 ] ,
523582) ;
524583
525- #[ cfg( any ( feature = "stm32l0x2" , feature = "stm32l0x3" ) ) ]
584+ #[ cfg( feature = "io-STM32L071" ) ]
526585i2c ! (
527- I2C2 ,
528- i2c2en,
529- i2c2rst,
586+ I2C2 , i2c2en, i2c2rst,
530587 sda: [
531588 ( PB11 <Output <OpenDrain >>, AltMode :: AF6 ) ,
532589 ( PB14 <Output <OpenDrain >>, AltMode :: AF5 ) ,
@@ -537,22 +594,20 @@ i2c!(
537594 ] ,
538595) ;
539596
540- #[ cfg( any ( feature = "stm32l0x2" , feature = "stm32l0x3" ) ) ]
597+ #[ cfg( feature = "io-STM32L071" ) ]
541598i2c ! (
542- I2C3 ,
543- i2c3en,
544- i2c3rst,
599+ I2C3 , i2c3en, i2c3rst,
545600 sda: [
546601 ( PB4 <Output <OpenDrain >>, AltMode :: AF7 ) ,
547602 ( PC1 <Output <OpenDrain >>, AltMode :: AF7 ) ,
603+ ( PC9 <Output <OpenDrain >>, AltMode :: AF7 ) ,
548604 ] ,
549605 scl: [
550606 ( PA8 <Output <OpenDrain >>, AltMode :: AF7 ) ,
551607 ( PC0 <Output <OpenDrain >>, AltMode :: AF7 ) ,
552608 ] ,
553609) ;
554610
555-
556611/// Token used for DMA transfers
557612///
558613/// This is an implementation detail. The user doesn't have to deal with this
0 commit comments