思路框架
- 触发:用按键的外部中断(EXTI)置一个“需要发送”的标志位,别在中断里发。
- 发送:在主循环里根据标志位,构造一帧数据,调用发送接口。
- 接收:用当前的 FIFO0 水印/新消息中断回调里只做“拷贝数据 + 置接收标志位”,别在中断里打印。
- 输出:在主循环里检测接收标志位,通过 USART 打印你收到的帧(ID、DLC、数据)。
按键侧的关键点
- 用 EXTI(下降沿/上升沿)中断触发,HAL_GPIO_EXTI_Callback 里只做:
- 简单去抖(比如用 HAL_GetTick() 判断 50ms 窗口)
- 置一个 fdcan_tx_request = 1
- 千万别在按键中断里直接发 CAN 或打印串口
串口输出的要点
- 先保证串口波特率和电脑一致(比如 115200 8N1)。
- 打印建议放在主循环用 HAL_UART_Transmit(阻塞)先跑通;后续再考虑 DMA/IT。
- 如果要 printf,做一次 fputc 重定向,注意换行符转换。
主循环里的状态机
- 如果 fdcan_tx_request == 1:
- 组帧:标准ID(比如 0x123),数据长度选择 8 字节,填一些容易识别的内容(如递增计数)
- 调用 HAL_FDCAN_AddMessageToTxFifoQ(...)
- 可选:打开 TX事件FIFO 或查询状态做一次发送完成确认
- 清 fdcan_tx_request
- 如果 fdcan_rx_ready == 1:
- 从你在回调里缓存的 RxHeader/RxDataBuff 拿数据
- 通过 USART 打印:ID、DLC->字节数、每个字节的十六进制
- 清 fdcan_rx_ready
1171

被折叠的 条评论
为什么被折叠?



