打印
[STM32F4]

stm32f405的can2能发送就不能接收,能接受就不能发送

[复制链接]
6014|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如题
沙发
1712032162|  楼主 | 2015-5-24 10:45 | 只看该作者
自己顶个

使用特权

评论回复
板凳
1712032162|  楼主 | 2015-5-24 10:55 | 只看该作者
在线等

使用特权

评论回复
地板
1712032162|  楼主 | 2015-5-24 11:07 | 只看该作者
附上自己的can2初始化代码
void CAN2_Configuration(void)
{
    CAN_InitTypeDef        can;
    CAN_FilterInitTypeDef  can_filter;
    GPIO_InitTypeDef       gpio;
    NVIC_InitTypeDef       nvic;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_CAN2);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_CAN2);

    gpio.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12 ;
    gpio.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init(GPIOB, &gpio);

    nvic.NVIC_IRQChannel = CAN2_RX0_IRQn;
    nvic.NVIC_IRQChannelPreemptionPriority = 0;
    nvic.NVIC_IRQChannelSubPriority = 1;
    nvic.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&nvic);

    CAN_DeInit(CAN2);
    CAN_StructInit(&can);

    can.CAN_TTCM = DISABLE;
    can.CAN_ABOM = DISABLE;   
    can.CAN_AWUM = DISABLE;   
    can.CAN_NART = ENABLE;   
    can.CAN_RFLM = DISABLE;   
    can.CAN_TXFP = DISABLE;     
    can.CAN_Mode = CAN_Mode_Normal;
    can.CAN_SJW  = CAN_SJW_1tq;
    can.CAN_BS1 = CAN_BS1_12tq;
    can.CAN_BS2 = CAN_BS2_3tq;
    can.CAN_Prescaler = 1;   //CAN BaudRate 42/(1+9+4)/3=1Mbps
    CAN_Init(CAN2, &can);
   
    can_filter.CAN_FilterNumber=14;
    can_filter.CAN_FilterMode=CAN_FilterMode_IdMask;
    can_filter.CAN_FilterScale=CAN_FilterScale_32bit;
    can_filter.CAN_FilterIdHigh=0x0000;
    can_filter.CAN_FilterIdLow=0x0000;
    can_filter.CAN_FilterMaskIdHigh=0x0000;
    can_filter.CAN_FilterMaskIdLow=0x0000;
    can_filter.CAN_FilterFIFOAssignment=0;//the message which pass the filter save in fifo0
    can_filter.CAN_FilterActivation=ENABLE;
    CAN_FilterInit(&can_filter);
   
    CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);
}

使用特权

评论回复
5
1712032162|  楼主 | 2015-5-24 11:09 | 只看该作者
发现将can2的can_filter.CAN_FilterNumber=1;这样写,能发送,不能接收,can_filter.CAN_FilterNumber=14;这样写能接收,不能发送

使用特权

评论回复
6
1712032162|  楼主 | 2015-5-24 11:11 | 只看该作者
还望用过can2的大神,指点迷津

使用特权

评论回复
7
1712032162|  楼主 | 2015-5-24 11:17 | 只看该作者
没人帮我吗

使用特权

评论回复
8
1712032162|  楼主 | 2015-5-24 11:21 | 只看该作者
这帖子不能沉,急

使用特权

评论回复
9
1712032162|  楼主 | 2015-5-24 11:40 | 只看该作者
再顶!~~~~~

使用特权

评论回复
10
1712032162|  楼主 | 2015-5-24 12:21 | 只看该作者
以上配置代码请问有问题吗

使用特权

评论回复
11
1712032162|  楼主 | 2015-5-24 13:25 | 只看该作者
继续顶

使用特权

评论回复
12
myxiaonia| | 2015-5-24 23:39 | 只看该作者
一般说到can2的问题,就该注意手册中说的  它不是个独立can  怎么个非独立法呢  其实就是要打开can1的时钟

使用特权

评论回复
13
hyhmh| | 2015-5-25 09:23 | 只看该作者
“能”的判断依据?
通常都是没仔细看手册,特殊功能寄存器配置出了问题

使用特权

评论回复
14
amanda_s| | 2015-5-27 09:47 | 只看该作者
楼主找到原因了吗?
ST的Cube库里和标准外设库里都有CAN收发的例子,可以去对比一下是哪里的问题。

使用特权

评论回复
15
毛子| | 2016-7-4 12:51 | 只看该作者
刚才也遇到了CAN2无法进入中断,我感觉是固件库的问题。
滤波器的配置都是针对CAN1的,每看到CAN2

使用特权

评论回复
16
gplus302| | 2018-9-5 10:41 | 只看该作者
看看是不是滤波设置的有问题,我用的是STM32F413,CAN2能发数据,不能接受数据,查了一下滤波设置,大概理解如下:
CAN1和CAN2公用28个filter bank,所以需要通过CAN filter master register (CAN_FMR) 这个寄存器的CANSB[5:0]来设置,哪些bank归CAN1使用,哪些bank归CAN2使用,我设置的是14,也就是说CAN1用0~13号bank,CAN2用14~27号bank,这样设置后can就可以正常接受了,希望对你有帮助!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

0

粉丝