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