OpenEdv-开源电子网

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

RT 1052 的CAN用不了

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
发表于 2018-8-8 16:43:44 | 显示全部楼层 |阅读模式
1金钱
根据官方例程改的在回环模式可以进中断,但是正常模式进不了中断。


#include "fsl_iomuxc.h"
#include "fsl_gpio.h"  
#include "bsp_flexcan.h"
#include "fsl_debug_console.h"
#include "clock_config.h"
#include "pin_mux.h"

/* Select 80M clock divided by USB1 PLL (480 MHz) as master flexcan clock source */
#define FLEXCAN_CLOCK_SOURCE_SELECT (2U)
/* Clock divider for master flexcan clock source */
#define FLEXCAN_CLOCK_SOURCE_DIVIDER (3U)
#define CAN_CLK_FREQ ((CLOCK_GetFreq(kCLOCK_Usb1PllClk) / 6) / (FLEXCAN_CLOCK_SOURCE_DIVIDER + 1U))
#define RX_MESSAGE_BUFFER_NUM (9)
#define TX_MESSAGE_BUFFER_NUM (8)

flexcan_handle_t flexcanHandle;
flexcan_frame_t frame,rxframe;
uint32_t txIdentifier;
uint32_t rxIdentifier;
volatile bool txComplete = false;
volatile bool rxComplete = false;
flexcan_mb_transfer_t txXfer, rxXfer;

status_t tets=kStatus_Fail;

