Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
M
micropython
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
card10
micropython
Commits
9c122029
Commit
9c122029
authored
11 years ago
by
Dave Hylands
Browse files
Options
Downloads
Patches
Plain Diff
stmhal - Add usart support
parent
02a85438
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
stmhal/main.c
+10
-26
10 additions, 26 deletions
stmhal/main.c
stmhal/printf.c
+1
-0
1 addition, 0 deletions
stmhal/printf.c
stmhal/pybmodule.c
+3
-1
3 additions, 1 deletion
stmhal/pybmodule.c
stmhal/usart.c
+43
-92
43 additions, 92 deletions
stmhal/usart.c
stmhal/usart.h
+11
-9
11 additions, 9 deletions
stmhal/usart.h
with
68 additions
and
128 deletions
stmhal/main.c
+
10
−
26
View file @
9c122029
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
#include
"misc.h"
#include
"misc.h"
#include
"systick.h"
#include
"systick.h"
#include
"pendsv.h"
#include
"pendsv.h"
#include
"usart.h"
#include
"mpconfig.h"
#include
"mpconfig.h"
#include
"qstr.h"
#include
"qstr.h"
#include
"nlr.h"
#include
"nlr.h"
...
@@ -24,6 +23,7 @@
...
@@ -24,6 +23,7 @@
#include
"gccollect.h"
#include
"gccollect.h"
#include
"pyexec.h"
#include
"pyexec.h"
#include
"pybmodule.h"
#include
"pybmodule.h"
#include
"usart.h"
#include
"led.h"
#include
"led.h"
#include
"exti.h"
#include
"exti.h"
#include
"usrsw.h"
#include
"usrsw.h"
...
@@ -253,31 +253,6 @@ int main(void) {
...
@@ -253,31 +253,6 @@ int main(void) {
storage_init();
storage_init();
#endif
#endif
// uncomment these 2 lines if you want REPL on USART_6 (or another usart) as well as on USB VCP
pyb_usart_global_debug
=
PYB_USART_YA
;
usart_init
(
pyb_usart_global_debug
,
115200
);
#if 0
pyb_led_t led = 1;
for (int i = 0; i < 24; i++) {
//while (1) {
led_state(led, 1);
usart_tx_strn_cooked(pyb_usart_global_debug, "on\n", 3);
HAL_Delay(100);
led_state(led, 0);
usart_tx_strn_cooked(pyb_usart_global_debug, "off\n", 4);
HAL_Delay(100);
led_state(led, 1);
usart_tx_strn_cooked(pyb_usart_global_debug, "on\n", 3);
HAL_Delay(100);
led_state(led, 0);
usart_tx_strn_cooked(pyb_usart_global_debug, "off\n", 4);
HAL_Delay(700);
led = (led % 4) + 1;
}
#endif
int
first_soft_reset
=
true
;
int
first_soft_reset
=
true
;
soft_reset:
soft_reset:
...
@@ -285,6 +260,15 @@ soft_reset:
...
@@ -285,6 +260,15 @@ soft_reset:
// GC init
// GC init
gc_init
(
&
_heap_start
,
&
_heap_end
);
gc_init
(
&
_heap_start
,
&
_heap_end
);
// Change #if 0 to #if 1 if you want REPL on USART_6 (or another usart)
// as well as on USB VCP
#if 0
pyb_usart_global_debug = pyb_Usart(MP_OBJ_NEW_SMALL_INT(PYB_USART_YA),
MP_OBJ_NEW_SMALL_INT(115200));
#else
pyb_usart_global_debug
=
NULL
;
#endif
// Micro Python init
// Micro Python init
qstr_init
();
qstr_init
();
rt_init
();
rt_init
();
...
...
This diff is collapsed.
Click to expand it.
stmhal/printf.c
+
1
−
0
View file @
9c122029
#include
<stdint.h>
#include
<stdint.h>
#include
<string.h>
#include
<string.h>
#include
<stdarg.h>
#include
<stdarg.h>
#include
<stm32f4xx_hal.h>
#include
"std.h"
#include
"std.h"
#include
"misc.h"
#include
"misc.h"
...
...
This diff is collapsed.
Click to expand it.
stmhal/pybmodule.c
+
3
−
1
View file @
9c122029
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
#include
"exti.h"
#include
"exti.h"
#include
"usrsw.h"
#include
"usrsw.h"
#include
"rtc.h"
#include
"rtc.h"
#include
"usart.h"
#if 0
#if 0
#include "servo.h"
#include "servo.h"
#include "storage.h"
#include "storage.h"
...
@@ -28,7 +29,6 @@
...
@@ -28,7 +29,6 @@
#include "sdcard.h"
#include "sdcard.h"
#include "accel.h"
#include "accel.h"
#include "i2c.h"
#include "i2c.h"
#include "usart.h"
#include "adc.h"
#include "adc.h"
#include "audio.h"
#include "audio.h"
#endif
#endif
...
@@ -274,7 +274,9 @@ STATIC const mp_map_elem_t pyb_module_globals_table[] = {
...
@@ -274,7 +274,9 @@ STATIC const mp_map_elem_t pyb_module_globals_table[] = {
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_Led
),
(
mp_obj_t
)
&
pyb_Led_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_Led
),
(
mp_obj_t
)
&
pyb_Led_obj
},
#if 0
#if 0
{ MP_OBJ_NEW_QSTR(MP_QSTR_I2C), (mp_obj_t)&pyb_I2C_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_I2C), (mp_obj_t)&pyb_I2C_obj },
#endif
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_Usart
),
(
mp_obj_t
)
&
pyb_Usart_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_Usart
),
(
mp_obj_t
)
&
pyb_Usart_obj
},
#if 0
{ MP_OBJ_NEW_QSTR(MP_QSTR_ADC_all), (mp_obj_t)&pyb_ADC_all_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_ADC_all), (mp_obj_t)&pyb_ADC_all_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_ADC), (mp_obj_t)&pyb_ADC_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_ADC), (mp_obj_t)&pyb_ADC_obj },
...
...
This diff is collapsed.
Click to expand it.
stmhal/usart.c
+
43
−
92
View file @
9c122029
...
@@ -8,47 +8,23 @@
...
@@ -8,47 +8,23 @@
#include
"obj.h"
#include
"obj.h"
#include
"usart.h"
#include
"usart.h"
pyb_usart_t
pyb_usart_global_debug
=
PYB_USART_NONE
;
struct
_pyb_usart_obj_t
{
mp_obj_base_t
base
;
#if 0
pyb_usart_t
usart_id
;
#else
bool
is_enabled
;
// This needs to be fixed. Right now its just a hack to get REPL working
UART_HandleTypeDef
handle
;
static
UART_HandleTypeDef
UartHandle
;
};
#endif
#if 0
static USART_TypeDef *usart_get_base(pyb_usart_t usart_id) {
USART_TypeDef *USARTx=NULL;
switch (usart_id) {
case PYB_USART_NONE:
break;
case PYB_USART_1:
USARTx = USART1;
break;
case PYB_USART_2:
USARTx = USART2;
break;
case PYB_USART_3:
USARTx = USART3;
break;
case PYB_USART_6:
USARTx = USART6;
break;
}
return USARTx;
pyb_usart_obj_t
*
pyb_usart_global_debug
=
NULL
;
}
#endif
void
usart_init
(
pyb_usart_t
usart_
id
,
uint32_t
baudrate
)
{
void
usart_init
(
pyb_usart_
obj_
t
*
usart_
obj
,
uint32_t
baudrate
)
{
USART_TypeDef
*
USARTx
=
NULL
;
USART_TypeDef
*
USARTx
=
NULL
;
uint32_t
GPIO_Pin
=
0
;
uint32_t
GPIO_Pin
=
0
;
uint8_t
GPIO_AF_USARTx
=
0
;
uint8_t
GPIO_AF_USARTx
=
0
;
GPIO_TypeDef
*
GPIO_Port
=
NULL
;
GPIO_TypeDef
*
GPIO_Port
=
NULL
;
switch
(
usart_id
)
{
switch
(
usart_
obj
->
usart_
id
)
{
case
PYB_USART_NONE
:
case
PYB_USART_NONE
:
return
;
return
;
...
@@ -105,88 +81,63 @@ void usart_init(pyb_usart_t usart_id, uint32_t baudrate) {
...
@@ -105,88 +81,63 @@ void usart_init(pyb_usart_t usart_id, uint32_t baudrate) {
GPIO_InitStructure
.
Alternate
=
GPIO_AF_USARTx
;
GPIO_InitStructure
.
Alternate
=
GPIO_AF_USARTx
;
HAL_GPIO_Init
(
GPIO_Port
,
&
GPIO_InitStructure
);
HAL_GPIO_Init
(
GPIO_Port
,
&
GPIO_InitStructure
);
memset
(
&
UartHandle
,
0
,
sizeof
(
UartHandle
));
UART_HandleTypeDef
*
uh
=
&
usart_obj
->
handle
;
UartHandle
.
Instance
=
USARTx
;
memset
(
uh
,
0
,
sizeof
(
*
uh
));
UartHandle
.
Init
.
BaudRate
=
baudrate
;
uh
->
Instance
=
USARTx
;
UartHandle
.
Init
.
WordLength
=
USART_WORDLENGTH_8B
;
uh
->
Init
.
BaudRate
=
baudrate
;
UartHandle
.
Init
.
StopBits
=
USART_STOPBITS_1
;
uh
->
Init
.
WordLength
=
USART_WORDLENGTH_8B
;
UartHandle
.
Init
.
Parity
=
USART_PARITY_NONE
;
uh
->
Init
.
StopBits
=
USART_STOPBITS_1
;
UartHandle
.
Init
.
Mode
=
USART_MODE_TX_RX
;
uh
->
Init
.
Parity
=
USART_PARITY_NONE
;
UartHandle
.
Init
.
HwFlowCtl
=
UART_HWCONTROL_NONE
;
uh
->
Init
.
Mode
=
USART_MODE_TX_RX
;
UartHandle
.
Init
.
OverSampling
=
UART_OVERSAMPLING_16
;
uh
->
Init
.
HwFlowCtl
=
UART_HWCONTROL_NONE
;
HAL_UART_Init
(
&
UartHandle
);
uh
->
Init
.
OverSampling
=
UART_OVERSAMPLING_16
;
HAL_UART_Init
(
uh
);
}
}
bool
usart_rx_any
(
pyb_usart_t
usart_id
)
{
bool
usart_rx_any
(
pyb_usart_obj_t
*
usart_obj
)
{
#if 0
return
__HAL_UART_GET_FLAG
(
&
usart_obj
->
handle
,
USART_FLAG_RXNE
);
USART_TypeDef *USARTx = usart_get_base(usart_id);
return USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == SET;
#else
return
__HAL_UART_GET_FLAG
(
&
UartHandle
,
USART_FLAG_RXNE
);
#endif
}
}
int
usart_rx_char
(
pyb_usart_t
usart_id
)
{
int
usart_rx_char
(
pyb_usart_obj_t
*
usart_obj
)
{
#if 0
USART_TypeDef *USARTx = usart_get_base(usart_id);
return USART_ReceiveData(USARTx);
#else
uint8_t
ch
;
uint8_t
ch
;
if
(
HAL_UART_Receive
(
&
U
art
H
andle
,
&
ch
,
1
,
0
)
!=
HAL_OK
)
{
if
(
HAL_UART_Receive
(
&
us
art
_obj
->
h
andle
,
&
ch
,
1
,
0
)
!=
HAL_OK
)
{
ch
=
0
;
ch
=
0
;
}
}
return
ch
;
return
ch
;
#endif
}
}
void
usart_tx_char
(
pyb_usart_t
usart_id
,
int
c
)
{
void
usart_tx_char
(
pyb_usart_obj_t
*
usart_obj
,
int
c
)
{
#if 0
USART_TypeDef *USARTx = usart_get_base(usart_id);
// wait until the end of any previous transmission
uint32_t timeout = 100000;
while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET && --timeout > 0) {
}
USART_SendData(USARTx, c);
#else
uint8_t
ch
=
c
;
uint8_t
ch
=
c
;
HAL_UART_Transmit
(
&
UartHandle
,
&
ch
,
1
,
100000
);
HAL_UART_Transmit
(
&
usart_obj
->
handle
,
&
ch
,
1
,
100000
);
#endif
}
}
void
usart_tx_str
(
pyb_usart_t
usart_
id
,
const
char
*
str
)
{
void
usart_tx_str
(
pyb_usart_
obj_
t
*
usart_
obj
,
const
char
*
str
)
{
for
(;
*
str
;
str
++
)
{
for
(;
*
str
;
str
++
)
{
usart_tx_char
(
usart_
id
,
*
str
);
usart_tx_char
(
usart_
obj
,
*
str
);
}
}
}
}
void
usart_tx_strn
(
pyb_usart_t
usart_
id
,
const
char
*
str
,
uint
len
)
{
void
usart_tx_strn
(
pyb_usart_
obj_
t
*
usart_
obj
,
const
char
*
str
,
uint
len
)
{
for
(;
len
>
0
;
str
++
,
len
--
)
{
for
(;
len
>
0
;
str
++
,
len
--
)
{
usart_tx_char
(
usart_
id
,
*
str
);
usart_tx_char
(
usart_
obj
,
*
str
);
}
}
}
}
void
usart_tx_strn_cooked
(
pyb_usart_t
usart_
id
,
const
char
*
str
,
uint
len
)
{
void
usart_tx_strn_cooked
(
pyb_usart_
obj_
t
*
usart_
obj
,
const
char
*
str
,
uint
len
)
{
for
(
const
char
*
top
=
str
+
len
;
str
<
top
;
str
++
)
{
for
(
const
char
*
top
=
str
+
len
;
str
<
top
;
str
++
)
{
if
(
*
str
==
'\n'
)
{
if
(
*
str
==
'\n'
)
{
usart_tx_char
(
usart_
id
,
'\r'
);
usart_tx_char
(
usart_
obj
,
'\r'
);
}
}
usart_tx_char
(
usart_
id
,
*
str
);
usart_tx_char
(
usart_
obj
,
*
str
);
}
}
}
}
#if 0
/******************************************************************************/
/******************************************************************************/
/* Micro Python bindings */
/* Micro Python bindings */
typedef struct _pyb_usart_obj_t {
mp_obj_base_t base;
pyb_usart_t usart_id;
bool is_enabled;
} pyb_usart_obj_t;
static
mp_obj_t
usart_obj_status
(
mp_obj_t
self_in
)
{
static
mp_obj_t
usart_obj_status
(
mp_obj_t
self_in
)
{
pyb_usart_obj_t
*
self
=
self_in
;
pyb_usart_obj_t
*
self
=
self_in
;
if (usart_rx_any(self
->usart_id
)) {
if
(
usart_rx_any
(
self
))
{
return
mp_const_true
;
return
mp_const_true
;
}
else
{
}
else
{
return
mp_const_false
;
return
mp_const_false
;
...
@@ -198,7 +149,7 @@ static mp_obj_t usart_obj_rx_char(mp_obj_t self_in) {
...
@@ -198,7 +149,7 @@ static mp_obj_t usart_obj_rx_char(mp_obj_t self_in) {
pyb_usart_obj_t
*
self
=
self_in
;
pyb_usart_obj_t
*
self
=
self_in
;
if
(
self
->
is_enabled
)
{
if
(
self
->
is_enabled
)
{
ret = mp_obj_new_int(usart_rx_char(self
->usart_id
));
ret
=
mp_obj_new_int
(
usart_rx_char
(
self
));
}
}
return
ret
;
return
ret
;
}
}
...
@@ -208,7 +159,7 @@ static mp_obj_t usart_obj_tx_char(mp_obj_t self_in, mp_obj_t c) {
...
@@ -208,7 +159,7 @@ static mp_obj_t usart_obj_tx_char(mp_obj_t self_in, mp_obj_t c) {
uint
len
;
uint
len
;
const
char
*
str
=
mp_obj_str_get_data
(
c
,
&
len
);
const
char
*
str
=
mp_obj_str_get_data
(
c
,
&
len
);
if
(
len
==
1
&&
self
->
is_enabled
)
{
if
(
len
==
1
&&
self
->
is_enabled
)
{
usart_tx_char(self
->usart_id
, str[0]);
usart_tx_char
(
self
,
str
[
0
]);
}
}
return
mp_const_none
;
return
mp_const_none
;
}
}
...
@@ -219,7 +170,7 @@ static mp_obj_t usart_obj_tx_str(mp_obj_t self_in, mp_obj_t s) {
...
@@ -219,7 +170,7 @@ static mp_obj_t usart_obj_tx_str(mp_obj_t self_in, mp_obj_t s) {
if
(
MP_OBJ_IS_STR
(
s
))
{
if
(
MP_OBJ_IS_STR
(
s
))
{
uint
len
;
uint
len
;
const
char
*
data
=
mp_obj_str_get_data
(
s
,
&
len
);
const
char
*
data
=
mp_obj_str_get_data
(
s
,
&
len
);
usart_tx_strn(self
->usart_id
, data, len);
usart_tx_strn
(
self
,
data
,
len
);
}
}
}
}
return
mp_const_none
;
return
mp_const_none
;
...
@@ -250,20 +201,20 @@ STATIC const mp_obj_type_t usart_obj_type = {
...
@@ -250,20 +201,20 @@ STATIC const mp_obj_type_t usart_obj_type = {
.
methods
=
usart_methods
,
.
methods
=
usart_methods
,
};
};
STATIC
mp_obj_t pyb_Usart(mp_obj_t usart_id, mp_obj_t baudrate) {
mp_obj_t
pyb_Usart
(
mp_obj_t
usart_id
,
mp_obj_t
baudrate
)
{
if
(
mp_obj_get_int
(
usart_id
)
>
PYB_USART_MAX
)
{
if
(
mp_obj_get_int
(
usart_id
)
>
PYB_USART_MAX
)
{
return
mp_const_none
;
return
mp_const_none
;
}
}
/* init USART */
usart_init(mp_obj_get_int(usart_id), mp_obj_get_int(baudrate));
pyb_usart_obj_t
*
o
=
m_new_obj
(
pyb_usart_obj_t
);
pyb_usart_obj_t
*
o
=
m_new_obj
(
pyb_usart_obj_t
);
o
->
base
.
type
=
&
usart_obj_type
;
o
->
base
.
type
=
&
usart_obj_type
;
o
->
usart_id
=
mp_obj_get_int
(
usart_id
);
o
->
usart_id
=
mp_obj_get_int
(
usart_id
);
o
->
is_enabled
=
true
;
o
->
is_enabled
=
true
;
/* init USART */
usart_init
(
o
,
mp_obj_get_int
(
baudrate
));
return
o
;
return
o
;
}
}
MP_DEFINE_CONST_FUN_OBJ_2
(
pyb_Usart_obj
,
pyb_Usart
);
MP_DEFINE_CONST_FUN_OBJ_2
(
pyb_Usart_obj
,
pyb_Usart
);
#endif
This diff is collapsed.
Click to expand it.
stmhal/usart.h
+
11
−
9
View file @
9c122029
...
@@ -12,15 +12,17 @@ typedef enum {
...
@@ -12,15 +12,17 @@ typedef enum {
PYB_USART_YB
=
3
,
// USART3 on Y9, Y10 = PB10, PB11
PYB_USART_YB
=
3
,
// USART3 on Y9, Y10 = PB10, PB11
}
pyb_usart_t
;
}
pyb_usart_t
;
extern
pyb_usart_t
pyb_usart_
global_debug
;
typedef
struct
_
pyb_usart_
obj_
t
pyb_usart_
obj_t
;
void
usart_init
(
pyb_usart_t
usart_id
,
uint32_t
baudrate
);
extern
pyb_usart_obj_t
*
pyb_usart_global_debug
;
bool
usart_rx_any
(
pyb_usart_t
usart_id
);
int
usart_rx_char
(
pyb_usart_t
usart_id
);
void
usart_init
(
pyb_usart_obj_t
*
usart_obj
,
uint32_t
baudrate
);
void
usart_tx_str
(
pyb_usart_t
usart_id
,
const
char
*
str
);
bool
usart_rx_any
(
pyb_usart_obj_t
*
usart_obj
);
void
usart_tx_strn
(
pyb_usart_t
usart_id
,
const
char
*
str
,
uint
len
);
int
usart_rx_char
(
pyb_usart_obj_t
*
usart_obj
);
void
usart_tx_strn_cooked
(
pyb_usart_t
usart_id
,
const
char
*
str
,
uint
len
);
void
usart_tx_str
(
pyb_usart_obj_t
*
usart_obj
,
const
char
*
str
);
void
usart_tx_strn
(
pyb_usart_obj_t
*
usart_obj
,
const
char
*
str
,
uint
len
);
void
usart_tx_strn_cooked
(
pyb_usart_obj_t
*
usart_obj
,
const
char
*
str
,
uint
len
);
mp_obj_t
pyb_Usart
(
mp_obj_t
usart_id
,
mp_obj_t
baudrate
);
#if 0
MP_DECLARE_CONST_FUN_OBJ
(
pyb_Usart_obj
);
MP_DECLARE_CONST_FUN_OBJ
(
pyb_Usart_obj
);
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment