查看: 6736|回复: 9

[S32] CAN通信不成功,帮忙看看,或求发一个S32K144的CAN通信例程

[复制链接]

该用户从未签到

8

主题

20

帖子

0

注册会员

Rank: 2

积分
109
最后登录
2020-10-19
发表于 2019-5-29 10:54:29 | 显示全部楼层 |阅读模式
本人新手,刚接触S32K144这个芯片不久,CAN通信搞了二天,一直没调通。不知道是不是那儿有问题。
我按以下步骤写的代码:
1.CAN引脚及模块配置初始化;2,编写发送代码;3.在1S的定时中断里调用发送代码。
在电脑上用周立功USB转CAN模块监视,一直收不到数据。有没有好心人帮忙看看。具体代码如下:
1.初始化
PCC->PCCn[PCC_PORTE_INDEX] |= PCC_PCCn_CGC_MASK; //使能PTE端口时钟
PCC->PCCn[PCC_FlexCAN0_INDEX] |= PCC_PCCn_CGC_MASK;
PORTE->PCR[4] |= PORT_PCR_MUX(5);
PORTE->PCR[5] |= PORT_PCR_MUX(5);

//软件复位
can_ptr->MCR |= CAN_MCR_SOFTRST_MASK;
can_ptr->MCR &= ~CAN_MCR_SOFTRST_MASK;

