mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #262 from dbestm/master
[NUCLEO_F030R8] add more pwm and UART pins, correction in I2Cpull/269/merge
commit
ab84750786
|
@ -67,7 +67,9 @@ typedef enum {
|
|||
typedef enum {
|
||||
TIM_3 = (int)TIM3_BASE,
|
||||
TIM_14 = (int)TIM14_BASE,
|
||||
TIM_16 = (int)TIM16_BASE
|
||||
TIM_15 = (int)TIM15_BASE,
|
||||
TIM_16 = (int)TIM16_BASE,
|
||||
TIM_17 = (int)TIM17_BASE
|
||||
} PWMName;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -86,19 +86,18 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
|||
void i2c_frequency(i2c_t *obj, int hz) {
|
||||
I2C_TypeDef *i2c = (I2C_TypeDef *)(obj->i2c);
|
||||
I2C_InitTypeDef I2C_InitStructure;
|
||||
uint32_t tim;
|
||||
|
||||
// Values calculated with I2C_Timing_Configuration_V1.0.1.xls file (see AN4235)
|
||||
// with Rise time = 100ns and Fall time = 10ns
|
||||
switch (hz) {
|
||||
case 100000:
|
||||
tim = 0x00201D2B; // Standard mode
|
||||
I2C_InitStructure.I2C_Timing = 0x00201D2B; // Standard mode
|
||||
break;
|
||||
case 200000:
|
||||
tim = 0x0010021E; // Fast mode
|
||||
I2C_InitStructure.I2C_Timing = 0x0010021E; // Fast mode
|
||||
break;
|
||||
case 400000:
|
||||
tim = 0x0010020A; // Fast mode
|
||||
I2C_InitStructure.I2C_Timing = 0x0010020A; // Fast mode
|
||||
break;
|
||||
default:
|
||||
error("Only 100kHz, 200kHz and 400kHz I2C frequencies are supported.");
|
||||
|
@ -112,7 +111,6 @@ void i2c_frequency(i2c_t *obj, int hz) {
|
|||
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
|
||||
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
|
||||
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
|
||||
I2C_InitStructure.I2C_Timing = tim;
|
||||
I2C_Init(i2c, &I2C_InitStructure);
|
||||
|
||||
I2C_Cmd(i2c, ENABLE);
|
||||
|
|
|
@ -33,10 +33,30 @@
|
|||
#include "pinmap.h"
|
||||
#include "error.h"
|
||||
|
||||
// TIM1 cannot be used because already used by the us_ticker
|
||||
static const PinMap PinMap_PWM[] = {
|
||||
{PA_7, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_4)}, // TIM14_CH1
|
||||
{PA_4, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_4)}, // TIM14_CH1
|
||||
{PA_6, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH1
|
||||
// {PA_6, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_5)}, // TIM16_CH1
|
||||
{PA_7, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH1
|
||||
// {PA_7, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_4)}, // TIM14_CH1
|
||||
// {PA_7, TIM_17, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_5)}, // TIM17_CH1
|
||||
{PB_0, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH3
|
||||
{PB_1, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM14_CH1
|
||||
// {PB_1, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH4
|
||||
{PB_4, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH1
|
||||
{PB_5, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH2
|
||||
{PB_6, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM16_CH1N
|
||||
{PB_7, TIM_17, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM17_CH1N
|
||||
{PB_8, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM16_CH1
|
||||
{PB_9, TIM_17, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM17_CH1
|
||||
{PB_14, TIM_15, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM15_CH1
|
||||
{PB_15, TIM_15, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM15_CH2
|
||||
// {PB_15, TIM_15, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_3)}, // TIM15_CH1N
|
||||
{PC_6, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH1
|
||||
{PC_7, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH2
|
||||
{PB_6, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM16_CH1N --> FAIL
|
||||
{PC_8, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH3
|
||||
{PC_9, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH4
|
||||
{NC, NC, 0}
|
||||
};
|
||||
|
||||
|
@ -51,7 +71,9 @@ void pwmout_init(pwmout_t* obj, PinName pin) {
|
|||
// Enable TIM clock
|
||||
if (obj->pwm == TIM_3) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
|
||||
if (obj->pwm == TIM_14) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
|
||||
if (obj->pwm == TIM_15) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);
|
||||
if (obj->pwm == TIM_16) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM16, ENABLE);
|
||||
if (obj->pwm == TIM_17) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM17, ENABLE);
|
||||
|
||||
// Configure GPIO
|
||||
pinmap_pinout(pin, PinMap_PWM);
|
||||
|
@ -81,32 +103,64 @@ void pwmout_write(pwmout_t* obj, float value) {
|
|||
|
||||
obj->pulse = (uint32_t)((float)obj->period * value);
|
||||
|
||||
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
|
||||
TIM_OCInitStructure.TIM_Pulse = obj->pulse;
|
||||
// Configure channels
|
||||
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
|
||||
TIM_OCInitStructure.TIM_Pulse = obj->pulse;
|
||||
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
||||
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low;
|
||||
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
||||
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
|
||||
|
||||
// Configure channel 1
|
||||
if (obj->pin == PA_7) {
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
||||
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC1Init(tim, &TIM_OCInitStructure);
|
||||
}
|
||||
|
||||
// Configure channel 1N
|
||||
if (obj->pin == PB_6) {
|
||||
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
|
||||
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
|
||||
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC1Init(tim, &TIM_OCInitStructure);
|
||||
}
|
||||
switch (obj->pin) {
|
||||
// Channels 1
|
||||
case PA_4:
|
||||
case PA_6:
|
||||
case PA_7:
|
||||
case PB_1:
|
||||
case PB_4:
|
||||
case PB_8:
|
||||
case PB_9:
|
||||
case PB_14:
|
||||
case PC_6:
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC1Init(tim, &TIM_OCInitStructure);
|
||||
break;
|
||||
// Channels 1N
|
||||
case PB_6:
|
||||
case PB_7:
|
||||
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
|
||||
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC1Init(tim, &TIM_OCInitStructure);
|
||||
break;
|
||||
// Channels 2
|
||||
// case PA_7:
|
||||
case PB_5:
|
||||
case PC_7:
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OC2PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC2Init(tim, &TIM_OCInitStructure);
|
||||
break;
|
||||
// Channels 3
|
||||
case PB_0:
|
||||
case PC_8:
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OC3PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC3Init(tim, &TIM_OCInitStructure);
|
||||
break;
|
||||
// Channels 4
|
||||
// case PB_1:
|
||||
case PC_9:
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OC4PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC4Init(tim, &TIM_OCInitStructure);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
// Configure channel 2
|
||||
if (obj->pin == PC_7) {
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
||||
TIM_OC2PreloadConfig(tim, TIM_OCPreload_Enable);
|
||||
TIM_OC2Init(tim, &TIM_OCInitStructure);
|
||||
}
|
||||
TIM_CtrlPWMOutputs(tim, ENABLE);
|
||||
|
||||
}
|
||||
|
||||
float pwmout_read(pwmout_t* obj) {
|
||||
|
|
|
@ -34,14 +34,17 @@
|
|||
#include <string.h>
|
||||
|
||||
static const PinMap PinMap_UART_TX[] = {
|
||||
{PA_9, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PA_2, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PA_9, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PB_6, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_0)},
|
||||
{NC, NC, 0}
|
||||
};
|
||||
|
||||
static const PinMap PinMap_UART_RX[] = {
|
||||
{PA_3, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PA_10, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PA_3, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PA_15, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
|
||||
{PB_7, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_0)},
|
||||
{NC, NC, 0}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue