mbed library with additional peripherals for ST F401 board
Fork of mbed-src by
This mbed LIB has additional peripherals for ST F401 board
- UART2 : PA_3 rx, PA_2 tx
- UART3 : PC_7 rx, PC_6 tx
- I2C2 : PB_3 SDA, PB_10 SCL
- I2C3 : PB_4 SDA, PA_8 SCL
Revision 58:3b55b7a41411, committed 2013-12-13
- Comitter:
- mbed_official
- Date:
- Fri Dec 13 09:30:05 2013 +0000
- Parent:
- 57:c7e83bc5e387
- Child:
- 59:ef93cc6bbf65
- Commit message:
- Synchronized with git revision da605b82a5ca02e18b987f366969d615bec94035
Full URL: https://github.com/mbedmicro/mbed/commit/da605b82a5ca02e18b987f366969d615bec94035/
[NUCLEO_F103RB] Update PWM IOs used + I2C cleanup
Changed in this revision
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F103RB/i2c_api.c Thu Dec 12 18:15:12 2013 +0000 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F103RB/i2c_api.c Fri Dec 13 09:30:05 2013 +0000 @@ -27,20 +27,13 @@ #define FLAG_TIMEOUT ((int)0x1000) #define LONG_TIMEOUT ((int)0x8000) -// Functions exit codes -#define EXIT_OK (0) -#define EXIT_FAIL (1) -#define EXIT_TIMEOUT (0xFFFFFFFF) - static const PinMap PinMap_I2C_SDA[] = { - //{PB_7, I2C_1, STM_PIN_DATA(GPIO_Mode_AF_OD, 0)}, // Cannot be used due to TIM4 - {PB_9, I2C_1, STM_PIN_DATA(GPIO_Mode_AF_OD, 7)}, // GPIO_Remap_I2C1 + {PB_9, I2C_1, STM_PIN_DATA(GPIO_Mode_AF_OD, 8)}, // GPIO_Remap_I2C1 {NC, NC, 0} }; static const PinMap PinMap_I2C_SCL[] = { - //{PB_6, I2C_1, STM_PIN_DATA(GPIO_Mode_AF_OD, 0)}, // // Cannot be used due to TIM4 - {PB_8, I2C_1, STM_PIN_DATA(GPIO_Mode_AF_OD, 7)}, // GPIO_Remap_I2C1 + {PB_8, I2C_1, STM_PIN_DATA(GPIO_Mode_AF_OD, 8)}, // GPIO_Remap_I2C1 {NC, NC, 0} }; @@ -107,17 +100,19 @@ //while (I2C_CheckEvent(i2c, I2C_EVENT_MASTER_MODE_SELECT) == ERROR) { while (I2C_GetFlagStatus(i2c, I2C_FLAG_SB) == RESET) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 1; } } - return EXIT_OK; + return 0; } inline int i2c_stop(i2c_t *obj) { I2C_TypeDef *i2c = (I2C_TypeDef *)(obj->i2c); + I2C_GenerateSTOP(i2c, ENABLE); - return EXIT_OK; + + return 0; } int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { @@ -133,7 +128,7 @@ timeout = LONG_TIMEOUT; while (I2C_GetFlagStatus(i2c, I2C_FLAG_BUSY) == SET) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 0; } } */ @@ -147,7 +142,7 @@ timeout = FLAG_TIMEOUT; while (I2C_CheckEvent(i2c, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) == ERROR) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 0; } } @@ -180,7 +175,7 @@ timeout = LONG_TIMEOUT; while (I2C_GetFlagStatus(i2c, I2C_FLAG_BUSY) == SET) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 0; } } */ @@ -194,13 +189,14 @@ timeout = FLAG_TIMEOUT; while (I2C_CheckEvent(i2c, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == ERROR) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 0; } } for (count = 0; count < length; count++) { - if (i2c_byte_write(obj, data[count]) != EXIT_OK) { - return EXIT_FAIL; + if (i2c_byte_write(obj, data[count]) != 1) { + i2c_stop(obj); + return 0; } } @@ -229,7 +225,7 @@ timeout = FLAG_TIMEOUT; while (I2C_GetFlagStatus(i2c, I2C_FLAG_RXNE) == RESET) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 0; } } @@ -250,11 +246,11 @@ while ((I2C_GetFlagStatus(i2c, I2C_FLAG_TXE) == RESET) && (I2C_GetFlagStatus(i2c, I2C_FLAG_BTF) == RESET)) { if ((timeout--) == 0) { - return EXIT_TIMEOUT; + return 0; } } - return EXIT_OK; + return 1; } void i2c_reset(i2c_t *obj) { @@ -288,29 +284,37 @@ // Nothing to do } -#define NoData 0 -#define ReadAddressed 1 -#define WriteGeneral 2 -#define WriteAddressed 3 +// See I2CSlave.h +#define NoData 0 // the slave has not been addressed +#define ReadAddressed 1 // the master has requested a read from this slave (slave = transmitter) +#define WriteGeneral 2 // the master is writing to all slave +#define WriteAddressed 3 // the master is writing to this slave (slave = receiver) int i2c_slave_receive(i2c_t *obj) { - //I2C_TypeDef *i2c = (I2C_TypeDef *)(obj->i2c); - int retval = NoData; - //int status; - - //if (I2C_GetFlagStatus(i2c, I2C_FLAG_GENCALL) == SET) retval = WriteGeneral; - - //status = I2C_GetLastEvent(i2c); - - return(retval); + // TO BE DONE + return(0); } int i2c_slave_read(i2c_t *obj, char *data, int length) { - return 0; + int count = 0; + + // Read all bytes + for (count = 0; count < length; count++) { + data[count] = i2c_byte_read(obj, 0); + } + + return count; } int i2c_slave_write(i2c_t *obj, const char *data, int length) { - return 0; + int count = 0; + + // Write all bytes + for (count = 0; count < length; count++) { + i2c_byte_write(obj, data[count]); + } + + return count; }
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F103RB/pinmap.c Thu Dec 12 18:15:12 2013 +0000 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F103RB/pinmap.c Fri Dec 13 09:30:05 2013 +0000 @@ -18,14 +18,15 @@ // Alternate-function mapping static const uint32_t AF_mapping[] = { - 0, // 0 = No AF - GPIO_Remap_SPI1, // 1 - GPIO_Remap_I2C1, // 2 - GPIO_Remap_USART1, // 3 - GPIO_Remap_USART2, // 4 - GPIO_FullRemap_TIM2, // 5 - GPIO_FullRemap_TIM3, // 6 - GPIO_Remap_I2C1 // 7 + 0, // 0 = No AF + GPIO_Remap_SPI1, // 1 + GPIO_Remap_I2C1, // 2 + GPIO_Remap_USART1, // 3 + GPIO_Remap_USART2, // 4 + GPIO_FullRemap_TIM2, // 5 + GPIO_FullRemap_TIM3, // 6 + GPIO_PartialRemap_TIM3, // 7 + GPIO_Remap_I2C1 // 8 }; /**
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F103RB/pwmout_api.c Thu Dec 12 18:15:12 2013 +0000 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F103RB/pwmout_api.c Fri Dec 13 09:30:05 2013 +0000 @@ -21,18 +21,19 @@ // Only TIM2 and TIM3 can be used (TIM1 and TIM4 are used by the us_ticker) static const PinMap PinMap_PWM[] = { - // TIM2 - {PA_2, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM2_CH3 - ARDUINO D1 (extra) - {PA_3, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM2_CH4 - ARDUINO D0 (extra) - // TIM2 remap - {PB_3, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 5)}, // TIM2r_CH2 - ARDUINO D3 - {PB_10, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 5)}, // TIM2r_CH3 - ARDUINO D6 - // TIM3 - {PA_6, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM3_CH1 - ARDUINO D12 (extra) - {PA_7, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM3_CH2 - ARDUINO D11 - // TIM3 remap - {PB_4, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 6)}, // TIM3r_CH1 - ARDUINO D5 - {PC_7, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 6)}, // TIM3r_CH2 - ARDUINO D9 + // TIM2 default + //{PA_2, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM2_CH3 - ARDUINO D1 + //{PA_3, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM2_CH4 - ARDUINO D0 + // TIM2 full remap + {PB_3, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 5)}, // TIM2fr_CH2 - ARDUINO D3 + //{PB_10, PWM_2, STM_PIN_DATA(GPIO_Mode_AF_PP, 5)}, // TIM2fr_CH3 - ARDUINO D6 + // TIM3 default + //{PA_6, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM3_CH1 - ARDUINO D12 + //{PA_7, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 0)}, // TIM3_CH2 - ARDUINO D11 + // TIM3 full remap + //{PC_7, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 6)}, // TIM3fr_CH2 - ARDUINO D9 + // TIM3 partial remap + {PB_4, PWM_3, STM_PIN_DATA(GPIO_Mode_AF_PP, 7)}, // TIM3pr_CH1 - ARDUINO D5 {NC, NC, 0} }; @@ -83,29 +84,29 @@ TIM_OCInitStructure.TIM_Pulse = obj->pulse; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; - // TIM Channel 1 - if ((obj->pin == PA_6) || (obj->pin == PB_4)) { + // Configure channel 1 + if (obj->pin == PB_4) { TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable); TIM_OC1Init(tim, &TIM_OCInitStructure); } - // TIM Channel 2 - if ((obj->pin == PA_7) || (obj->pin == PB_3) || (obj->pin == PC_7)) { + // Configure channel 2 + if (obj->pin == PB_3) { TIM_OC2PreloadConfig(tim, TIM_OCPreload_Enable); TIM_OC2Init(tim, &TIM_OCInitStructure); } - // TIM Channel 3 - if ((obj->pin == PA_2) || (obj->pin == PB_10)) { - TIM_OC3PreloadConfig(tim, TIM_OCPreload_Enable); - TIM_OC3Init(tim, &TIM_OCInitStructure); - } + // Configure channel 3 + //if (obj->pin == PB_10) { + // TIM_OC3PreloadConfig(tim, TIM_OCPreload_Enable); + // TIM_OC3Init(tim, &TIM_OCInitStructure); + //} - // TIM Channel 4 - if (obj->pin == PA_3) { - TIM_OC4PreloadConfig(tim, TIM_OCPreload_Enable); - TIM_OC4Init(tim, &TIM_OCInitStructure); - } + // Configure channel 4 + //if (obj->pin == PA_3) { + // TIM_OC4PreloadConfig(tim, TIM_OCPreload_Enable); + // TIM_OC4Init(tim, &TIM_OCInitStructure); + //} } float pwmout_read(pwmout_t* obj) {