can_ptr->MCR |= CAN_MCR_MDIS_MASK;
//设置时钟源 选择SOS时钟源 8MHz
can_ptr->CTRL1 &= ~CAN_CTRL1_CLKSRC_MASK;
//使能模块
can_ptr->MCR &= ~CAN_MCR_MDIS_MASK;
//等待进入冻结模式
while (!((can_ptr->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT)){}
while( (can_ptr->MCR & CAN_MCR_LPMACK_MASK) != 0){}   /* Wait until FlexCAN module is out of low power mode */
CAN0->MCR &= ~CAN_MCR_IRMQ_MASK;                     /* 1: Individual Rx Masking and Queue Ennable */
CAN0->MCR |= CAN_MCR_AEN_MASK|CAN_MCR_SRXDIS_MASK;       /*  AEN=1: Abort enabled ,Disable self reception */
//配置控制寄存器1 RJW=0B11; PSG1=0B011; PSG2=0X011; PROPSEG=0B110;
can_ptr->CTRL1 = 0x00DB0006;

//清空数据
if(FlexCAN_No == CAN_0)
{
        for(i = 0 ; i < 128; i++)
        {
                can_ptr->RAMn = 0x0;
        }
}
else
{
        for(i = 0 ; i < 64; i++)
        {
                can_ptr->RAMn = 0x0;
        }
}
//配置接收掩码寄存器
for(i = 0; i < CAN_RXIMR_COUNT; i++)
{
        can_ptr->RXIMR =  0xFFFFFFFF;
}
//接收信箱全局掩码寄存器
can_ptr->RXMGMASK = 0x1FFFFFFF;
//配置接收信箱大小
can_ptr->MCR = CAN_MCR_MAXMB(7);

//等待冻结模式结束
while ((can_ptr->MCR && CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT);
//等待准备完成
  while ((can_ptr->MCR && CAN_MCR_NOTRDY_MASK) >> CAN_MCR_NOTRDY_SHIFT);

2,编写发送代码
void FlexCan_send_8Byte(uint8 FlexCAN_No,uint8 data[],uint8 num,uint32 adress,uint8 adressMode)
{
        //局部变量声明
        uint8 j,i;
        uint8 tem[8]={0};
        CAN_MemMapPtr can_ptr = CAN_PTR[FlexCAN_No];
        i = 0;
        for(j = 0; j < num; j++)
        {
                tem[j] = data[j];
        }
    //清标志寄存器
        can_ptr->IFLAG1 |= 0xffffffff;
        //等待CAN总线空闲
        while(BGET(CAN_ESR1_IDLE_SHIFT,can_ptr->ESR1) == 0);
    //存放数据到数据区
        for (j = 0; j < num;j += 4,i++)
        {
                can_ptr->RAMn[0*MSG_BUF_SIZE + 2 +i] = (tem[j] << 24 | tem[j + 1] << 16 | \
                                                                     tem[j + 2] << 8 | tem[j + 3]);
        }
        if (adressMode == 1)//使用拓展地址模式,地址为29位模式
        {
                //配置发送的ID
            can_ptr->RAMn[0*MSG_BUF_SIZE + 1] = adress;
            //配置帧的CODE = 1100 SRR =1 IDE =1 DLC= 15
            can_ptr->RAMn[0*MSG_BUF_SIZE + 0] = 0x0C600000 | 8 <<CAN_WMBn_CS_DLC_SHIFT;
        }
        else               //使用非拓展地址模式,地址长度为11位
        {
                //配置发送的ID
            can_ptr->RAMn[0*MSG_BUF_SIZE + 1] = adress << 18;
            //配置帧的CODE = 1100; SRR =1 DLC = 15
            can_ptr->RAMn[0*MSG_BUF_SIZE + 0] = 0x0C400000 | 8 <<CAN_WMBn_CS_DLC_SHIFT;
        }
}

3.定时中断里调用发送数据函数
void SysTick_Handler(void)
{
    static uint8 SysTickcount = 0;
    SysTickcount++;
    if(SysTickcount >= 100)   //1s到
    {
        SysTickcount = 0;
        LEDflag ^=1;
        FlexCan_send_8Byte(CAN_0,CANTestBuf,8,0x555,EXTEND_ID);
    }
}

4.在main 里调用初始化
   FlexCan_init(CAN_0,FLEXCAN_CLASSIC);//初始化CAN0
    ENABLE_INTERRUPTS;//开总中断
    FlexCan_re_enable_int(0);


最佳答案

woily1981 发表于 2019-6-3 14:59 我用的是NXP的EVB板,用的MiniUSB口供的电,应该不用再给其他电源了吧。 单独供电的收发器芯片 12V 你可以看看芯片的数据手册 ...
回复

使用道具 举报

该用户从未签到

8

主题

20

帖子

0

注册会员

Rank: 2

积分
109
最后登录
2020-10-19
 楼主| 发表于 2019-5-29 10:59:07 | 显示全部楼层
1秒定时中断确认是进入了的,加的闪灯程序,灯在闪烁。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

12

帖子

1

注册会员

Rank: 2

积分
119
最后登录
2022-3-22
发表于 2019-5-29 19:52:56 | 显示全部楼层
进SDK里面看吧,里面有例程
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

20

帖子

0

注册会员

Rank: 2

积分
109
最后登录
2020-10-19
 楼主| 发表于 2019-5-30 11:07:05 | 显示全部楼层
gaswan 发表于 2019-5-29 19:52
进SDK里面看吧,里面有例程

sdk里面的例程也不行,不知道是不是我代码的步骤是不是有问题。在PC端反正是收不到板卡的数据,我用的是NXP的EVB板
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

82

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1239
最后登录
2022-1-7
发表于 2019-5-31 14:06:21 | 显示全部楼层
你好 你现在解决了么
你看看你有没有供电给收发器芯片
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

20

帖子

0

注册会员

Rank: 2

积分
109
最后登录
2020-10-19
 楼主| 发表于 2019-6-3 14:59:39 | 显示全部楼层
byxzwz 发表于 2019-5-31 14:06
你好 你现在解决了么
你看看你有没有供电给收发器芯片

我用的是NXP的EVB板,用的MiniUSB口供的电,应该不用再给其他电源了吧。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2019-6-3 17:52
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    11
    最后登录
    2019-6-5
    发表于 2019-6-3 17:55:29 | 显示全部楼层
    woily1981 发表于 2019-6-3 14:59
    我用的是NXP的EVB板,用的MiniUSB口供的电,应该不用再给其他电源了吧。

    收发器单独供电的  有个DC线的电源接口
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24

    主题

    82

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1239
    最后登录
    2022-1-7
    发表于 2019-6-5 11:14:18 | 显示全部楼层
    woily1981 发表于 2019-6-3 14:59
    我用的是NXP的EVB板,用的MiniUSB口供的电,应该不用再给其他电源了吧。

    单独供电的收发器芯片 12V 你可以看看芯片的数据手册
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    109
    最后登录
    2020-10-19
     楼主| 发表于 2019-6-17 16:18:36 | 显示全部楼层
    byxzwz 发表于 2019-6-5 11:14
    单独供电的收发器芯片 12V 你可以看看芯片的数据手册

    是的,外接了12V就可以了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-9-19 15:56
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    74
    最后登录
    2019-11-6
    发表于 2019-9-10 20:04:17 | 显示全部楼层
    byxzwz 发表于 2019-6-5 11:14
    单独供电的收发器芯片 12V 你可以看看芯片的数据手册

    哥们,你用NXP 的EVB官方板,Can能用了吗,我用Demo程序测试都很异常。
    12v已经上电。
    实测效果很奇怪。
    按下任意按键1次后,
    Can0的TX脚出现波形,但是是一直有,can在一直发送,不停。
    再按下任意按键1次,
    波形消失。

    之后不管怎么按,都再没有波形。但是中断其实都是进了的,我加了LED的变化能看到。

    请问楼主现象也是这样吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-10 09:25 , Processed in 0.100817 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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