void flexcanInit(void)
{
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-8-8 16:43:45 | 显示全部楼层
天子帝师 发表于 2018-8-8 23:46
里面没有CAN的例程

实验34 FlexCAN实验.zip (1.78 MB, 下载次数: 96)
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-8 16:44:49 | 显示全部楼层
void flexcanInit(void)
{
        flexcan_config_t flexcanConfig;
  flexcan_rx_mb_config_t mbConfig;

       
        CLOCK_SetMux(kCLOCK_CanMux, FLEXCAN_CLOCK_SOURCE_SELECT);
  CLOCK_SetDiv(kCLOCK_CanDiv, FLEXCAN_CLOCK_SOURCE_DIVIDER);
          /* Get FlexCAN module default Configuration. */
    /*
     * flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;
     * flexcanConfig.baudRate = 1000000U;
     * flexcanConfig.maxMbNum = 16;
     * flexcanConfig.enableLoopBack = false;
     * flexcanConfig.enableSelfWakeup = false;
     * flexcanConfig.enableIndividMask = false;
     * flexcanConfig.enableDoze = false;
     */
        FLEXCAN_GetDefaultConfig(&flexcanConfig);
        #if (!defined(FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE)) || !FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE
  flexcanConfig.clkSrc = kFLEXCAN_ClkSrcPeri;
        #endif /* FSL_FEATURE_FLEXCAN_SUPPORT_ENGINE_CLK_SEL_REMOVE */
        flexcanConfig.baudRate=500000U;
        flexcanConfig.enableLoopBack = true;
        FLEXCAN_Init(CAN1, &flexcanConfig, CAN_CLK_FREQ);
       
        FLEXCAN_TransferCreateHandle(CAN1, &flexcanHandle, flexcan_callback, NULL);
       
        FLEXCAN_SetRxMbGlobalMask(CAN1, FLEXCAN_RX_MB_EXT_MASK(rxIdentifier, 0, 0));
        mbConfig.format = kFLEXCAN_FrameFormatExtend;
  mbConfig.type = kFLEXCAN_FrameTypeData;
  mbConfig.id = FLEXCAN_ID_EXT(0x0ff46f00);
       
        FLEXCAN_SetRxMbConfig(CAN1, RX_MESSAGE_BUFFER_NUM, &mbConfig, true);
        PRINTF("Press any key to trigger one-shot transmission\r\n\r\n");
        FLEXCAN_SetTxMbConfig(CAN1, TX_MESSAGE_BUFFER_NUM, true);
       
       
                frame.id = FLEXCAN_ID_EXT(0x0ff46f00);
                frame.format = kFLEXCAN_FrameFormatExtend;
                frame.type = kFLEXCAN_FrameTypeData;
                frame.length = 4;
                frame.dataWord0 = CAN_WORD0_DATA_BYTE_0(0x11) | CAN_WORD0_DATA_BYTE_1(0x22) | CAN_WORD0_DATA_BYTE_2(0x33) |
                        CAN_WORD0_DATA_BYTE_3(0x44);
                //frame.dataByte0=0x64;
                //frame.dataByte1=0x00;
                //frame.dataByte1=0x55;
                txXfer.frame = &frame;
                txXfer.mbIdx = TX_MESSAGE_BUFFER_NUM;
                FLEXCAN_TransferSendNonBlocking(CAN1, &flexcanHandle, &txXfer);
                if(tets==kStatus_Success)
                        PRINTF("HHH\r\n");
               
                //PRINTF("TEST1\r\n\r\n");
                 while (!txComplete)
                 {
                 };
                txComplete = false;
                 PRINTF("Start to Wait data from Node A\r\n\r\n");
                 rxXfer.mbIdx = RX_MESSAGE_BUFFER_NUM;
                 rxXfer.frame = &rxframe;
                 FLEXCAN_TransferReceiveNonBlocking(CAN1, &flexcanHandle, &rxXfer);
                 while (!rxComplete)
                 {
                 };
                 rxComplete = false;
                 PRINTF("Rx MB ID: 0x%x, Rx MB data: 0x%x\r\n", rxframe.id >> CAN_ID_STD_SHIFT, rxframe.dataWord0);
                 frame.id = FLEXCAN_ID_EXT(0x0ff46f00);
                 txXfer.mbIdx = TX_MESSAGE_BUFFER_NUM;
                 while (1)
    {
        __WFI();
    }
         
  
}

static void flexcan_callback(CAN_Type *base, flexcan_handle_t *handle, status_t status, uint32_t result, void *userData)
{
        PRINTF("TEST\r\n\r\n");
    switch (status)
    {
        case kStatus_FLEXCAN_RxIdle:
            if (RX_MESSAGE_BUFFER_NUM == result)
            {
                rxComplete = true;
            }
            break;

        case kStatus_FLEXCAN_TxIdle:
            if (TX_MESSAGE_BUFFER_NUM == result)
            {
                txComplete = true;
            }
            break;

        default:
            break;
    }
}
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14287
金钱
14287
注册时间
2018-8-3
在线时间
1147 小时
发表于 2018-8-8 16:55:45 | 显示全部楼层
帮顶。。。。。。
啊哈~加油!!
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-8-8 16:57:12 | 显示全部楼层
下载我们的RT1052的例程,里面就有CAN的,RT1052的CAN必须接上另一端,也就是收发要接好,否则的话就不会进入发送中断的
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-8 17:00:24 | 显示全部楼层
zuozhongkai 发表于 2018-8-8 16:57
下载我们的RT1052的例程,里面就有CAN的,RT1052的CAN必须接上另一端,也就是收发要接好,否则的话就不会进 ...

请问在哪里下载
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-8 17:02:17 | 显示全部楼层
zuozhongkai 发表于 2018-8-8 16:57
下载我们的RT1052的例程,里面就有CAN的,RT1052的CAN必须接上另一端,也就是收发要接好,否则的话就不会进 ...

也就说如果接线有问题也是不能成功发送的
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-8 17:48:41 | 显示全部楼层
zuozhongkai 发表于 2018-8-8 16:57
下载我们的RT1052的例程,里面就有CAN的,RT1052的CAN必须接上另一端,也就是收发要接好,否则的话就不会进 ...

接好了也还是不行啊,
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-8-8 17:52:44 | 显示全部楼层
天子帝师 发表于 2018-8-8 17:48
接好了也还是不行啊,

那就检查你自己的代码
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-8 17:57:22 | 显示全部楼层
zuozhongkai 发表于 2018-8-8 17:52
那就检查你自己的代码

请问例程在哪里下载 ,代码就是我发在上面的,我检查了很多次了。我是根据官方的FLEXCAN/interrupt_transfer这个改的
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-8-8 18:27:58 | 显示全部楼层
天子帝师 发表于 2018-8-8 17:57
请问例程在哪里下载 ,代码就是我发在上面的,我检查了很多次了。我是根据官方的FLEXCAN/interrupt_trans ...

http://www.openedv.com/thread-13912-1-1.html,找RT1052开发板的资料
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-8 23:46:46 | 显示全部楼层
zuozhongkai 发表于 2018-8-8 18:27
http://www.openedv.com/thread-13912-1-1.html,找RT1052开发板的资料

里面没有CAN的例程
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-8-8
在线时间
12 小时
 楼主| 发表于 2018-8-9 14:52:06 | 显示全部楼层

还是一样的
LCD ID:7084
Command RT1052
Sending:
21 22 23 24 25 26 27 28
OK
21 22 23 24 25 26 27 28
Nnormal Mode Sending:
37 38 39 40 41 42 43 44
结果就是这样 我接好了的 另外一块板子上没有任何数据

我把显示屏显示改成了串口
回复

使用道具 举报

0

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2018-9-27
在线时间
15 小时
发表于 2018-10-5 11:02:01 | 显示全部楼层
感觉太难了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 13:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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