STM8S103F3 產品手冊, 接線 ST-LINK和開發板的SWIM口是一一對應的, 直接連到開發板的同名PIN, 開發工具庫 SPL 第三方維護的 STM8S103F3_SPL 創建項目 打開 STVD 工具鏈: 選擇STM8 Cosmic, 指定toolchains到對應的目錄, 選擇晶元型... ...
STM8S103F3
- 基本信息: 16MHz 8位 MCU, 8K位元組Flash, 1K記憶體, 640位元組EEPROM, 內置振蕩源, 支持3.3V和5V電壓, 支持SPI, UART, I2C, ADC, PWM
- 產品手冊: https://www.st.com/resource/en/datasheet/stm8s103f2.pdf
內核
- 16 MHz advanced STM8 core with Harvard architecture and 3-stage pipeline 16MHz, 哈佛結構, 三級流水線
- Extended instruction set
存儲
- Program memory: 8 Kbyte Flash; data retention 20 years at 55 °C after 10 kcycle 程式8K位元組, 可擦寫1萬次
- Data memory: 640 byte true data EEPROM; endurance 300 kcycle 數據640位元組, 可擦寫30萬次
- RAM: 1 Kbyte 記憶體1K位元組
時鐘, 重置和電源管理
- 2.95 to 5.5 V operating voltage 支持2.95V到5.5V的電壓
- Flexible clock control, 4 master clock sources
- Low power crystal resonator oscillator
- External clock input
- Internal, user-trimmable 16 MHz RC 可調節的內部16MHz振蕩源
- Internal low-power 128 kHz RC 低功耗內部128KHz振蕩源
- Clock security system with clock monitor
- Power management:
- Low-power modes (wait, active-halt, halt)
- Switch-off peripheral clocks individually
- Permanently active, low-consumption poweron and power-down reset
中斷管理
- Nested interrupt controller with 32 interrupts
- Up to 27 external interrupts on 6 vectors
時鐘
- Advanced control timer: 16-bit, 4 CAPCOM channels, 3 complementary outputs, dead-time insertion and flexible synchronization
- 16-bit general purpose timer, with 3 CAPCOM channels (IC, OC or PWM)
- 8-bit basic timer with 8-bit prescaler
- Auto wake-up timer
- Window watchdog and independent watchdog timers
通信介面
- UART with clock output for synchronous operation, SmartCard, IrDA, LIN master mode
- SPI interface up to 8 Mbit/s
- I2C interface up to 400 kbit/s
ADC轉換介面
- 10-bit, ±1 LSB ADC with up to 5 multiplexed channels, scan mode and analog watchdog 5個10位ADC
I/Os
- Up to 28 I/Os on a 32-pin package including 21 high sink outputs
- Highly robust I/O design, immune against current injection
Unique ID
- 96-bit unique key for each device
硬體
ST-Link V2 用於燒錄
STM8S103F3P6 開發板
開發板電路圖
接線
ST-LINK和開發板的SWIM口是一一對應的, 直接連到開發板的同名PIN
ST-LINK-V2 STM8S103F3
SWIM -> SWIM
RST -> NRSt
VCC -> 3V3
GND -> GND
軟體
ST Visual Develop (STVD) 和 STVP(ST Visual Programmer)
https://www.st.com/en/development-tools/stvd-stm8.html
- STVD是開發工具, 當前版本是4.3.12
- STVP是燒錄工具, 當前版本是4.3.1
Cosmic C Compiler
https://www.cosmicsoftware.com/download_stm8_free.php
需要註冊, 安裝後需要註冊獲得 license 文件, 並放到安裝目錄下
開發工具庫 SPL
- ST Microelectronics 提供的原始SPL https://www.st.com/en/embedded-software/stsw-stm8069.html
- GitHub 上第三方維護的 STM8S103F3_SPL(推薦) https://github.com/CircuitDigest/STM8S103F3_SPL
開發
創建項目
打開 STVD
- File -> WorkSpace, New Workspace 輸入 Workspace 名稱, 項目名和路徑
- 創建項目, 註意在路徑中增加子目錄給項目, 否則項目會和Workspace生成到同一個目錄下
- 設置工具鏈: 選擇STM8 Cosmic, 指定toolchains到對應的目錄, 預設的目錄為
C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8
- 選擇晶元型號, 例如對於 STM8S103F3P6 選擇 STM8S103F3P, 然後點 Select 按鈕, 會出現在下麵的 Selected MCU 中, 然後點 OK
建好後能看到項目結構下有三個目錄Source Files, Include Files 和 External Dependencies, 在 Source Files 下創建了 main.c 和 stm8_interrupt_vector.c 這兩個文件
這時候直接按 F7 檢查是否能正確編譯
添加SPL
將下載的SPL的 inc 和 src 目錄解壓到項目目錄下, 目錄結構如下
.
│ main.c
│ stm8_interrupt_vector.c
├─Debug
├─Release
└─STM8S103F3_SPL
├─inc
│ stm8s.h
│ stm8s103_ADC.h
│ stm8s103_LCD_16x2.h
| ...
│ stm8s_uart1.h
│ stm8s_wwdg.h
│
├─src
│ stm8s_adc1.c
│ stm8s_awu.c
│ ...
│ stm8s_tim2.c
│ stm8s_uart1.c
│ stm8s_wwdg.c
│
├─stm8s103 Libraries
└─Tutorials
也可以SPL放到項目其他目錄下, 位置無所謂, 因為文件是否包含是通過STVD的項目配置控制的.
- 在STVD中, 在項目結構下創建 SPL Inc 目錄和 SPL Src 目錄
- 將STM8S103F3_SPL/inc下的.h文件添加到項目的 SPL Inc
- 將STM8S103F3_SPL/src下的.c文件添加到項目的 SPL Src
測試代碼
修改 main.c, 下麵的代碼會驅動板載LED(B5)閃燈
#include "stm8s.h"
void delay (int ms) //Function Definition
{
int i = 0;
int j = 0;
for (i=0; i<=ms; i++)
{
for (j=0; j<120; j++) // Nop = Fosc/4
_asm("nop"); //Perform no operation //assembly code
}
}
main()
{
GPIO_DeInit(GPIOB); // prepare Port B for working
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_SLOW);
while (1)
{
GPIO_WriteReverse(GPIOB,GPIO_PIN_5);
delay (100);
}
}
編譯
直接按 F7 編譯
Debug
設置
- 在ST Visual Develop中, 點擊 Debug instrument -> Target Settings
- Debug Instrument Selection 選擇 Swim ST-Link
- 勾選 Restart the application with Swim Off on stop debug
- Target Port Selection 保留預設的 usb://usb
- 勾選 Show the selected target notification at start of debugging session
- 點擊OK
開始Debug
- 點擊圖標欄中的藍色 D 圖標, 或者菜單中的 Debug -> Start Debugging 開始 Debug
- 彈出提示選擇Target, 如果有設置多個則選擇 Swim ST-Link, 點擊OK
- ST Visual Develop 會將程式寫入目標開發板, 然後進入Debug狀態, 程式停留在第一行
這時候就可以進行debug了
- 在代碼行號右邊點左鍵, 可以增加斷點
- 按 F5 往下繼續執行 (直到遇到斷點)
- 按 F10 單步運行, Alt + F10 彙編單步運行, Ctr + F10 運行到游標當前位置
- 按 F11 進入方法, Ctr + F11 跳出方法
退出Debug
點擊圖標欄或者菜單中的 Stop Debugging 退出 Debug
單獨燒錄
運行STVP
點擊 Configure -> Configure ST Visual Programmer, 選擇 ST-LINK + USB + SWIM + STM8S103F3
在STVP中, 打開項目 Debug 目錄下的 .s19 文件, 寫入 PROGRAM MEMORY
寫入後程式不運行的解決
寫完後ST-LINK亮紅燈, 並不會自動重啟, 此時在STVP中打開Configure對話框點擊一下確認, 就會變回藍燈, 程式就會開始運行
The device is protected解決方法
在STVP軟體中, 在"PROGRAM MEMORY"和"DATA MEMORY"界面用Ctrl
+R
讀出數據, 提示"The device is protected"
- 右側主面板上切換到"OPTION BYTE"頁
- 在表格的ROP選項, 選擇"read out Protection OFF"
- 菜單欄點擊 Program -> Current tab 保存配置, 配置寫入之後就解開防寫了
- 回到"PROGRAM MEMORY"和"DATA MEMORY"界面, 用
Ctrl
+R
就可以讀出數據了
參考
- 官方產品頁 https://www.st.com/en/microcontrollers-microprocessors/stm8s103f3.html
- STM8環境搭建和編譯, 燒錄 https://circuitdigest.com/microcontroller-projects/getting-started-with-stm8s-using-stvd-and-cosmic-c-compiler
- STM8的GPIO https://circuitdigest.com/microcontroller-projects/gpio-functions-on-stm8s-using-cosmic-c-and-spl-blinking-led-with-push-button
- https://www.instructables.com/STM8s-Breakout-Board-ST-Link-V2-Connection-Failure/