@@ -47,6 +47,8 @@ void can_deinit_all(void) {
4747 }
4848}
4949
50+ #if !MICROPY_HW_ENABLE_FDCAN
51+
5052bool can_init (pyb_can_obj_t * can_obj , uint32_t mode , uint32_t prescaler , uint32_t sjw , uint32_t bs1 , uint32_t bs2 , bool auto_restart ) {
5153 CAN_InitTypeDef * init = & can_obj -> can .Init ;
5254 init -> Mode = mode << 4 ; // shift-left so modes fit in a small-int
@@ -158,7 +160,7 @@ void can_deinit(pyb_can_obj_t *self) {
158160 }
159161}
160162
161- void can_clearfilter (uint32_t f , uint8_t bank ) {
163+ void can_clearfilter (pyb_can_obj_t * self , uint32_t f , uint8_t bank ) {
162164 CAN_FilterConfTypeDef filter ;
163165
164166 filter .FilterIdHigh = 0 ;
@@ -175,12 +177,12 @@ void can_clearfilter(uint32_t f, uint8_t bank) {
175177 HAL_CAN_ConfigFilter (NULL , & filter );
176178}
177179
178- int can_receive (CAN_TypeDef * can , int fifo , CanRxMsgTypeDef * msg , uint32_t timeout_ms ) {
180+ int can_receive (CAN_HandleTypeDef * can , int fifo , CanRxMsgTypeDef * msg , uint8_t * data , uint32_t timeout_ms ) {
179181 volatile uint32_t * rfr ;
180182 if (fifo == CAN_FIFO0 ) {
181- rfr = & can -> RF0R ;
183+ rfr = & can -> Instance -> RF0R ;
182184 } else {
183- rfr = & can -> RF1R ;
185+ rfr = & can -> Instance -> RF1R ;
184186 }
185187
186188 // Wait for a message to become available, with timeout
@@ -193,7 +195,7 @@ int can_receive(CAN_TypeDef *can, int fifo, CanRxMsgTypeDef *msg, uint32_t timeo
193195 }
194196
195197 // Read message data
196- CAN_FIFOMailBox_TypeDef * box = & can -> sFIFOMailBox [fifo ];
198+ CAN_FIFOMailBox_TypeDef * box = & can -> Instance -> sFIFOMailBox [fifo ];
197199 msg -> IDE = box -> RIR & 4 ;
198200 if (msg -> IDE == CAN_ID_STD ) {
199201 msg -> StdId = box -> RIR >> 21 ;
@@ -204,15 +206,15 @@ int can_receive(CAN_TypeDef *can, int fifo, CanRxMsgTypeDef *msg, uint32_t timeo
204206 msg -> DLC = box -> RDTR & 0xf ;
205207 msg -> FMI = box -> RDTR >> 8 & 0xff ;
206208 uint32_t rdlr = box -> RDLR ;
207- msg -> Data [0 ] = rdlr ;
208- msg -> Data [1 ] = rdlr >> 8 ;
209- msg -> Data [2 ] = rdlr >> 16 ;
210- msg -> Data [3 ] = rdlr >> 24 ;
209+ data [0 ] = rdlr ;
210+ data [1 ] = rdlr >> 8 ;
211+ data [2 ] = rdlr >> 16 ;
212+ data [3 ] = rdlr >> 24 ;
211213 uint32_t rdhr = box -> RDHR ;
212- msg -> Data [4 ] = rdhr ;
213- msg -> Data [5 ] = rdhr >> 8 ;
214- msg -> Data [6 ] = rdhr >> 16 ;
215- msg -> Data [7 ] = rdhr >> 24 ;
214+ data [4 ] = rdhr ;
215+ data [5 ] = rdhr >> 8 ;
216+ data [6 ] = rdhr >> 16 ;
217+ data [7 ] = rdhr >> 24 ;
216218
217219 // Release (free) message from FIFO
218220 * rfr |= CAN_RF0R_RFOM0 ;
@@ -427,4 +429,6 @@ void CAN3_SCE_IRQHandler(void) {
427429}
428430#endif
429431
432+ #endif // !MICROPY_HW_ENABLE_FDCAN
433+
430434#endif // MICROPY_HW_ENABLE_CAN
0 commit comments