diff options
| author | wdfk-prog <[email protected]> | 2022-11-22 10:45:51 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-11-21 21:45:51 -0500 |
| commit | 569e2ae1e8671bdb17b3fa7b4197fdff6ad5cf1d (patch) | |
| tree | 14b7f9aa35e3ec0ae5c21396a88fafd7b874cc67 /bsp/stm32 | |
| parent | 84eab69604df689716b54e1e6c38877f05d03b9f (diff) | |
[CAN]update struct can_filter_item and rt_can_msg (#6556)
* 修改ry命令,已便于自定义保存路径
* modified: components/utilities/ymodem/ry_sy.c
* 修复从被动错误恢复后发送返回异常
* 修复在自动重传模式下,ACK异常阻塞线程
- 删除TX中断函数else分支。仅当RQCP位 置一才进入该中断
- 添加SCE中断函数中关于ACK_ERR的else判断。自动重传模式下会进入该判断,打断自动重传释放完成量。
* 增加对于CAN1与CAN2的SCE中断和TX中断的公共处理函数
* formatting格式化代码
* update struct can_filter_item and rt_can_msg
1. 对过滤器号和索引号结构体定义中同一名称hdr进行重命名hdr_bank和hdr_index,
以便准确区分.采用宏定义兼容以前变量名.
2. 添加接收标识rxfifo,已指明是哪个RXFIFO.
* 更正42M下的波特率
* 修复接收获取索引号错误
* 添加接收标识
* 更新注释
* 取消CANFD限制
* update struct can_filter_item and rt_can_msg
Diffstat (limited to 'bsp/stm32')
| -rw-r--r-- | bsp/stm32/libraries/HAL_Drivers/drv_can.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_can.c b/bsp/stm32/libraries/HAL_Drivers/drv_can.c index fd26514963..f1be891dfd 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_can.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_can.c @@ -42,14 +42,14 @@ static const struct stm32_baud_rate_tab can_baud_rate_tab[] = static const struct stm32_baud_rate_tab can_baud_rate_tab[] = { {CAN1MBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 3)}, - {CAN800kBaud, (CAN_SJW_2TQ | CAN_BS1_8TQ | CAN_BS2_5TQ | 4)}, - {CAN500kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 6)}, - {CAN250kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 12)}, - {CAN125kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 24)}, - {CAN100kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 30)}, - {CAN50kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 60)}, - {CAN20kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 150)}, - {CAN10kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 300)} + {CAN800kBaud, (CAN_SJW_2TQ | CAN_BS1_8TQ | CAN_BS2_4TQ | 4)}, + {CAN500kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 6)}, + {CAN250kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 12)}, + {CAN125kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 24)}, + {CAN100kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 30)}, + {CAN50kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 60)}, + {CAN20kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 150)}, + {CAN10kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 300)} }; #else /* APB1 45MHz(max) */ static const struct stm32_baud_rate_tab can_baud_rate_tab[] = @@ -333,7 +333,7 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) /* get default filter */ for (int i = 0; i < filter_cfg->count; i++) { - if (filter_cfg->items[i].hdr == -1) + if (filter_cfg->items[i].hdr_bank == -1) { /* use default filter bank settings */ if (rt_strcmp(drv_can->name, "can1") == 0) @@ -350,7 +350,7 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) else { /* use user-defined filter bank settings */ - drv_can->FilterConfig.FilterBank = filter_cfg->items[i].hdr; + drv_can->FilterConfig.FilterBank = filter_cfg->items[i].hdr_bank; } /** * ID | CAN_FxR1[31:24] | CAN_FxR1[23:16] | CAN_FxR1[15:8] | CAN_FxR1[7:0] | @@ -401,6 +401,7 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) drv_can->FilterConfig.FilterMaskIdLow = mask_l; drv_can->FilterConfig.FilterMode = filter_cfg->items[i].mode; + drv_can->FilterConfig.FilterFIFOAssignment = filter_cfg->items[i].rxfifo;/*rxfifo = CAN_RX_FIFO0/CAN_RX_FIFO1*/ /* Filter conf */ HAL_CAN_ConfigFilter(&drv_can->CanHandle, &drv_can->FilterConfig); } @@ -610,17 +611,20 @@ static int _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo) { pmsg->rtr = RT_CAN_RTR; } + /*get rxfifo = CAN_RX_FIFO0/CAN_RX_FIFO1*/ + pmsg->rxfifo = fifo; + /* get len */ pmsg->len = rxheader.DLC; - /* get hdr */ + /* get hdr_index */ if (hcan->Instance == CAN1) { - pmsg->hdr = (rxheader.FilterMatchIndex + 1) >> 1; + pmsg->hdr_index = rxheader.FilterMatchIndex; } #ifdef CAN2 else if (hcan->Instance == CAN2) { - pmsg->hdr = (rxheader.FilterMatchIndex >> 1) + 14; + pmsg->hdr_index = rxheader.FilterMatchIndex; } #endif |
