[NUCLEO_F091RC] Added CAN support

Added CAN API suport for NUCLEO_F091RC target.

*stm32f091xc.h* file was changed to avoid compilation errors.

Change-Id: I9207575a0e2ad0f8e3a4bb78eb23d1e7b4a94171
pull/1714/head
Bartosz Szczepanski 2016-04-20 11:03:03 +02:00
parent f04377d889
commit 8577163ca3
9 changed files with 38 additions and 7 deletions

View File

@ -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)

View File

@ -79,6 +79,10 @@ typedef enum {
PWM_17 = (int)TIM17_BASE
} PWMName;
typedef enum {
CAN_1 = (int)CAN_BASE
} CANName;
#ifdef __cplusplus
}
#endif

View File

@ -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}
};

View File

@ -54,6 +54,8 @@
#define DEVICE_SLEEP 1
#define DEVICE_CAN 1
//=======================================
#define DEVICE_SEMIHOST 0

View File

@ -100,6 +100,11 @@ struct pwmout_s {
uint32_t pulse;
};
struct can_s {
CANName can;
int index;
};
#include "gpio_object.h"
#ifdef __cplusplus

View File

@ -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);

View File

@ -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) {

View File

@ -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

View File

@ -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",