1970880_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1970880_ja-JP

1970880_ja-JP

FRDM-KV11ZでのCAN通信途切れ問題

公式から提供されたSDKを使用してFRDM-KV11Z開発ボードをテストしたところ、CAN通信が割り込みに入ることができないことがわかりました。SDKルーチンはFreeMASTERソフトウェアで使用されます。このデバイスは手元にないので、自分で移植しました。以下は私のコードです:

static void init_CAN(void)
{
status_t status;
flexcan_config_t flexcanConfig;
flexcan_timing_config_t timing_config;
uint32_t canSrcClock = CLOCK_GetFreq(kCLOCK_CoreSysClk);

/* Init FlexCAN module. */
/*
* flexcanConfig.clksrc=kFLEXCAN_ClkSrcOsc;
* flexcanConfig.baudRate = 1000000U;
* flexcanConfig.baudRateFD = 2000000U;
* flexcanConfig.maxMbNum = 16;
* flexcanConfig.enableLoopBack = false;
* flexcanConfig.enableSelfWakeup = false;
* flexcanConfig.enableIndividMask = false;
* flexcanConfig.enableDoze = false;
*/
FLEXCAN_GetDefaultConfig(&flexcanConfig);

flexcanConfig.clksrc=kFLEXCAN_ClkSrcPeri;
flexcanConfig.baudRate = 100000U;

/* 改善されたタイミング設定を更新 */
if (FLEXCAN_CalculateImprovedTimingValues(CAN0, flexcanConfig.baudRate, canSrcClock, &timing_config))
flexcanConfig.timingConfig = timing_config;

FLEXCAN_Init(CAN0, &flexcanConfig, canSrcClock);
/* CAN割り込みを有効にします。*/
EnableIRQ(CAN0_IRQn);

}

ボイドCAN0_IRQHandler(ボイド)
{
uint32_t isrFlags = FLEXCAN_GetStatusFlags(CAN0);
uint32_t isrFlagsMB = FLEXCAN_GetMbStatusFlags(CAN0, 0xFFFFFFFFUL);

カウント++;

if (isrFlags != 0U)
{
FLEXCAN_ClearStatusFlags(CAN0, isrFlags);
}

if (isrFlagsMB != 0U)
{
/* 読み取りまたは書き込み */
if ((isrFlagsMB & (1UL << (FMSTR_FLEXCAN_RXMB))) != 0U)
{

/* データを受信していますか?*/
if (FLEXCAN_GetMbStatusFlags(CAN0, 1UL << (FMSTR_FLEXCAN_RXMB)) == 0U)
{
帰る;
}
/* データの読み取りを試み、成功すると、MB が確認され、次回の受信に設定されます */
status_t s = FLEXCAN_ReadRxMb(CAN0, FMSTR_FLEXCAN_RXMB, &CAN_Rxmsg);
}
if ((isrFlagsMB & (1UL << (FMSTR_FLEXCAN_TXMB))) != 0U)
{
/* フレーム送信の確認 */
CAN_Txmsg.length = 0U;

}

/* すべての割り込みフラグをクリアする */
FLEXCAN_ClearMbStatusFlags(CAN0, isrFlagsMB);

}
}

int main(void)
{
status_t status_can;

/* Init board hardware. */
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
init_CAN();
PRINTF("SPI DAM Init OK.\r\n");
CAN_Txmsg.format = 1; //扩展帧ID
CAN_Txmsg.timestamp = 1000; //超时时间
CAN_Txmsg.type = 0; //数据帧
CAN_Txmsg.length = 8; //数据长度
CAN_Txmsg.id = 0x123; //帧ID
/* 8位数据 */
CAN_Txmsg.dataByte0 = 0x0;
CAN_Txmsg.dataByte1 = 0x1;
CAN_Txmsg.dataByte2 = 0x2;
CAN_Txmsg.dataByte3 = 0x3;
CAN_Txmsg.dataByte4 = 0x4;
CAN_Txmsg.dataByte5 = 0x5;
CAN_Txmsg.dataByte6 = 0x6;
CAN_Txmsg.dataByte7 = 0x7;


/* 发送数据 */
FLEXCAN_WriteTxMb(CAN0, 0, &CAN_Txmsg);

(1)ながら
{
status_can = FLEXCAN_WriteTxMb(CAN0, 0, &CAN_Txmsg);
if(status_can != kStatus_Fail)
PRINTF("CAN 書き込み成功 %d\r\n", カウント);
然も無くば
PRINTF("CAN 書き込み失敗 %d\r\n", カウント);
SDK_DelayAtLeastUs(1000000, BOARD_BOOTCLOCKRUN_CORE_CLOCK);//延时1秒

}
}

これで、データを正常に送信できます。ただし、入力する割り込みはなく、データを受信するための割り込みもありません。

Re: CAN communication interruption problem with FRDM-KV11Z

こんにちは、XuZhang

ご支援ありがとうございます。

私はこの問題を解決しました

Re:FRDM-KV11ZのCAN通信障害問題

hi,HL_G

NXPセミコンダクター製品へのご興味と、ご奉仕の機会をお寄せいただき、誠にありがとうございます。

開発ボードがFreemaster-over-canを介してFreeMASTERに接続できるかどうかを確認してください。以下の方法で接続テストを実施してください。

XuZhang_0-1728715517072.pngXuZhang_0-1728715517072.png

その後、SDK の frdmkv11z_fmstr_example_can デモで次のプログラムを変更することで、CAN 割り込みを有効にできます。

XuZhang_1-1728715528707.pngXuZhang_1-1728715528707.png

その上、あなたはFreeMasterツールを持っていないと言っていますか?以下はダウンロードリンクです。

FreeMASTERツール3.2(Lite 1.3を含む) – Windowsインストーラー(nxp.com.cn)

それがあなたの助けになることを願っています。

それでもご不明な点がございましたら、お気軽にお知らせください。


BR

Xu Zhang

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-04-2026 11:04 PM
更新者: