This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
This is my test code:
/** @file HL_sys_main.c * @brief Application main file * @date 11-Dec-2018 * @version 04.07.01 * * This file contains an empty main function, * which can be used for the application. */ /* * Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* USER CODE BEGIN (0) */ #include "HL_can.h" /* USER CODE END */ /* Include Files */ #include "HL_sys_common.h" /* USER CODE BEGIN (1) */ #define D_COUNT 512 uint32 cnt=0, error =0, tx_done =0; //cnt-计数 error--错误计数 tx_done--发送标志位 uint8 tx_data[8] = {0,1,2,3,4,5,6,7}; //发送缓冲区 uint8 rx_data[8] = {0}; //接收缓冲区 /*缓冲区重定向*/ uint8 *tx_ptr = NULL; uint8 *rx_ptr = NULL; uint8 *dptr=0; //组包时使用 uint16 round_cnt = 0; //初始化值 //void dumpSomeData(uint32 tmp); //组包函数 测试用 /* USER CODE END */ /** @fn void main(void) * @brief Application main function * @note This function is empty by default. * * This function is called after startup. * The user can use this function to implement the application. */ /* USER CODE BEGIN (2) */ void smallDelay(uint32 num) { volatile unsigned int delayval; delayval = num; while(delayval--);// 800000大约168ms 1ms 大约 4762 } /* USER CODE END */ int main(void) { /* USER CODE BEGIN (3) */ uint8 *tx_ptr = &(tx_data[0]); uint8 *rx_ptr = &(rx_data[0]); canInit(); // dumpSomeData(cnt); smallDelay(4762); canTransmit(canREG1, canMESSAGE_BOX2, tx_ptr); //发送到外部调试助手 while(1) { while(!canIsRxMessageArrived(canREG1, canMESSAGE_BOX2)); canGetData(canREG1, canMESSAGE_BOX2, rx_ptr); smallDelay(4762); //将接收到的数据发送出去 canTransmit(canREG1, canMESSAGE_BOX2, rx_ptr);//发送到外部调试助手 } /* USER CODE END */ return 0; } /* USER CODE BEGIN (4) */ /* USER CODE END */
Hello ,
HALCoGen contains several step-by-step example projects including CAN example.
They can be located in HALCoGen by going to Help -> Examples, or Help -> Help Topics -> Contents -> Examples.
There is FAQ for development resource , including CAN example code also.
If you have further concern , please review the user guide linked below.
Hello Alice.
Thank you for your reply.I want to know what configuration I need if I want to communicate with USB_CAN Tool in order to communicate successfully.
I have tried the baud rate 500K.As in my code above, the USB_CAN tool cannot receive the message sent, and the development board cannot receive the message sent by the USB_CAN tool.The CAN bus mode I configured is normal.There is a CAN transceiver on the development board, the model is SN65HVDA541.
This is my configuration code:
void canInit(void) { /* USER CODE BEGIN (4) */ /* USER CODE END */ /** @b Initialize @b CAN2: */ /** - Setup control register * - Disable automatic wakeup on bus activity * - Local power down mode disabled * - Disable DMA request lines * - Enable global Interrupt Line 0 and 1 * - Disable debug mode * - Release from software reset * - Enable/Disable parity or ECC * - Enable/Disable auto bus on timer * - Setup message completion before entering debug state * - Setup normal operation mode * - Request write access to the configuration registers * - Setup automatic retransmission of messages * - Disable error interrupts * - Disable status interrupts * - Enter initialization mode */ canREG2->CTL = (uint32)0x00000200U | (uint32)0x00000000U | (uint32)((uint32)0x00000005U << 10U) | 0x00020043U; /** - Clear all pending error flags and reset current status */ canREG2->ES |= 0xFFFFFFFFU; /** - Assign interrupt level for messages */ canREG2->INTMUXx[0U] = (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U; canREG2->INTMUXx[1U] = (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U; /** - Setup auto bus on timer period */ canREG2->ABOTR = (uint32)15U; /** - Initialize message 1 * - Wait until IF1 is ready for use * - Set message mask * - Set message control word * - Set message arbitration * - Set IF1 control byte * - Set IF1 message number */ /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */ while ((canREG2->IF1STAT & 0x80U) ==0x80U) { } /* Wait */ canREG2->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x00000000U & (uint32)0x000007FFU) << (uint32)18U); canREG2->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)1U & (uint32)0x000007FFU) << (uint32)18U); canREG2->IF1MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)8U; canREG2->IF1CMD = (uint8) 0xF8U; canREG2->IF1NO = 1U; /** - Initialize message 2 * - Wait until IF2 is ready for use * - Set message mask * - Set message control word * - Set message arbitration * - Set IF2 control byte * - Set IF2 message number */ /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */ while ((canREG2->IF2STAT & 0x80U) ==0x80U) { } /* Wait */ canREG2->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x00000000U & (uint32)0x000007FFU) << (uint32)18U); canREG2->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)2U & (uint32)0x000007FFU) << (uint32)18U); canREG2->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)8U; canREG2->IF2CMD = (uint8) 0xF8U; canREG2->IF2NO = 2U; /** - Setup IF1 for data transmission * - Wait until IF1 is ready for use * - Set IF1 control byte */ /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */ while ((canREG2->IF1STAT & 0x80U) ==0x80U) { } /* Wait */ canREG2->IF1CMD = 0x87U; /** - Setup IF2 for reading data * - Wait until IF1 is ready for use * - Set IF1 control byte */ /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */ while ((canREG2->IF2STAT & 0x80U) ==0x80U) { } /* Wait */ canREG2->IF2CMD = 0x17U; /** - Setup bit timing * - Setup baud rate prescaler extension * - Setup TSeg2 * - Setup TSeg1 * - Setup sample jump width * - Setup baud rate prescaler */ canREG2->BTR = (uint32)((uint32)0U << 16U) | (uint32)((uint32)(4U - 1U) << 12U) | (uint32)((uint32)((6U + 4U) - 1U) << 8U) | (uint32)((uint32)(4U - 1U) << 6U) | (uint32)9U; /** - CAN2 Port output values */ canREG2->TIOC = (uint32)((uint32)1U << 18U ) | (uint32)((uint32)0U << 17U ) | (uint32)((uint32)0U << 16U ) | (uint32)((uint32)1U << 3U ) | (uint32)((uint32)0U << 2U ) | (uint32)((uint32)0U << 1U ); canREG2->RIOC = (uint32)((uint32)1U << 18U ) | (uint32)((uint32)0U << 17U ) | (uint32)((uint32)0U << 16U ) | (uint32)((uint32)1U << 3U ) | (uint32)((uint32)0U << 2U ) | (uint32)((uint32)0U <<1U ); /** - Leave configuration and initialization mode */ canREG2->CTL &= ~(uint32)(0x00000041U); /** @note This function has to be called before the driver can be used.\n * This function has to be executed in privileged mode.\n */ /* USER CODE BEGIN (5) */ /* USER CODE END */ }
and Circuit diagram:
I have no problem using cases to communicate between CAN1 and CAN2.However, communication with the USB_CAN Tool failed.
Is it the problem of my configuration of CAN module? How do I configure to properly communicate with USB_CAN Tool?
Looking forward to your reply.Thanks !
Alice
Hello,
Unfortunately, We do not familiar with "USB_CAN Tool" you noted.
Please use the CAN demo in last reply to test your hardware.