diff --git a/app/MDK-ARM/app.uvguix.29643 b/app/MDK-ARM/app.uvguix.29643
index d5d497e..0a910d1 100644
--- a/app/MDK-ARM/app.uvguix.29643
+++ b/app/MDK-ARM/app.uvguix.29643
@@ -1822,7 +1822,7 @@
Build
966
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
diff --git a/src/board/hardware.cpp b/src/board/hardware.cpp
index 0ddf531..ff0176d 100644
--- a/src/board/hardware.cpp
+++ b/src/board/hardware.cpp
@@ -38,5 +38,68 @@ void Hardware::debug_light_periodicJob() {
/*******************************************************************************
* CAN *
*******************************************************************************/
-void Hardware::can_init() {}
-void Hardware::can_periodicJob() {}
+void Hardware::can_init() {
+ // 初始化CAN接收过滤器
+ CAN_FilterTypeDef CAN_FilterInitStructure;
+ CAN_FilterInitStructure.FilterActivation = ENABLE; // 使能过滤器
+ CAN_FilterInitStructure.FilterBank = 1; // 指定过滤器为1
+ CAN_FilterInitStructure.FilterMode = CAN_FILTERMODE_IDMASK; // 指定过滤器为标识符屏蔽位模式
+ CAN_FilterInitStructure.FilterScale = CAN_FILTERSCALE_32BIT; // 过滤器位宽为32位
+ CAN_FilterInitStructure.FilterFIFOAssignment = CAN_FILTER_FIFO0; // 设定了指向过滤器的FIFO
+
+ CAN_FilterInitStructure.FilterIdHigh = 0x0000; // 要过滤的ID高位
+ CAN_FilterInitStructure.FilterIdLow = 0x0000; // 要过滤的ID低位
+ CAN_FilterInitStructure.FilterMaskIdHigh = 0x0000; // 过滤器屏蔽标识符的高16位值
+ CAN_FilterInitStructure.FilterMaskIdLow = 0x0000; // 过滤器屏蔽标识符的低16位值
+ HAL_CAN_ConfigFilter(&hcan1, &CAN_FilterInitStructure);
+ // 启动CAN
+ HAL_CAN_MspInit(&hcan1);
+ HAL_CAN_Start(&hcan1);
+ can_HeaderTypedef_set();
+}
+void Hardware::can_HeaderTypedef_set() {
+ m_can.Can_Tx.StdId = 0x123;
+ m_can.Can_Tx.ExtId = 0x123;
+ m_can.Can_Tx.IDE = 0;
+ m_can.Can_Tx.RTR = 0;
+ m_can.Can_Tx.DLC = 8;
+
+ m_can.Can_Rx.StdId = 0x321;
+ m_can.Can_Rx.ExtId = 0x321;
+ m_can.Can_Rx.IDE = 0;
+ m_can.Can_Rx.RTR = 0;
+ m_can.Can_Rx.DLC = 8;
+}
+void Hardware::can_send(uint8_t *data, uint8_t len) {
+ {
+ static uint32_t lastprocess = 0;
+ if (sys_haspassedms(lastprocess) > 3000) {
+ lastprocess = HAL_GetTick();
+ ZLOGI(TAG, "CAN TX data: %02x %02x %02x %02x %02x %02x %02x %02x", //
+ data[7], data[6], data[5], data[4], data[3], data[2], data[1], data[0]);
+ HAL_CAN_AddTxMessage(&hcan1, &m_can.Can_Tx, m_can.tdata, &m_can.pTxMailbox);
+ }
+ }
+}
+void Hardware::can_receive(uint8_t *data, uint8_t len) {
+ if (HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &m_can.Can_Rx, m_can.adata) == HAL_OK) {
+ ZLOGI(TAG, "CAN RX buffer: %02x %02x %02x %02x %02x %02x %02x %02x", //
+ m_can.adata[7], m_can.adata[6], m_can.adata[5], m_can.adata[4], m_can.adata[3], m_can.adata[2], m_can.adata[1], m_can.adata[0]);
+ }
+}
+void Hardware::can_periodicJob() {
+ // 装载CAN字段
+ can_HeaderTypedef_set();
+ // 发送can消息
+ m_can.tdata[0] = 0x01;
+ m_can.tdata[1] = 0x02;
+ m_can.tdata[2] = 0x03;
+ m_can.tdata[3] = 0x04;
+ m_can.tdata[4] = 0x05;
+ m_can.tdata[5] = 0x06;
+ m_can.tdata[6] = 0x07;
+ m_can.tdata[7] = 0x08;
+ can_send(m_can.tdata, 8);
+ // 查询接收can消息,并通过UART1 打印接收到的CAN消息报文
+ can_receive(m_can.adata, 8);
+}
\ No newline at end of file
diff --git a/src/board/hardware.hpp b/src/board/hardware.hpp
index 918a75f..c7e7fd8 100644
--- a/src/board/hardware.hpp
+++ b/src/board/hardware.hpp
@@ -19,6 +19,16 @@ class Hardware {
/* data */
public:
+ struct can_res_t {
+ CAN_TxHeaderTypeDef Can_Tx;
+ CAN_RxHeaderTypeDef Can_Rx;
+ uint8_t tdata[8];
+ uint8_t adata[8];
+ uint32_t pTxMailbox;
+ };
+ can_res_t m_can;
+
+ public:
Hardware(/* args */){};
~Hardware(){};
@@ -35,6 +45,9 @@ class Hardware {
*******************************************************************************/
void can_init();
void can_periodicJob();
+ void can_HeaderTypedef_set();
+ void can_send(uint8_t *data, uint8_t len);
+ void can_receive(uint8_t *data, uint8_t len);
};
} // namespace iflytop