Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
aaab6a99
Commit
aaab6a99
authored
Dec 05, 2016
by
Damien George
Browse files
stmhal/uart: Add support for UART7 and UART8 on F7 MCUs.
parent
27a503f6
Changes
4
Hide whitespace changes
Inline
Side-by-side
stmhal/mpconfigport.h
View file @
aaab6a99
...
...
@@ -187,8 +187,10 @@ extern const struct _mp_obj_module_t mp_module_network;
#if defined(MCU_SERIES_F7)
#define PYB_EXTI_NUM_VECTORS (24)
#define MICROPY_HW_MAX_UART (8)
#else
#define PYB_EXTI_NUM_VECTORS (23)
#define MICROPY_HW_MAX_UART (6)
#endif
#define MP_STATE_PORT MP_STATE_VM
...
...
@@ -215,7 +217,7 @@ extern const struct _mp_obj_module_t mp_module_network;
struct _pyb_uart_obj_t *pyb_stdio_uart; \
\
/* pointers to all UART objects (if they have been created) */
\
struct _pyb_uart_obj_t *pyb_uart_obj_all[
6
]; \
struct _pyb_uart_obj_t *pyb_uart_obj_all[
MICROPY_HW_MAX_UART
]; \
\
/* pointers to all CAN objects (if they have been created) */
\
struct _pyb_can_obj_t *pyb_can_obj_all[2]; \
...
...
stmhal/stm32_it.c
View file @
aaab6a99
...
...
@@ -677,6 +677,22 @@ void USART6_IRQHandler(void) {
IRQ_EXIT
(
USART6_IRQn
);
}
#if defined(MICROPY_HW_UART7_TX)
void
UART7_IRQHandler
(
void
)
{
IRQ_ENTER
(
UART7_IRQn
);
uart_irq_handler
(
7
);
IRQ_EXIT
(
UART7_IRQn
);
}
#endif
#if defined(MICROPY_HW_UART8_TX)
void
UART8_IRQHandler
(
void
)
{
IRQ_ENTER
(
UART8_IRQn
);
uart_irq_handler
(
8
);
IRQ_EXIT
(
UART8_IRQn
);
}
#endif
#if MICROPY_HW_ENABLE_CAN
void
CAN1_RX0_IRQHandler
(
void
)
{
IRQ_ENTER
(
CAN1_RX0_IRQn
);
...
...
stmhal/uart.c
View file @
aaab6a99
...
...
@@ -37,8 +37,6 @@
#include
"irq.h"
#include
"genhdr/pins.h"
//TODO: Add UART7/8 support for MCU_SERIES_F7
/// \moduleref pyb
/// \class UART - duplex serial communication bus
///
...
...
@@ -206,6 +204,28 @@ STATIC bool uart_init2(pyb_uart_obj_t *uart_obj) {
break
;
#endif
#if defined(MICROPY_HW_UART7_TX) && defined(MICROPY_HW_UART7_RX)
case
PYB_UART_7
:
uart_unit
=
7
;
UARTx
=
UART7
;
irqn
=
UART7_IRQn
;
pins
[
0
]
=
&
MICROPY_HW_UART7_TX
;
pins
[
1
]
=
&
MICROPY_HW_UART7_RX
;
__UART7_CLK_ENABLE
();
break
;
#endif
#if defined(MICROPY_HW_UART8_TX) && defined(MICROPY_HW_UART8_RX)
case
PYB_UART_8
:
uart_unit
=
8
;
UARTx
=
UART8
;
irqn
=
UART8_IRQn
;
pins
[
0
]
=
&
MICROPY_HW_UART8_TX
;
pins
[
1
]
=
&
MICROPY_HW_UART8_RX
;
__UART8_CLK_ENABLE
();
break
;
#endif
default:
// UART does not exist or is not configured for this board
return
false
;
...
...
@@ -537,7 +557,19 @@ STATIC mp_obj_t pyb_uart_init_helper(pyb_uart_obj_t *self, mp_uint_t n_args, con
// compute actual baudrate that was configured
// (this formula assumes UART_OVERSAMPLING_16)
uint32_t
actual_baudrate
;
uint32_t
actual_baudrate
=
0
;
#if defined(MCU_SERIES_F7)
UART_ClockSourceTypeDef
clocksource
=
UART_CLOCKSOURCE_UNDEFINED
;
UART_GETCLOCKSOURCE
(
&
self
->
uart
,
clocksource
);
switch
(
clocksource
)
{
case
UART_CLOCKSOURCE_PCLK1
:
actual_baudrate
=
HAL_RCC_GetPCLK1Freq
();
break
;
case
UART_CLOCKSOURCE_PCLK2
:
actual_baudrate
=
HAL_RCC_GetPCLK2Freq
();
break
;
case
UART_CLOCKSOURCE_HSI
:
actual_baudrate
=
HSI_VALUE
;
break
;
case
UART_CLOCKSOURCE_SYSCLK
:
actual_baudrate
=
HAL_RCC_GetSysClockFreq
();
break
;
case
UART_CLOCKSOURCE_LSE
:
actual_baudrate
=
LSE_VALUE
;
break
;
case
UART_CLOCKSOURCE_UNDEFINED
:
break
;
}
#else
if
(
self
->
uart
.
Instance
==
USART1
#if defined(USART6)
||
self
->
uart
.
Instance
==
USART6
...
...
@@ -547,6 +579,7 @@ STATIC mp_obj_t pyb_uart_init_helper(pyb_uart_obj_t *self, mp_uint_t n_args, con
}
else
{
actual_baudrate
=
HAL_RCC_GetPCLK1Freq
();
}
#endif
actual_baudrate
/=
self
->
uart
.
Instance
->
BRR
;
// check we could set the baudrate within 5%
...
...
@@ -694,6 +727,20 @@ STATIC mp_obj_t pyb_uart_deinit(mp_obj_t self_in) {
__USART6_RELEASE_RESET
();
__USART6_CLK_DISABLE
();
#endif
#if defined(UART7)
}
else
if
(
uart
->
Instance
==
UART7
)
{
HAL_NVIC_DisableIRQ
(
UART7_IRQn
);
__UART7_FORCE_RESET
();
__UART7_RELEASE_RESET
();
__UART7_CLK_DISABLE
();
#endif
#if defined(UART8)
}
else
if
(
uart
->
Instance
==
UART8
)
{
HAL_NVIC_DisableIRQ
(
UART8_IRQn
);
__UART8_FORCE_RESET
();
__UART8_RELEASE_RESET
();
__UART8_CLK_DISABLE
();
#endif
}
return
mp_const_none
;
}
...
...
stmhal/uart.h
View file @
aaab6a99
...
...
@@ -32,6 +32,8 @@ typedef enum {
PYB_UART_4
=
4
,
PYB_UART_5
=
5
,
PYB_UART_6
=
6
,
PYB_UART_7
=
7
,
PYB_UART_8
=
8
,
}
pyb_uart_t
;
typedef
struct
_pyb_uart_obj_t
pyb_uart_obj_t
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment