OpenEdv-开源电子网

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

STM32F042F6的CAN总线配置问题,回环测试有数据,正常模式没有数据

[复制链接]

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-3-27
在线时间
28 小时
发表于 2019-4-24 14:15:35 | 显示全部楼层 |阅读模式
5金钱
大家好,我用的是STM32F042F6,TSSOP20芯片,CAN引脚为PA11,PA12(与PA9,PA10复用)
当设置为CAN_Mode_LoopBack时,可以在用示波器在TX引脚看到波形,并且程序里可以接收到数据;
当设置为CAN_Mode_Normal时,TX引脚看不到波形,并且也不能接受发送CAN数据。
代码如下,请大家帮忙看看,谢谢!!


void CAN1_Init(u16 Baudrate,u16 Receive_MsgId)
{
    GPIO_InitTypeDef       GPIO_InitStructure;
    NVIC_InitTypeDef       NVIC_InitStructure;
    CAN_InitTypeDef        CAN_InitStructure;
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;

        /* CAN1 Periph clock enable */
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);
          RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA , ENABLE);
       
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
          SYSCFG->CFGR1 |= (uint32_t)SYSCFG_CFGR1_PA11_PA12_RMP;       
       
          GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_4);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_4);        

    /* Configure CAN pin: RX */  // PA11
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//          GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
          GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* Configure CAN pin: TX */   // PA12
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//          GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
       
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* enabling interrupt */
    NVIC_InitStructure.NVIC_IRQChannel         = CEC_CAN_IRQn;;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd      = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    //CAN_INIT();//CA???N??
    /* CAN register init */
//   CAN_DeInit(CAN);                     
//   CAN_StructInit(&CAN_InitStructure);   

    /* CAN cell init */
    CAN_InitStructure.CAN_TTCM = DISABLE;      
    CAN_InitStructure.CAN_ABOM = DISABLE;        
    CAN_InitStructure.CAN_AWUM = DISABLE;        
    CAN_InitStructure.CAN_NART = DISABLE;         
    CAN_InitStructure.CAN_RFLM = DISABLE;        
    CAN_InitStructure.CAN_TXFP = DISABLE;         
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;//CAN_Mode_LoopBack; //
    CAN_InitStructure.CAN_SJW  = CAN_SJW_1tq;     
    CAN_InitStructure.CAN_BS1  = CAN_BS1_4tq;     
    CAN_InitStructure.CAN_BS2  = CAN_BS2_3tq;   

                CAN_InitStructure.CAN_Prescaler=6;
                       
    CAN_Init(CAN,&CAN_InitStructure);         


    CAN_FilterInitStructure.CAN_FilterNumber = 1;                    
    CAN_FilterInitStructure.CAN_FilterMode   = CAN_FilterMode_IdList;  
    CAN_FilterInitStructure.CAN_FilterScale  = CAN_FilterScale_32bit;  

    CAN_FilterInitStructure.CAN_FilterIdHigh= (((u32)Receive_MsgId<<21)&0xFFFF0000)>>16;  
//   CAN_FilterInitStructure.CAN_FilterIdHigh=0X00;                  //????ID??
    CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)Receive_MsgId<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xFFFF; //????ID??

    CAN_FilterInitStructure.CAN_FilterMaskIdHigh     = 0xFFFF;         
    CAN_FilterInitStructure.CAN_FilterMaskIdLow      = 0xFFFF;            
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;   
    CAN_FilterInitStructure.CAN_FilterActivation     = ENABLE;      
    CAN_FilterInit(&CAN_FilterInitStructure);                     

    /* CAN FIFO0 message pending interrupt enable */
    CAN_ITConfig(CAN,CAN_IT_FMP0, ENABLE);         

}



最佳答案

查看完整内容[请看2#楼]

已经解决,找到问题了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-3-27
在线时间
28 小时
 楼主| 发表于 2019-4-24 14:15:36 | 显示全部楼层
fengc234 发表于 2019-5-13 10:55
楼主,您的问题解决了吗,我也在用STM32F042F6P6的CAN通信,但是接收、发送都没反应

已经解决,找到问题了
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-24 16:31:59 | 显示全部楼层
帮顶~~
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-4-24
在线时间
8 小时
发表于 2019-4-24 17:37:04 | 显示全部楼层
把速率调慢点试试。
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-4-24 19:42:13 | 显示全部楼层
没看到CAN的函数函数 看下你的指定ID是不是一样的
回复

使用道具 举报

20

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2019-1-3
在线时间
44 小时
发表于 2019-5-13 10:55:15 | 显示全部楼层
楼主,您的问题解决了吗,我也在用STM32F042F6P6的CAN通信,但是接收、发送都没反应
回复

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2019-9-19
在线时间
39 小时
发表于 2020-1-7 17:04:05 | 显示全部楼层
本帖最后由 蓝LAN 于 2020-1-8 15:31 编辑

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG->CFGR1 |= (uint32_t)SYSCFG_CFGR1_PA11_PA12_RMP;
回复

使用道具 举报

12

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2019-8-6
在线时间
23 小时
发表于 2020-2-9 02:46:45 | 显示全部楼层
大哥,你倒是说下咋解决的啊
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-3-7
在线时间
3 小时
发表于 2020-4-7 18:01:20 | 显示全部楼层
最近用stm32f4也是这个问题,求指教
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6545
金钱
6545
注册时间
2018-6-27
在线时间
551 小时
发表于 2020-8-19 16:39:56 | 显示全部楼层
学习学习,学习学习。
回复

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2020-7-25
在线时间
39 小时
发表于 2020-11-13 15:55:43 | 显示全部楼层
shanghailyp 发表于 2019-4-24 14:15
已经解决,找到问题了

请问是什么问题,我这边也遇到了类似的问题
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-6-4
在线时间
3 小时
发表于 2020-11-19 15:47:59 | 显示全部楼层
请问一下,怎么解决的?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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