參考資訊:
https://github.com/lujji/stm8-bootloader
https://github.com/TG9541/stm8ef/wiki/STM8S-Programming
https://www.st.com/resource/en/reference_manual/cd00190271-stm8s-series-and-stm8af-series-8bit-microcontrollers-stmicroelectronics.pdf
STM8S001是一顆I/O相當複雜的MCU,如下表:
| Pin | Port |
|---|---|
| 1 | PD6/AIN6/UART1_RX、PA1/OSCIN |
| 5 | PA3/TIM2_CH3[SPI_NSS]\[UART1_TX]、PB5/I2C_SDA[TIM1_BKIN] |
| 6 | PB4/I2C_SCL/[ADC_ETR] |
| 7 | PC3/TIM1_CH3[TLI][TIM1_CH1N]、PC4/CLK_CCO/TIM1_CH4/[AIN2]/[TIM1_CH2N]、PC5/SPI_SCK[TIM2_CH1] |
| 8 | PC6/SPI_MOSI[TIM1_CH1]、PD1/SWIM、PD3/AIN4/TIM2_CH2/ADC_ETR、PD5/AIN5/UART1_TX |
例如:PD6和PA1同時綁到第一隻腳,因此,操作一般GPIO時,PD6和PA1是一樣的結果,但是切換到其它功能時,則不同運作,如設定AIN6或者OSCIN
官方說明如下

表格

main.s
.equ PB_ODR, 0x5005
.equ PB_IDR, 0x5006
.equ PB_DDR, 0x5007
.equ PB_CR1, 0x5008
.equ PB_CR2, 0x5009
.area data
.area sseg
.area home
int main
.area cseg
main:
mov PB_DDR, #0x20
mov PB_CR1, #0x20
loop:
ld a, PB_ODR
xor a, #0x20
ld PB_ODR, a
ldw x, #60000
d0:
decw x
jrne d0
jp loop
編譯和燒錄
$ sdasstm8 -o main.s
$ sdldstm8 -ni -b home=0x8000 -b cseg=0x8080 -b data=0x0001 -b sseg=0xffff main.rel
$ sudo stm8flash -c stlinkv2 -p stm8s001j3 -u
Determine OPT area
Due to its file extension (or lack thereof), "Workaround" is considered as RAW BINARY format!
Unlocked device. Option bytes reset to default state.
Bytes written: 11
$ sudo stm8flash -c stlinkv2 -p stm8s001j3 -w main.ihx
Determine FLASH area
Due to its file extension (or lack thereof), "main.ihx" is considered as INTEL HEX format!
153 bytes at 0x8000... OK
Bytes written: 153
P.S. 如果燒錄失敗,實屬正常,再次執行燒錄命令即可,如果無法unlock(-u),請更換其它IC
完成
