OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3264|回复: 10

STM32F107 CAN不通………………

[复制链接]

1

主题

7

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-29
在线时间
4 小时
发表于 2016-12-7 14:20:18 | 显示全部楼层 |阅读模式
16金钱
本帖最后由 Ghost123456 于 2016-12-8 20:09 编辑

各位大哥大姐,新手求助啊!咋个回事呢,CAN1和CAN2都不通;之前在103上面CAN1是OK的;
先解决CAN1的问题
代码如下:


u8 CAN1_Init()
{

        GPIO_InitTypeDef GPIO_InitStructure;
        CAN_InitTypeDef        CAN_InitStructure;
         CAN_FilterInitTypeDef  CAN_FilterInitStructure;
#if CAN_RX0_INT_ENABLE
           NVIC_InitTypeDef  NVIC_InitStructure;
#endif
        

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//ê1ÄüPORTAê±Öó                                                                                                                    
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); //ê1ÄüCAN1ê±Öó
        RCC_APB1PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //ê1ÄüAFIOê±Öó
        GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);//¶Ë¿úó3éä
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíì
        GPIO_Init(GPIOB, &GPIO_InitStructure);                //3õê¼»ˉIO

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//éÏà-êäèë
        GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉIO

         //CANμ¥ÔaéèÖÃ
         CAN_InitStructure.CAN_TTCM=DISABLE;                                                 //·Çê±¼ä′¥·¢í¨DÅģ꽠 //
         CAN_InitStructure.CAN_ABOM=DISABLE;                                                 //èí¼t×Ô¶ˉàëÏß1üàí         //
        CAN_InitStructure.CAN_AWUM=DISABLE;                                                 //ËˉÃßÄ£ê½í¨1yèí¼t»½DÑ(Çå3yCAN->MCRμÄSLEEPλ)//
        CAN_InitStructure.CAN_NART=ENABLE;                                                         //½ûÖ1±¨ÎÄ×Ô¶ˉ′«Ëí //
        CAN_InitStructure.CAN_RFLM=DISABLE;                                                 //±¨ÎÄ2»Ëø¶¨,DÂμĸ2¸Ç¾éμÄ //
        CAN_InitStructure.CAN_TXFP=DISABLE;                                                 //óÅÏè¼¶ó鱨Îıêê¶·û¾ö¶¨ //
        CAN_InitStructure.CAN_Mode= 1;                 //Ä£ê½éèÖão mode:0,ÆÕí¨Ä£ê½;1,»Ø»·Ä£ê½; //
        //éèÖÃ2¨ìØÂê
        CAN_InitStructure.CAN_SJW=CAN_SJW_1tq ;                                //ÖØDÂí¬2½ìøÔ¾¿í¶è(Tsjw)Îatsjw+1¸öê±¼äμ¥λ  CAN_SJW_1tq         CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
        CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; //Tbs1=tbs1+1¸öê±¼äμ¥λCAN_BS1_1tq ~CAN_BS1_16tq
        CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;//Tbs2=tbs2+1¸öê±¼äμ¥λCAN_BS2_1tq ~        CAN_BS2_8tq
        CAN_InitStructure.CAN_Prescaler=18;            //·ÖÆμÏμêy(Fdiv)Îabrp+1        //125kbps
        CAN_Init(CAN1, &CAN_InitStructure);            // 3õê¼»ˉCAN1

         CAN1->FMR|=0X00000E00;//′óμú14ÎaCAN2μÄÂË2¨Æ÷
        CAN_FilterInitStructure.CAN_FilterNumber=0;          //1yÂËÆ÷0
         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ
        CAN_FilterInitStructure.CAN_FilterIdHigh=0x060F;////32λID
        CAN_FilterInitStructure.CAN_FilterIdLow=0x8000;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0FFF;//32λMASK
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xF000;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//1yÂËÆ÷01Øáaμ½FIFO0
         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î1yÂËÆ÷0
        CAN_FilterInit(&CAN_FilterInitStructure);//ÂË2¨Æ÷3õê¼»ˉ
#if CAN_RX0_INT_ENABLE
        CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0ÏûÏ¢1òoÅÖD¶ÏÔêDí.                    
        NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // Ö÷óÅÏè¼¶Îa1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;            // ′ÎóÅÏè¼¶Îa2
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
#endif
        return 0;
}   

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-29
在线时间
4 小时
 楼主| 发表于 2016-12-8 16:02:38 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-12-8 21:09:16 | 显示全部楼层
参考我们407的例程修改吧
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-29
在线时间
4 小时
 楼主| 发表于 2016-12-8 21:49:11 | 显示全部楼层
本帖最后由 Ghost123456 于 2016-12-8 23:31 编辑
正点原子 发表于 2016-12-8 21:09
参考我们407的例程修改吧

感谢大拿回复,关键是已经对照一个成功的代码对照了很久;把ESR寄存器值也看了下,都是0,没有提示错误;另外TSR寄存器的状态也正常,邮箱0的状态是03,即上次的发送尝试成功;惨不忍睹啊
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-29
在线时间
4 小时
 楼主| 发表于 2016-12-9 14:16:44 | 显示全部楼层
不知道还有没有什么别的情况,能造成这样的问题
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2016-11-14
在线时间
16 小时
发表于 2016-12-9 14:34:37 | 显示全部楼层
能发送数据,不能接收数据吗?还是接收中断处理程序出了问题?
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-29
在线时间
4 小时
 楼主| 发表于 2016-12-9 19:20:21 | 显示全部楼层
本帖最后由 Ghost123456 于 2016-12-9 19:22 编辑
zhulikai8 发表于 2016-12-9 14:34
能发送数据,不能接收数据吗?还是接收中断处理程序出了问题?

你好,现在我是用回环模式;不能发送数据,查看了好几个寄存器,都是按照流程走的;可惜就是看不到TX信号上的波形,还显示发送成功……一直是高电平…………
回复

使用道具 举报

1

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2016-11-14
在线时间
16 小时
发表于 2016-12-10 14:19:25 | 显示全部楼层
Ghost123456 发表于 2016-12-9 19:20
你好,现在我是用回环模式;不能发送数据,查看了好几个寄存器,都是按照流程走的;可惜就是看不到TX信号 ...

你让它一直循环不停地发送数据了吗?
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-29
在线时间
4 小时
 楼主| 发表于 2016-12-12 11:00:09 | 显示全部楼层
zhulikai8 发表于 2016-12-10 14:19
你让它一直循环不停地发送数据了吗?

是的,之前是确认发送完毕后再发送,后来也加了延时再发送,还是一样的结果
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-4-11
在线时间
8 小时
发表于 2017-2-8 17:14:50 | 显示全部楼层
解决了吗?
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-4-11
在线时间
8 小时
发表于 2017-2-8 17:15:24 | 显示全部楼层
我的程序中107的can都可以用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 00:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表