[STM32F4]

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

[复制链接]
5718|15
手机看帖
扫描二维码
随时随地手机跟帖
1712032162|  楼主 | 2015-5-24 10:43 | 显示全部楼层 |阅读模式
如题
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);
}

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 11:09 | 显示全部楼层
发现将can2的can_filter.CAN_FilterNumber=1;这样写,能发送,不能接收,can_filter.CAN_FilterNumber=14;这样写能接收,不能发送

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 11:11 | 显示全部楼层
还望用过can2的大神,指点迷津

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 11:17 | 显示全部楼层
没人帮我吗

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 11:21 | 显示全部楼层
这帖子不能沉,急

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 11:40 | 显示全部楼层
再顶!~~~~~

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 12:21 | 显示全部楼层
以上配置代码请问有问题吗

使用特权

评论回复
1712032162|  楼主 | 2015-5-24 13:25 | 显示全部楼层
继续顶

使用特权

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

使用特权

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

使用特权

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

使用特权

评论回复
毛子| | 2016-7-4 12:51 | 显示全部楼层
刚才也遇到了CAN2无法进入中断,我感觉是固件库的问题。 捕获.PNG
滤波器的配置都是针对CAN1的,每看到CAN2

使用特权

评论回复
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

粉丝