完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
卡在Serial.println ("pos65") ;的下一行不动.
/******************************************************************************/ /* File name : LoopBackDemo.ino */ /* Project : ESP32-CAN-DRIVER */ /* Description : ESP32 CAN Self Test with Interrupt Handler */ /* ---------------------------------------------------------------------------*/ /* Copyright : Copyright © 2019 Pierre Molinaro. All rights reserved. */ /* ---------------------------------------------------------------------------*/ /* Author : Mohamed Irfanulla */ /* Supervisor : Prof. Pierre Molinaro */ /* Institution : Ecole Centrale de Nantes */ /* ---------------------------------------------------------------------------*/ //------------------------------- Board Check ---------------------------------- #ifndef ARDUINO_ARCH_ESP32 #error "Select an ESP32 board" #endif //------------------------------- Include files -------------------------------- #include #include // For ARDUINO_ESP32_RELEASE //—————————————————————————————————————————————————————————————————————————————— // ESP32 Desired Bit Rate //—————————————————————————————————————————————————————————————————————————————— static const uint32_t DESIRED_BIT_RATE = 100UL * 1000UL ; // 1 Mb/s //—————————————————————————————————————————————————————————————————————————————— // SETUP //—————————————————————————————————————————————————————————————————————————————— void setup() { //--- Switch on builtin led pinMode (LED_BUILTIN, OUTPUT) ; digitalWrite (LED_BUILTIN, HIGH) ; //--- Start serial Serial.begin (115200) ; delay (100) ; //--- Display ESP32 Chip Info esp_chip_info_t chip_info ; esp_chip_info (&chip_info) ; Serial.print ("ESP32 Arduino Release: ") ; Serial.println (ARDUINO_ESP32_RELEASE) ; Serial.print ("ESP32 Chip Revision: ") ; Serial.println (chip_info.revision) ; Serial.print ("ESP32 SDK: ") ; Serial.println (ESP.getSdkVersion ()) ; Serial.print ("ESP32 Flash: ") ; Serial.print (spi_flash_get_chip_size () / (1024 * 1024)) ; Serial.print (" MB ") ; Serial.println (((chip_info.features & CHIP_FEATURE_EMB_FLASH) != 0) ? "(embeded)" : "(external)") ; Serial.print ("APB CLOCK: ") ; Serial.print (APB_CLK_FREQ) ; Serial.println (" Hz") ; //--- Configure ESP32 CAN Serial.println ("Configure ESP32 CAN654546") ; ACAN_ESP32_Settings settings (DESIRED_BIT_RATE) ; Serial.println ("pos60") ; settings.mRequestedCANMode = ACAN_ESP32_Settings::LoopBackMode ; Serial.println ("pos61") ; settings.mRxPin = GPIO_NUM_4 ; // Optional, default Tx pin is GPIO_NUM_4 settings.mTxPin = GPIO_NUM_5 ; // Optional, default Rx pin is GPIO_NUM_5 Serial.println ("pos65") ; const uint32_t errorCode = ACAN_ESP32::can.begin (settings) ; Serial.println ("pos67") ; if (errorCode == 0) { Serial.print ("Bit Rate prescaler: ") ; Serial.println (settings.mBitRatePrescaler) ; Serial.print ("Time Segment 1: ") ; Serial.println (settings.mTimeSegment1) ; Serial.print ("Time Segment 2: ") ; Serial.println (settings.mTimeSegment2) ; Serial.print ("RJW: ") ; Serial.println (settings.mRJW) ; Serial.print ("Triple Sampling: ") ; Serial.println (settings.mTripleSampling ? "yes" : "no") ; Serial.print ("Actual bit rate: ") ; Serial.print (settings.actualBitRate ()) ; Serial.println (" bit/s") ; Serial.print ("Exact bit rate ? ") ; Serial.println (settings.exactBitRate () ? "yes" : "no") ; Serial.print ("Distance ") ; Serial.print (settings.ppmFromDesiredBitRate ()) ; Serial.println (" ppm") ; Serial.print ("Sample point: ") ; Serial.print (settings.samplePointFromBitStart ()) ; Serial.println ("%") ; Serial.println ("Configuration OK!"); }else { Serial.print ("Configuration error 0x") ; Serial.println (errorCode, HEX) ; } } //—————————————————————————————————————————————————————————————————————————————— static uint32_t gBlinkLedDate = 0 ; static uint32_t gReceivedFrameCount = 0 ; static uint32_t gSentFrameCount = 0 ; //—————————————————————————————————————————————————————————————————————————————— // LOOP //—————————————————————————————————————————————————————————————————————————————— void loop () { CANMessage frame ; if (gBlinkLedDate < millis ()) { gBlinkLedDate += 500 ; digitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN)) ; Serial.print ("Sent: ") ; Serial.print (gSentFrameCount) ; Serial.print (" ") ; Serial.print ("Receive: ") ; Serial.print (gReceivedFrameCount) ; Serial.print (" ") ; Serial.print (" STATUS 0x") ; Serial.print (TWAI_STATUS_REG, HEX) ; Serial.print (" RXERR ") ; Serial.print (TWAI_RX_ERR_CNT_REG) ; Serial.print (" TXERR ") ; Serial.println (TWAI_TX_ERR_CNT_REG) ; const bool ok = ACAN_ESP32::can.tryToSend (frame) ; if (ok) { gSentFrameCount += 1 ; } } while (ACAN_ESP32::can.receive (frame)) { gReceivedFrameCount += 1 ; } } |
|
相关推荐
1个回答
|
|
从你提供的代码片段来看,问题可能出现在以下几个方面:
1. **CAN 总线初始化失败**:如果 CAN 总线没有正确初始化,程序可能会在 `CAN.begin()` 处卡住。请检查你的硬件连接是否正确,以及是否使用了正确的 CAN 总线速率。 2. **CAN 总线错误**:在 `CAN.begin()` 之后,你应该检查 `CAN.begin()` 的返回值,以确保 CAN 总线没有错误。如果返回值为 `CAN_OK`,则表示初始化成功;否则,可能存在错误。 3. **串口通信问题**:如果程序在 `Serial.println("pos65")` 处卡住,可能是串口通信出现了问题。请检查你的串口连接是否正确,以及串口波特率是否与你的设备兼容。 4. **代码逻辑问题**:如果上述问题都排除了,那么可能是代码逻辑上的问题。请检查你的代码,确保在 `Serial.println("pos65")` 之后的代码没有逻辑错误或者死循环。 5. **硬件故障**:如果以上所有问题都排除了,那么可能是硬件故障。请检查你的 CAN 总线设备和 Arduino 板是否工作正常。 为了解决这个问题,你可以尝试以下步骤: 1. 确保硬件连接正确,包括 CAN 总线设备和 Arduino 板。 2. 检查串口波特率设置,确保与你的设备兼容。 3. 在 `CAN.begin()` 之后添加一个错误检查,例如: ```cpp if (CAN.begin(CAN_1000KBPS) != CAN_OK) { Serial.println("Failed to initialize CAN bus"); while(1); // 死循环,等待用户干预 } ``` 4. 仔细检查代码逻辑,确保没有死循环或其他逻辑错误。 |
|
|
|
只有小组成员才能发言,加入小组>>
541浏览 6评论
454浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
434浏览 5评论
436浏览 4评论
409浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 04:26 , Processed in 0.792374 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号