Browse Source

移植CAN通讯的硬件测试程序

master
tianjialong 2 years ago
parent
commit
1aa5d2bcff
  1. 2
      app/MDK-ARM/app.uvguix.29643
  2. 67
      src/board/hardware.cpp
  3. 13
      src/board/hardware.hpp

2
app/MDK-ARM/app.uvguix.29643

@ -1822,7 +1822,7 @@
<Name>Build</Name>
<Buttons>
<Len>966</Len>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
</Buttons>
<OriginalItems>
<Len>583</Len>

67
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);
}

13
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
Loading…
Cancel
Save