最近在调试F429的CAN驱动,愣是折腾了两天,最后总结如下:3 U0 P p3 \# o8 { 1. 驱动没有使能重复发送,在环回模式时输出波特率(10KHz)是正确的,一旦切换到正常模式F429发送另外的板子(MCU为F103,已经验证硬件是OK的)接收时,波形异常,MCU引脚上有重复的波形(56低16高56低124高,单位us),ESR错误代码位隐性错误;移除F1后,数据波特率是正确的;# \- k- m6 ]* J8 r' \ 2. 驱动使能重复发送,F429发送另外的板子(MCU为F103,已经验证可以长时间接收)接收,上电后能正常通讯(10K),一段(时间不等,几分钟到半小时)时间后,通讯异常直接不能通讯,间隔100ms有16个重复的异常波形——MCU引脚上有16个重复的波形(520低2600高,单位us,F429错误状态寄存器显示LEC=5[位显性错误]),移除F1后,F4一直重复发送数据,且数据正确; 反复查了F429的寄存器及网上的例程(端口时钟未使能等),调试了所有可能的设置,问题任然存在,总是会出现为阴性错误、位显性错误。& K% Z) R+ z! }! t- C) A1 Z 此时怀疑硬件CAN驱动器有问题,最后断开F429 MCU与CAN驱动器,使用F103 MCU的TX/RX来控制F429硬件板上的CAN驱动器,第一个板子收发都可以,这时候有点懵了...+ a/ t' U0 V i6 { 仍然怀疑有问题,在换一个F429的板子,此时F103 MCU发送,但是CAN总线上的设备已经无法接收到数据了,继续测试了其余的F429的CAN驱动器,同样的是CAN驱动器有问题... : F, A3 z$ X! M" e9 g D$ M 悲剧的是居然遇到芯片有问题,两个板子上的CAN驱动器批次确实不一样... 1 E J7 `- G5 O. ]: ?# y5 E: K R 3. 如何分析CAN差分数据,确认是否发送的数据是否正确:3 H$ R) `! B+ \; [ 知识点:根据CAN标准,当CAN总线上出现5连个连续的相同电平时,会自动插入1个反向电平(如:当出现5个连续的0则插入一个1,反之一样); 发送标准帧数据,11位ID,将测试探头地接CANL,信号线接CANH,并且信号反相,抓取波形如下:3 y( K O8 }, E% z( H' z$ W! l3 O 从图中读取波形可以看出发送数据二进制如下(有效数据域,CRC数据之前的数据):# O9 J+ w% E" [1 M* h. ^ 波形读取的数据与发送的一致。. J, w; B& J# N 9 W1 b7 l- }9 F+ P# J% m |
感谢分享! |
STM32固件库分享,超全系列整理
【中文文档】AN3965_STM32F40x和STM32F41x基于串口的IAP
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32F4中文用户手册
基于STM32F407的FreeRTOS阶段性的总结(13)
STM32F400、STM32F402 Cortex-M4超值单片机
基于STM32F407的FreeRTOS获取各任务运行时间及占用情况(4)
基于STM32F407的FreeRTOS任务的挂起与恢复(3)
基于STM32F407的FreeRTOS任务的创建与删除经验分享(2)
基于STM32F407的FreeRTOS环境搭建经验分享(1)