Skip to content

Commit ab84750

Browse files
committed
Merge pull request #262 from dbestm/master
[NUCLEO_F030R8] add more pwm and UART pins, correction in I2C
2 parents 7b8a9ba + 1fa4276 commit ab84750

File tree

4 files changed

+92
-35
lines changed

4 files changed

+92
-35
lines changed

libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/PeripheralNames.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ typedef enum {
6767
typedef enum {
6868
TIM_3 = (int)TIM3_BASE,
6969
TIM_14 = (int)TIM14_BASE,
70-
TIM_16 = (int)TIM16_BASE
70+
TIM_15 = (int)TIM15_BASE,
71+
TIM_16 = (int)TIM16_BASE,
72+
TIM_17 = (int)TIM17_BASE
7173
} PWMName;
7274

7375
#ifdef __cplusplus

libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/i2c_api.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,19 +86,18 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
8686
void i2c_frequency(i2c_t *obj, int hz) {
8787
I2C_TypeDef *i2c = (I2C_TypeDef *)(obj->i2c);
8888
I2C_InitTypeDef I2C_InitStructure;
89-
uint32_t tim;
9089

9190
// Values calculated with I2C_Timing_Configuration_V1.0.1.xls file (see AN4235)
9291
// with Rise time = 100ns and Fall time = 10ns
9392
switch (hz) {
9493
case 100000:
95-
tim = 0x00201D2B; // Standard mode
94+
I2C_InitStructure.I2C_Timing = 0x00201D2B; // Standard mode
9695
break;
9796
case 200000:
98-
tim = 0x0010021E; // Fast mode
97+
I2C_InitStructure.I2C_Timing = 0x0010021E; // Fast mode
9998
break;
10099
case 400000:
101-
tim = 0x0010020A; // Fast mode
100+
I2C_InitStructure.I2C_Timing = 0x0010020A; // Fast mode
102101
break;
103102
default:
104103
error("Only 100kHz, 200kHz and 400kHz I2C frequencies are supported.");
@@ -112,7 +111,6 @@ void i2c_frequency(i2c_t *obj, int hz) {
112111
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
113112
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
114113
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
115-
I2C_InitStructure.I2C_Timing = tim;
116114
I2C_Init(i2c, &I2C_InitStructure);
117115

118116
I2C_Cmd(i2c, ENABLE);

libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/pwmout_api.c

Lines changed: 81 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,30 @@
3333
#include "pinmap.h"
3434
#include "error.h"
3535

36+
// TIM1 cannot be used because already used by the us_ticker
3637
static const PinMap PinMap_PWM[] = {
37-
{PA_7, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_4)}, // TIM14_CH1
38+
{PA_4, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_4)}, // TIM14_CH1
39+
{PA_6, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH1
40+
// {PA_6, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_5)}, // TIM16_CH1
41+
{PA_7, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH1
42+
// {PA_7, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_4)}, // TIM14_CH1
43+
// {PA_7, TIM_17, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_5)}, // TIM17_CH1
44+
{PB_0, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH3
45+
{PB_1, TIM_14, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM14_CH1
46+
// {PB_1, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH4
47+
{PB_4, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH1
48+
{PB_5, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM3_CH2
49+
{PB_6, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM16_CH1N
50+
{PB_7, TIM_17, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM17_CH1N
51+
{PB_8, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM16_CH1
52+
{PB_9, TIM_17, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM17_CH1
53+
{PB_14, TIM_15, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM15_CH1
54+
{PB_15, TIM_15, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_1)}, // TIM15_CH2
55+
// {PB_15, TIM_15, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_3)}, // TIM15_CH1N
56+
{PC_6, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH1
3857
{PC_7, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH2
39-
{PB_6, TIM_16, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_2)}, // TIM16_CH1N --> FAIL
58+
{PC_8, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH3
59+
{PC_9, TIM_3, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, GPIO_AF_0)}, // TIM3_CH4
4060
{NC, NC, 0}
4161
};
4262

@@ -51,7 +71,9 @@ void pwmout_init(pwmout_t* obj, PinName pin) {
5171
// Enable TIM clock
5272
if (obj->pwm == TIM_3) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
5373
if (obj->pwm == TIM_14) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
74+
if (obj->pwm == TIM_15) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);
5475
if (obj->pwm == TIM_16) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM16, ENABLE);
76+
if (obj->pwm == TIM_17) RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM17, ENABLE);
5577

5678
// Configure GPIO
5779
pinmap_pinout(pin, PinMap_PWM);
@@ -81,32 +103,64 @@ void pwmout_write(pwmout_t* obj, float value) {
81103

82104
obj->pulse = (uint32_t)((float)obj->period * value);
83105

84-
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
85-
TIM_OCInitStructure.TIM_Pulse = obj->pulse;
86-
87-
// Configure channel 1
88-
if (obj->pin == PA_7) {
89-
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
90-
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
91-
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
92-
TIM_OC1Init(tim, &TIM_OCInitStructure);
93-
}
94-
95-
// Configure channel 1N
96-
if (obj->pin == PB_6) {
97-
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
98-
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
99-
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
100-
TIM_OC1Init(tim, &TIM_OCInitStructure);
101-
}
106+
// Configure channels
107+
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
108+
TIM_OCInitStructure.TIM_Pulse = obj->pulse;
109+
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
110+
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low;
111+
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
112+
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
113+
114+
switch (obj->pin) {
115+
// Channels 1
116+
case PA_4:
117+
case PA_6:
118+
case PA_7:
119+
case PB_1:
120+
case PB_4:
121+
case PB_8:
122+
case PB_9:
123+
case PB_14:
124+
case PC_6:
125+
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
126+
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
127+
TIM_OC1Init(tim, &TIM_OCInitStructure);
128+
break;
129+
// Channels 1N
130+
case PB_6:
131+
case PB_7:
132+
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
133+
TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable);
134+
TIM_OC1Init(tim, &TIM_OCInitStructure);
135+
break;
136+
// Channels 2
137+
// case PA_7:
138+
case PB_5:
139+
case PC_7:
140+
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
141+
TIM_OC2PreloadConfig(tim, TIM_OCPreload_Enable);
142+
TIM_OC2Init(tim, &TIM_OCInitStructure);
143+
break;
144+
// Channels 3
145+
case PB_0:
146+
case PC_8:
147+
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
148+
TIM_OC3PreloadConfig(tim, TIM_OCPreload_Enable);
149+
TIM_OC3Init(tim, &TIM_OCInitStructure);
150+
break;
151+
// Channels 4
152+
// case PB_1:
153+
case PC_9:
154+
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
155+
TIM_OC4PreloadConfig(tim, TIM_OCPreload_Enable);
156+
TIM_OC4Init(tim, &TIM_OCInitStructure);
157+
break;
158+
default:
159+
return;
160+
}
102161

103-
// Configure channel 2
104-
if (obj->pin == PC_7) {
105-
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
106-
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
107-
TIM_OC2PreloadConfig(tim, TIM_OCPreload_Enable);
108-
TIM_OC2Init(tim, &TIM_OCInitStructure);
109-
}
162+
TIM_CtrlPWMOutputs(tim, ENABLE);
163+
110164
}
111165

112166
float pwmout_read(pwmout_t* obj) {

libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F030R8/serial_api.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,17 @@
3434
#include <string.h>
3535

3636
static const PinMap PinMap_UART_TX[] = {
37-
{PA_9, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
3837
{PA_2, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
38+
{PA_9, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
39+
{PB_6, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_0)},
3940
{NC, NC, 0}
4041
};
4142

4243
static const PinMap PinMap_UART_RX[] = {
44+
{PA_3, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
4345
{PA_10, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
44-
{PA_3, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
46+
{PA_15, UART_2, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_1)},
47+
{PB_7, UART_1, STM_PIN_DATA(GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_UP, GPIO_AF_0)},
4548
{NC, NC, 0}
4649
};
4750

0 commit comments

Comments
 (0)