1
+ import time
2
+ from machine import Pin , UART
3
+
4
+
5
+ STM32_INIT = b'\x7F '
6
+ STM32_NACK = b'\x1F '
7
+ STM32_ACK = b'\x79 '
8
+
9
+ STM32_GET = b'\x00 '
10
+ STM32_ID = b'\xFD ' #should be 0x02
11
+
12
+ STM32_READ = b'\x11 '
13
+ STM32_RUN = b'\x21 '
14
+ STM32_WRITE = b'\xCE ' #0xCE 0x31
15
+
16
+ STM32_ADDRESS = bytes .fromhex ('08000000' ) #[b'\x08',b'\x00',b'\x00',b'\x00']
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+ led = Pin (48 ,Pin .OUT )
27
+ led_state = False
28
+
29
+ uart = UART (1 , baudrate = 115200 , bits = 8 , parity = 0 , stop = 1 , tx = 43 ,rx = 44 ) #parity 0 equals to Even, 1 to Odd
30
+
31
+
32
+
33
+ def STM32_sendCommand (x ):
34
+ value = x
35
+ value_not = bytes ([value [0 ]^ 0xFF ])
36
+ uart .write (value )
37
+ uart .write (value_not )
38
+
39
+
40
+
41
+
42
+ def STM32_checkOK ():
43
+ result = - 1
44
+ reply = uart .read (1 )
45
+ if reply != None :
46
+ if reply == STM32_ACK :
47
+ result = 0
48
+ else :
49
+ if reply == STM32_NACK :
50
+ result = 1
51
+ return result
52
+
53
+
54
+
55
+ def STM32_waitOK ():
56
+ result = - 1
57
+ while result < 0 :
58
+ result = STM32_checkOK ()
59
+ return result
60
+
61
+
62
+
63
+ def STM32_getID ():
64
+ lock = True
65
+ while lock :
66
+ STM32_sendCommand (STM32_ID )
67
+ if STM32_waitOK ()== 0 :
68
+ lock = False
69
+
70
+ lock = True
71
+ while lock :
72
+ data = uart .read (1 )
73
+ if data != None :
74
+ N = data [0 ]
75
+ lock = False
76
+ stm32id = uart .read (N + 1 )
77
+ STM32_waitOK ()
78
+ return stm32id
79
+
80
+
81
+
82
+ def STM32_writeMode ():
83
+ lock = True
84
+ while lock :
85
+ STM32_sendCommand (STM32_WRITE )
86
+ if STM32_waitOK ()== 0 :
87
+ lock = False
88
+
89
+
90
+
91
+ def STM32_address (address ):
92
+ check = 0x00
93
+ check = check ^ address [0 ]
94
+ check = check ^ address [1 ]
95
+ check = check ^ address [2 ]
96
+ check = check ^ address [3 ]
97
+
98
+ uart .write (address )
99
+ uart .write (bytes ([check ]))
100
+
101
+
102
+
103
+ print ('\n STM32 FIRMWARE UPDATER' )
104
+
105
+ STM32_sendCommand (STM32_INIT )
106
+ STM32_waitOK ()
107
+
108
+ print ('\n STM32 FOUND' )
109
+ print ('\n STM32 GETTING ID' )
110
+ print (STM32_getID ().hex ())
111
+
112
+
113
+ STM32_writeMode ()
114
+ print ('\n STM32 WRITE MODE' )
115
+
116
+ """
117
+ file = open('Blink_fast.bin','rb')
118
+ firmware = file.read()
119
+ firmware_size_256 = len(firmware)/256
120
+ firmware_size_256_last = len(firmware)%256
121
+ print(firmware_size_256)
122
+ print(firmware_size_256_last)
123
+ """
124
+
125
+ with open ('Blink_fast.bin' ,'rb' ) as file_t :
126
+ blob_data = bytearray (file_t .read ())
127
+ print (blob_data )
128
+
129
+
130
+ """
131
+
132
+ x=int.from_bytes(STM32_ADDRESS,'big')
133
+ x=x+127
134
+ new_address=x.to_bytes(4,'big')
135
+ STM32_address(new_address)
136
+
137
+ STM32_waitOK()
138
+ """
139
+
140
+
141
+
142
+
143
+
0 commit comments