CAN BUS STM32 Nucleo F429ZI CAN 写入失败

Posted

技术标签:

【中文标题】CAN BUS STM32 Nucleo F429ZI CAN 写入失败【英文标题】:CAN BUS STM32 Nucleo F429ZI CAN Write Fail 【发布时间】:2021-05-01 08:45:39 【问题描述】:

这是 Veysel 我的主板是 STM32 Nucleo F429ZI,我使用 Mbed-os 6.6.0。我可以从我的汽车 CANBus 数据中读取,但我无法在总线上写入。我用两个STM32(相同的板)试了一下,我的传输器是SN65HVD230 所以我知道我可以在 CANBus 上阅读,但我不能写。

我已经尝试过,https://os.mbed.com/users/WiredHome/notebook/can---getting-started/ 使用一个 STM32,我已经尝试过

#include "mbed.h"

//Ticker ticker;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
//CAN can1(PD_0, PD_1);
CAN can2(PB_8, PB_9);
DigitalOut led3(LED3);
 
 
char counter = 0;
 
void messageReceivedISR() 
 CANMessage msg;
 if(can2.read(msg)) 
        printf("Message received: %d, from %d\r\n", msg.data[0], msg.id);
        if(msg.id == 1100)
            led2 = !led2;
        if(msg.id == 1102)
            led3 = !led3;     

 
   

 
int main() 

   
can2.frequency(1000000);
can2.reset();
can2.attach(&messageReceivedISR, CAN::RxIrq);
while(1) 
    if(can2.write(CANMessage(1130, &counter, 1))) 
        printf("loop send()\r\n");
        counter++;
        printf("Message sent: %d\r\n", counter);
        led1 = !led1;
    
    
   // wait_ms(500);


我为两个stm32切换写入地址 这是填满邮箱三遍然后停止。没有读过。

我试过直接用一根跳线从 Crx 连接到 Ctx,但没有任何变化。

我也试过用STM32到Teensy(Teensy正在控制我的汽车LED屏幕它也可以读取),但失败了。

请帮忙?

【问题讨论】:

那么如何初始化 CAN 控制器?也许您已将其设置为“环回”模式等。 我已经尽力了::Normal 【参考方案1】:

对我来说,听起来您忘记驱动 CAN 收发器的“RS”引脚。这在数据表中有点误导,但它不仅是“斜率”控制,而且还将 Transciever 设置为睡眠状态。我建议使用 10k 斜率控制电阻,除非需要,否则如下所示:Schematics

【讨论】:

你太棒了。我改变了我的transiver并在rs和gnd之间放置了220欧姆并解决了。 220 ohm 对我来说似乎相当低,请参阅芯片手册第 20 和 21 页:ti.com/lit/ds/symlink/sn65hvd230.pdf,其中 TI 建议至少 10 kOhms。顺便说一句:那么请您接受我的回答作为解决方案吗?非常感谢

以上是关于CAN BUS STM32 Nucleo F429ZI CAN 写入失败的主要内容,如果未能解决你的问题,请参考以下文章

STM32F10xx CAN BUS相关库文件"stm32f10x_can.c"内的库函数解析

无法使用 HAL 驱动程序在 STM32F429 上写入双字

STM32F429第3章 ThreadX USBX协议栈移植到STM32F429

STM32F429开发板用户手册第18章 STM32F429的GPIO应用之跑马灯

在STM32 Nucleo上多次触发上升沿中断

在 Nucleo STM32 板上设置 SWV printf