libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
stm32_can.cpp
1#include "stm32_can.hpp"
2
3#ifdef HAL_CAN_MODULE_ENABLED
4
5using namespace LibXR;
6
7STM32CAN* STM32CAN::map[STM32_CAN_NUMBER] = {nullptr};
8
15stm32_can_id_t STM32_CAN_GetID(CAN_TypeDef* addr)
16{
17 if (addr == nullptr)
18 { // NOLINT
19 return stm32_can_id_t::STM32_CAN_ID_ERROR;
20 }
21#ifdef CAN1
22 else if (addr == CAN1)
23 { // NOLINT
24 return stm32_can_id_t::STM32_CAN1;
25 }
26#endif
27#ifdef CAN2
28 else if (addr == CAN2)
29 { // NOLINT
30 return stm32_can_id_t::STM32_CAN2;
31 }
32#endif
33#ifdef CAN3
34 else if (addr == CAN3)
35 { // NOLINT
36 return stm32_can_id_t::STM32_CAN3;
37 }
38#endif
39 else
40 {
41 return stm32_can_id_t::STM32_CAN_ID_ERROR;
42 }
43}
44
45extern "C" void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* hcan)
46{
47 STM32CAN* can = STM32CAN::map[STM32_CAN_GetID(hcan->Instance)];
48 if (can)
49 {
50 can->ProcessRxInterrupt();
51 }
52}
53
54extern "C" void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef* hcan)
55{
56 STM32CAN* can = STM32CAN::map[STM32_CAN_GetID(hcan->Instance)];
57 if (can)
58 {
59 can->ProcessRxInterrupt();
60 }
61}
62
63extern "C" void HAL_CAN_ErrorCallback(CAN_HandleTypeDef* hcan)
64{
65 HAL_CAN_ResetError(hcan);
66}
67
68extern "C" void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* hcan)
69{
70 STM32CAN* can = STM32CAN::map[STM32_CAN_GetID(hcan->Instance)];
71 if (can)
72 {
73 can->ProcessTxInterrupt();
74 }
75}
76
77extern "C" void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef* hcan)
78{
79 STM32CAN* can = STM32CAN::map[STM32_CAN_GetID(hcan->Instance)];
80 if (can)
81 {
82 can->ProcessTxInterrupt();
83 }
84}
85
86extern "C" void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef* hcan)
87{
88 STM32CAN* can = STM32CAN::map[STM32_CAN_GetID(hcan->Instance)];
89 if (can)
90 {
91 can->ProcessTxInterrupt();
92 }
93}
94
95#endif
STM32CAN 类,用于处理 STM32 系统的 CAN 通道。 Provides handling for STM32 CAN channels.
Definition stm32_can.hpp:39
void ProcessRxInterrupt()
处理接收中断
void ProcessTxInterrupt()
处理发送中断
LibXR Color Control Library / LibXR终端颜色控制库