diff --git a/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/stm32f091xc.h b/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/stm32f091xc.h index d507e9948c..7c4e8c3b97 100644 --- a/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/stm32f091xc.h +++ b/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/stm32f091xc.h @@ -708,7 +708,7 @@ typedef struct #define USART5 ((USART_TypeDef *) USART5_BASE) #define I2C1 ((I2C_TypeDef *) I2C1_BASE) #define I2C2 ((I2C_TypeDef *) I2C2_BASE) -#define CAN ((CAN_TypeDef *) CAN_BASE) +#define CAN1 ((CAN_TypeDef *) CAN_BASE) #define CRS ((CRS_TypeDef *) CRS_BASE) #define PWR ((PWR_TypeDef *) PWR_BASE) #define DAC ((DAC_TypeDef *) DAC_BASE) diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h index e0c9364358..5acb24b75f 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h @@ -79,6 +79,10 @@ typedef enum { PWM_17 = (int)TIM17_BASE } PWMName; +typedef enum { + CAN_1 = (int)CAN_BASE +} CANName; + #ifdef __cplusplus } #endif diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralPins.c b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralPins.c index 01edd70191..22742a60c1 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralPins.c +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralPins.c @@ -218,3 +218,15 @@ const PinMap PinMap_SPI_SSEL[] = { {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)}, {NC, NC, 0} }; + +const PinMap PinMap_CAN_RD[] = { + {PB_8 , CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)}, + {PA_11, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)}, + {NC, NC, 0} +}; + +const PinMap PinMap_CAN_TD[] = { + {PB_9 , CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)}, + {PA_12, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_CAN)}, + {NC, NC, 0} +}; diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device.h b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device.h index 4701cebf96..796242cb24 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device.h +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/device.h @@ -54,6 +54,8 @@ #define DEVICE_SLEEP 1 +#define DEVICE_CAN 1 + //======================================= #define DEVICE_SEMIHOST 0 diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h index 5c29075f39..c92f1d2cde 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h @@ -100,6 +100,11 @@ struct pwmout_s { uint32_t pulse; }; +struct can_s { + CANName can; + int index; +}; + #include "gpio_object.h" #ifdef __cplusplus diff --git a/libraries/tests/mbed/can/main.cpp b/libraries/tests/mbed/can/main.cpp index 4c771fa1a1..f7ab154af2 100644 --- a/libraries/tests/mbed/can/main.cpp +++ b/libraries/tests/mbed/can/main.cpp @@ -14,6 +14,8 @@ CAN can1(D2, D3); #elif defined(TARGET_B96B_F446VE) // B96B_F446VE support only single CAN channel CAN can1(PD_0, PD_1); +#elif defined(TARGET_NUCLEO_F091RC) +CAN can1(PA_11, PA_12); #else CAN can1(p9, p10); #endif @@ -48,7 +50,7 @@ int main() { ticker.attach(&send, 1); CANMessage msg; while(1) { -#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE)) +#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE) && !defined(TARGET_NUCLEO_F091RC)) printf("loop()\n"); if(can2.read(msg)) { printmsg("Rx message:", &msg); diff --git a/libraries/tests/mbed/can_interrupt/main.cpp b/libraries/tests/mbed/can_interrupt/main.cpp index e95dfbdc5c..61bd5dbed5 100644 --- a/libraries/tests/mbed/can_interrupt/main.cpp +++ b/libraries/tests/mbed/can_interrupt/main.cpp @@ -14,6 +14,8 @@ CAN can1(D2, D3); #elif defined(TARGET_B96B_F446VE) // B96B_F446VE support only single CAN channel CAN can1(PD_0, PD_1); +#elif defined(TARGET_NUCLEO_F091RC) +CAN can1(PA_11, PA_12); #else CAN can1(p9, p10); #endif @@ -43,7 +45,7 @@ void send() { led1 = !led1; } -#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE)) +#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE) && !defined(TARGET_NUCLEO_F091RC)) void read() { CANMessage msg; printf("rx()\n"); @@ -57,7 +59,7 @@ void read() { int main() { printf("main()\n"); ticker.attach(&send, 1); -#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE)) +#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE) && !defined(TARGET_NUCLEO_F091RC)) can2.attach(&read); #endif while(1) { diff --git a/libraries/tests/mbed/can_loopback/main.cpp b/libraries/tests/mbed/can_loopback/main.cpp index 9068cdcd5c..1b4fed3545 100644 --- a/libraries/tests/mbed/can_loopback/main.cpp +++ b/libraries/tests/mbed/can_loopback/main.cpp @@ -13,6 +13,8 @@ CAN can1(p9, p10); CAN can1(PD_0, PD_1); #elif defined(TARGET_VK_RZ_A1H) CAN can1(P5_9, P5_10); +#elif defined(TARGET_NUCLEO_F091RC) +CAN can1(PA_11, PA_12); #endif #define TEST_ITERATIONS 127 diff --git a/workspace_tools/tests.py b/workspace_tools/tests.py index 7a8adb5440..c7265faf23 100644 --- a/workspace_tools/tests.py +++ b/workspace_tools/tests.py @@ -91,6 +91,7 @@ Wiring: * LPC1549: (RX=D9, TX=D8) * LPC4088: (RX=p9, TX=p10) * VK_RZ_A1H:(RX=P5_9, TX=P5_10) + * NUCLEO_F091RC: (RX=PA_11, TX=PA_12) """ TESTS = [ @@ -296,7 +297,8 @@ TESTS = [ "automated": True, "duration": 20, "peripherals": ["can_transceiver"], - "mcu": ["LPC1549", "LPC1768","B96B_F446VE", "VK_RZ_A1H"], + "mcu": ["LPC1549", "LPC1768","B96B_F446VE", "VK_RZ_A1H", + "NUCLEO_F091RC"], }, { "id": "MBED_BLINKY", "description": "Blinky", @@ -567,13 +569,13 @@ TESTS = [ "id": "MBED_29", "description": "CAN network test", "source_dir": join(TEST_DIR, "mbed", "can"), "dependencies": [MBED_LIBRARIES], - "mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE"] + "mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE", "NUCLEO_F091RC"] }, { "id": "MBED_30", "description": "CAN network test using interrupts", "source_dir": join(TEST_DIR, "mbed", "can_interrupt"), "dependencies": [MBED_LIBRARIES], - "mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE"] + "mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE", "NUCLEO_F091RC"] }, { "id": "MBED_31", "description": "PWM LED test",