[NUCLEO_F302R8] Added CAN support

Added CAN API support for NUCLEO_F302R8 target.

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

Change-Id: Ia4ee8a90fe3f0ad6955dde21e78ea4a6c05e4fcd
pull/1762/head
Bartosz Szczepanski 2016-04-19 16:16:12 +02:00
parent 347a5e629d
commit f1c42bfc69
9 changed files with 40 additions and 10 deletions
hal/targets
cmsis/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8
hal/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8
libraries/tests/mbed
can_interrupt
can_loopback
workspace_tools

View File

@ -792,7 +792,7 @@ typedef struct
#define I2C1 ((I2C_TypeDef *) I2C1_BASE)
#define I2C2 ((I2C_TypeDef *) I2C2_BASE)
#define I2C3 ((I2C_TypeDef *) I2C3_BASE)
#define CAN ((CAN_TypeDef *) CAN_BASE)
#define CAN1 ((CAN_TypeDef *) CAN_BASE)
#define PWR ((PWR_TypeDef *) PWR_BASE)
#define DAC ((DAC_TypeDef *) DAC_BASE)
#define DAC1 ((DAC_TypeDef *) DAC1_BASE)

View File

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

View File

@ -204,3 +204,15 @@ const PinMap PinMap_SPI_SSEL[] = {
{PF_0, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
{NC, NC, 0}
};
const PinMap PinMap_CAN_RD[] = {
// {PB_8 , CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN)}, // Not available in 32 pins package
{PA_11, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN)},
{NC, NC, 0}
};
const PinMap PinMap_CAN_TD[] = {
// {PB_9 , CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN)}, // Not available in 32 pins package
{PA_12, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN)},
{NC, NC, 0}
};

View File

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

View File

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

View File

@ -16,7 +16,8 @@ CAN can1(D2, D3);
CAN can1(PD_0, PD_1);
#elif defined(TARGET_NUCLEO_F091RC) || defined(TARGET_NUCLEO_F072RB) || \
defined(TARGET_NUCLEO_F042K6) || defined(TARGET_NUCLEO_F334R8) || \
defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8)
defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8) || \
defined(TARGET_NUCLEO_F302R8)
CAN can1(PA_11, PA_12);
#else
CAN can1(p9, p10);
@ -55,7 +56,8 @@ int main() {
#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE) && \
!defined(TARGET_NUCLEO_F091RC) && !defined(TARGET_NUCLEO_F072RB) && \
!defined(TARGET_NUCLEO_F042K6) && !defined(TARGET_NUCLEO_F334R8) && \
!defined(TARGET_NUCLEO_F303RE) && !defined(TARGET_NUCLEO_F303K8))
!defined(TARGET_NUCLEO_F303RE) && !defined(TARGET_NUCLEO_F303K8) && \
!defined(TARGET_NUCLEO_F302R8))
printf("loop()\n");
if(can2.read(msg)) {
printmsg("Rx message:", &msg);

View File

@ -16,7 +16,8 @@ CAN can1(D2, D3);
CAN can1(PD_0, PD_1);
#elif defined(TARGET_NUCLEO_F091RC) || defined(TARGET_NUCLEO_F072RB) || \
defined(TARGET_NUCLEO_F042K6) || defined(TARGET_NUCLEO_F334R8) || \
defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8)
defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8) || \
defined(TARGET_NUCLEO_F302R8)
CAN can1(PA_11, PA_12);
#else
CAN can1(p9, p10);
@ -50,7 +51,8 @@ void send() {
#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE) && \
!defined(TARGET_NUCLEO_F091RC) && !defined(TARGET_NUCLEO_F072RB) && \
!defined(TARGET_NUCLEO_F042K6) && !defined(TARGET_NUCLEO_F334R8) && \
!defined(TARGET_NUCLEO_F303RE) && !defined(TARGET_NUCLEO_F303K8))
!defined(TARGET_NUCLEO_F303RE) && !defined(TARGET_NUCLEO_F303K8) && \
!defined(TARGET_NUCLEO_F302R8))
void read() {
CANMessage msg;
printf("rx()\n");
@ -67,7 +69,8 @@ int main() {
#if (!defined (TARGET_LPC1549) && !defined(TARGET_B96B_F446VE) && \
!defined(TARGET_NUCLEO_F091RC) && !defined(TARGET_NUCLEO_F072RB) && \
!defined(TARGET_NUCLEO_F042K6) && !defined(TARGET_NUCLEO_F334R8) && \
!defined(TARGET_NUCLEO_F303RE) && !defined(TARGET_NUCLEO_F303K8))
!defined(TARGET_NUCLEO_F303RE) && !defined(TARGET_NUCLEO_F303K8) && \
!defined(TARGET_NUCLEO_F302R8))
can2.attach(&read);
#endif
while(1) {

View File

@ -15,7 +15,8 @@ CAN can1(PD_0, PD_1);
CAN can1(P5_9, P5_10);
#elif defined(TARGET_NUCLEO_F091RC) || defined(TARGET_NUCLEO_F072RB) || \
defined(TARGET_NUCLEO_F042K6) || defined(TARGET_NUCLEO_F334R8) || \
defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8)
defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F303K8) || \
defined(TARGET_NUCLEO_F302R8)
CAN can1(PA_11, PA_12);
#endif

View File

@ -97,6 +97,7 @@ Wiring:
* NUCLEO_F334R8: (RX=PA_11, TX=PA_12)
* NUCLEO_F303RE: (RX=PA_11, TX=PA_12)
* NUCLEO_F303K8: (RX=PA_11, TX=PA_12)
* NUCLEO_F302R8: (RX=PA_11, TX=PA_12)
"""
TESTS = [
@ -304,7 +305,7 @@ TESTS = [
"peripherals": ["can_transceiver"],
"mcu": ["LPC1549", "LPC1768","B96B_F446VE", "VK_RZ_A1H",
"NUCLEO_F091RC", "NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8",
"NUCLEO_F303RE", "NUCLEO_F303K8"],
"NUCLEO_F303RE", "NUCLEO_F303K8", "NUCLEO_F302R8"],
},
{
"id": "MBED_BLINKY", "description": "Blinky",
@ -577,7 +578,7 @@ TESTS = [
"dependencies": [MBED_LIBRARIES],
"mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE", "NUCLEO_F091RC",
"NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8", "NUCLEO_F303RE",
"NUCLEO_F303K8"]
"NUCLEO_F303K8", "NUCLEO_F302R8"]
},
{
"id": "MBED_30", "description": "CAN network test using interrupts",
@ -585,7 +586,7 @@ TESTS = [
"dependencies": [MBED_LIBRARIES],
"mcu": ["LPC1768", "LPC4088", "LPC1549", "RZ_A1H", "B96B_F446VE", "NUCLEO_F091RC",
"NUCLEO_F072RB", "NUCLEO_F042K6", "NUCLEO_F334R8", "NUCLEO_F303RE",
"NUCLEO_F303K8"]
"NUCLEO_F303K8", "NUCLEO_F302R8"]
},
{
"id": "MBED_31", "description": "PWM LED test",