Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 5 months ago.
CANNucleo and mbed-rtos
Hello,
Has anyone tried to used the mbed-rtos lib with CANNucleo? The following program is a simple test to listen for CAN messages. It works as expected.
#include "mbed.h"
#include "CAN.h"
//#include "rtos.h"
CAN can(PA_11, PA_12);
CANMessage rxMsg;
volatile bool msgAvailable = false;
RawSerial pc(USBTX, USBRX);
void onMsgReceived()
{
msgAvailable = true;
}
int main()
{
pc.baud(9600);
pc.printf("CANNucleo Test\n\r");
can.frequency(125000);
can.monitor(true);
can.attach(&onMsgReceived, CAN::RxIrq);
while (true)
{
if (msgAvailable)
{
msgAvailable = false;
can.read(rxMsg);
pc.printf("CAN message received:\r\n");
pc.printf(" ID = %#x\r\n", rxMsg.id);
pc.printf(" Type = %d\r\n", rxMsg.type);
pc.printf(" Format = %d\r\n", rxMsg.format);
pc.printf(" Length = %d\r\n", rxMsg.len);
pc.printf(" Data =");
for (int i = 0; i < rxMsg.len; i++)
{
pc.printf(" %x", rxMsg.data[i]);
}
pc.printf("\r\n");
}
}
}
However, when I include the mbed-rtos lib with the project, the project locks (I see no received CAN messages). I am using the latest mbed, CANNucleo, and mbed-rtos libs. Also, I am running the project on a NUCLEO-F446RE.
Regards,
Tom
My bad. It appears the problem is related to the serial driver and rtos. The program works with the mbed-rtos lib if I remove the serial related statements (pc.baud & pc.printf) and just blink an LED when a CAN message is received. This problem does not exist as tested on the EA LPC4088 QSB platform.
posted by Tom Doyle 14 May 2016