Skip to content

Commit b6c9178

Browse files
committed
STM32F0: fix usart irq management
1 parent 98611c8 commit b6c9178

File tree

1 file changed

+59
-58
lines changed

1 file changed

+59
-58
lines changed

targets/TARGET_STM/TARGET_STM32F0/serial_device.c

Lines changed: 59 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -87,47 +87,46 @@ static void uart2_irq(void)
8787
}
8888
#endif
8989

90-
#if defined USART3_BASE
91-
static void uart3_irq(void)
90+
// Used for both USART3_4_IRQn and USART3_8_IRQn
91+
static void uart3_8_irq(void)
9292
{
93-
uart_irq(2);
94-
}
93+
#if defined(USART3_BASE)
94+
if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART3) != RESET)
95+
{
96+
uart_irq(2);
97+
}
9598
#endif
96-
97-
#if defined USART4_BASE
98-
static void uart4_irq(void)
99-
{
100-
uart_irq(3);
101-
}
99+
#if defined(USART4_BASE)
100+
if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART4) != RESET)
101+
{
102+
uart_irq(3);
103+
}
102104
#endif
103-
104-
#if defined USART5_BASE
105-
static void uart5_irq(void)
106-
{
107-
uart_irq(4);
108-
}
105+
#if defined(USART5_BASE)
106+
if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART5) != RESET)
107+
{
108+
uart_irq(4);
109+
}
109110
#endif
110-
111-
#if defined USART6_BASE
112-
static void uart6_irq(void)
113-
{
114-
uart_irq(5);
115-
}
111+
#if defined(USART6_BASE)
112+
if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART6) != RESET)
113+
{
114+
uart_irq(5);
115+
}
116116
#endif
117-
118-
#if defined USART7_BASE
119-
static void uart7_irq(void)
120-
{
121-
uart_irq(6);
122-
}
117+
#if defined(USART7_BASE)
118+
if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART7) != RESET)
119+
{
120+
uart_irq(6);
121+
}
123122
#endif
124-
125-
#if defined USART8_BASE
126-
static void uart8_irq(void)
127-
{
128-
uart_irq(7);
129-
}
123+
#if defined(USART8_BASE)
124+
if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART8) != RESET)
125+
{
126+
uart_irq(7);
127+
}
130128
#endif
129+
}
131130

132131
void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
133132
{
@@ -156,53 +155,55 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
156155
}
157156
#endif
158157

159-
#if defined (TARGET_STM32F091RC)
158+
#if defined(USART3_BASE)
160159
if (obj_s->uart == UART_3) {
160+
#if defined(TARGET_STM32F091RC)
161161
irq_n = USART3_8_IRQn;
162-
vector = (uint32_t)&uart3_irq;
162+
#else
163+
irq_n = USART3_4_IRQn;
164+
#endif
165+
vector = (uint32_t)&uart3_8_irq;
163166
}
167+
#endif
164168

169+
#if defined(USART4_BASE)
165170
if (obj_s->uart == UART_4) {
171+
#if defined(TARGET_STM32F091RC)
166172
irq_n = USART3_8_IRQn;
167-
vector = (uint32_t)&uart4_irq;
173+
#else
174+
irq_n = USART3_4_IRQn;
175+
#endif
176+
vector = (uint32_t)&uart3_8_irq;
168177
}
178+
#endif
169179

180+
// Below usart are available only on TARGET_STM32F091RC
181+
#if defined(USART5_BASE)
170182
if (obj_s->uart == UART_5) {
171183
irq_n = USART3_8_IRQn;
172-
vector = (uint32_t)&uart5_irq;
184+
vector = (uint32_t)&uart3_8_irq;
173185
}
186+
#endif
174187

188+
#if defined(USART6_BASE)
175189
if (obj_s->uart == UART_6) {
176190
irq_n = USART3_8_IRQn;
177-
vector = (uint32_t)&uart6_irq;
191+
vector = (uint32_t)&uart3_8_irq;
178192
}
193+
#endif
179194

195+
#if defined(USART7_BASE)
180196
if (obj_s->uart == UART_7) {
181197
irq_n = USART3_8_IRQn;
182-
vector = (uint32_t)&uart7_irq;
198+
vector = (uint32_t)&uart3_8_irq;
183199
}
200+
#endif
184201

202+
#if defined(USART8_BASE)
185203
if (obj_s->uart == UART_8) {
186204
irq_n = USART3_8_IRQn;
187-
vector = (uint32_t)&uart8_irq;
205+
vector = (uint32_t)&uart3_8_irq;
188206
}
189-
190-
#elif defined (TARGET_STM32F030R8) || defined (TARGET_STM32F051R8)
191-
192-
#else
193-
#if defined(USART3_BASE)
194-
if (obj_s->uart == UART_3) {
195-
irq_n = USART3_4_IRQn;
196-
vector = (uint32_t)&uart3_irq;
197-
}
198-
#endif
199-
200-
#if defined(USART4_BASE)
201-
if (obj_s->uart == UART_4) {
202-
irq_n = USART3_4_IRQn;
203-
vector = (uint32_t)&uart4_irq;
204-
}
205-
#endif
206207
#endif
207208

208209
if (enable) {

0 commit comments

Comments
 (0)