為幫助你精準掌握「Proteus 仿真 + STM32CubeMX+STM32F103R6」的協同開發流程,本文將聚焦該芯片的特性,從工具適配、分步實操到進階案例,用富文本格式清晰呈現細節,尤其適合新手入門 32 位單片機開發:
Proteus+STM32CubeMX 實戰:STM32F103R6 從配置到仿真全指南
STM32F103R6 作為入門級 Cortex-M3 內核芯片(32KB Flash+10KB RAM),性價比極高,搭配 STM32CubeMX 的圖形化配置與 Proteus 的虛擬仿真,無需實物即可完成基礎項目開發。本文以該芯片為核心,詳解 “LED 閃爍”“ADC 采集” 兩大典型案例,覆蓋從配置到仿真的完整流程。
一、工具準備與適配說明(針對 STM32F103R6)
1. 工具版本與資源包
工具 | 版本要求 | 關鍵適配操作 |
---|---|---|
STM32CubeMX | 6.0+ | 需安裝「STM32F1 Series」固件包(打開 CubeMX→Help→Manage Embedded Software Packs→搜索安裝) |
Proteus | 8.9+ | 必須安裝「STM32F103R6 元件庫」(百度搜索 “Proteus STM32F103R6 庫”,解壓后復制到 Proteus 的LIBRARY 文件夾) |
Keil MDK | 5.28+ | 安裝「STM32F1xx Device Pack」(Keil→Pack Installer→搜索 “STM32F1” 安裝) |
2. STM32F103R6 核心參數(選型與配置依據)
- 內核:ARM Cortex-M3,最高主頻 72MHz
- 存儲:32KB Flash(程序存儲)、10KB RAM(數據存儲)
- 封裝:LQFP64(64 引腳,教程中統一以此為例)
- 關鍵外設:1 個 12 位 ADC(10 通道)、2 個 UART、1 個 I2C、1 個 SPI、3 個通用定時器
- 供電:2.0V~3.6V(Proteus 仿真中統一接 3.3V)
二、基礎案例:STM32F103R6 控制 LED 閃爍(入門必練)
步驟 1:STM32CubeMX 配置 STM32F103R6
(1)新建工程并選擇芯片
- 打開 STM32CubeMX→點擊「Access to MCU Selector」
- 搜索「STM32F103R6」→選擇「STM32F103R6T6」(LQFP64 封裝)→點擊「Start Project」
(2)配置 GPIO 引腳(LED 接 PA0)
- 左側「Pinout & Configuration」→點擊引腳圖中的「PA0」→選擇「GPIO_Output」
- 右側「Configuration」→「GPIO」→「PA0」參數設置:
- Output Level:Low(初始低電平,LED 滅)
- Output Type:Push-Pull(推挽輸出)
- Speed:Low(LED 控制無需高速)
- Pull-up/Pull-down:No pull-up and no pull-down
(3)配置系統時鐘(STM32F103R6 必設)
- 左側「RCC」→「High Speed Clock (HSE)」→勾選「Crystal/Ceramic Resonator」(外部 8MHz 晶振)
- 右側「Clock Configuration」→按下圖配置(最終 HCLK=72MHz):
- HSE(8MHz)→ PLL Multiplier(×9)→ PLLCLK(72MHz)
- APB1 Prescaler(/2)→ APB1 時鐘 36MHz(不超過最大限制)
- 點擊「OK」保存配置
(4)生成 Keil 工程
- 左側「Project Manager」→「Project」:
- Project Name:LED_Blink_R6
- Project Location:選擇英文路徑(如
D:\STM32_Projects
) - Toolchain/IDE:MDK-ARM(Version 5)
- 「Code Generator」→勾選「Generate peripheral initialization as a pair of .c/.h files per peripheral」
- 點擊「GENERATE CODE」→生成后點擊「Open Project」打開 Keil
步驟 2:Keil 編寫 LED 閃爍代碼(適配 STM32F103R6)
- 在 Keil 工程左側「Project」→展開「Src」→雙擊「main.c」
- 在
main()
函數的while(1)
循環中添加代碼(利用 CubeMX 生成的 HAL 庫函數):c
while (1) {/* 翻轉PA0電平(LED亮滅切換) */HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); HAL_Delay(1000); // 延時1秒(HAL庫自帶毫秒級延時)/* USER CODE END 3 */ }
- 點擊 Keil 工具欄「Build」(錘子圖標)→確保編譯無錯誤(0 Errors)
- 配置 hex 輸出:點擊「Options for Target」(魔術棒)→「Output」→勾選「Create HEX File」→再次編譯,在「Output」文件夾生成「LED_Blink_R6.hex」
步驟 3:Proteus 搭建 STM32F103R6 虛擬電路
- 打開 Proteus→新建工程→輸入名稱「STM32F103R6_LED」→選擇「Create a schematic from scratch」
- 點擊右側「元件庫(P)」→搜索添加以下元件(適配 R6 芯片):
元件名稱 | 搜索關鍵詞 | 參數 / 連接說明 |
---|---|---|
STM32F103R6T6 | STM32F103R6T6 | 64 引腳封裝,核心芯片 |
紅色 LED | LED-RED | 長腳陽極,短腳陰極 |
電阻 | RES | 雙擊改值為 1kΩ(限流保護 LED) |
3.3V 電源 | POWER | 接 STM32 的 VDD 引腳(3.3V 供電) |
地 | GROUND | 接 STM32 的 VSS 引腳 |
- 電路連線(STM32F103R6 關鍵引腳必接):
- STM32 引腳:VDD(1、17 腳)→ 3.3V POWER;VSS(16、32、48、64 腳)→ GROUND
- STM32 PA0(4 腳)→ LED 陽極;LED 陰極→1kΩ 電阻→GROUND
- 關鍵!?STM32 BOOT0(62 腳)→ GROUND(運行模式,否則無法啟動程序)
步驟 4:導入 hex 并仿真
- 在 Proteus 中雙擊「STM32F103R6T6」芯片→「Program File」→瀏覽選擇 Keil 生成的「LED_Blink_R6.hex」→點擊「OK」
- 點擊 Proteus 底部「Play」按鈕(?)→觀察效果:LED 每隔 1 秒閃爍一次,仿真成功!
三、進階案例:STM32F103R6 ADC 采集電位器電壓(外設實戰)
1. CubeMX 配置 ADC(PA1 作為 ADC 通道 1)
- 打開 CubeMX 工程→左側「Pinout & Configuration」→點擊「PA1」→選擇「ADC1_IN1」(ADC 通道 1)
- 左側「ADC」→「ADC1」→「Configuration」:
- Mode:Independent ADC(獨立模式)
- Data Alignment:Right alignment(右對齊)
- Scan Conversion Mode:Disabled(單通道采集)
- Continuous Conversion Mode:Enabled(連續采集)
- 生成 Keil 工程(命名為 ADC_R6)
2. Keil 編寫 ADC 采集代碼
在main.c
中添加 ADC 初始化與讀取函數:
/* ADC句柄(CubeMX自動生成) */
ADC_HandleTypeDef hadc1;/* 讀取ADC值函數 */
uint16_t Get_ADC_Value(void)
{HAL_ADC_Start(&hadc1); // 啟動ADCHAL_ADC_PollForConversion(&hadc1, 50); // 等待轉換完成(超時50ms)return HAL_ADC_GetValue(&hadc1); // 返回12位ADC值(0-4095)
}/* main函數while循環 */
while (1)
{adc_value = Get_ADC_Value();voltage = (float)adc_value * 3.3f / 4095.0f; // 計算電壓(3.3V參考電壓)HAL_Delay(500);
}
3. Proteus 電路搭建(含 LCD1602 顯示)
- 新增元件:POT(電位器)、LCD1602、2 個 10kΩ 電阻(LCD 背光和對比度)
- 連線:
- PA1→POT 中間引腳;POT 兩端分別接 3.3V 和 GROUND
- STM32 PB0-PB7 接 LCD1602 D0-D7;PA2 接 RS;PA3 接 EN
- 導入 hex 仿真:拖動電位器,LCD1602 實時顯示 0-3.3V 電壓值
四、STM32F103R6 專屬問題排查
1. 仿真無反應?
- ??BOOT0 未接 GND:STM32F103R6 的 BOOT0(62 腳)必須接地,否則處于 “下載模式” 無法運行程序
- ??電源引腳未接全:VDD(1、17 腳)需同時接 3.3V,VSS(16、32、48、64 腳)需同時接地
- ??CubeMX 時鐘未配置:未啟用 HSE 晶振會導致芯片主頻異常,延時不準或無法工作
2. Keil 編譯報錯 “Flash 容量不足”?
- STM32F103R6 僅 32KB Flash,若代碼過大:① 刪除工程中無用的外設初始化代碼;② 關閉 Keil 的 “Debug Info”(Options→Output→取消勾選 Debug Information)
3. Proteus 搜不到 STM32F103R6?
- 確認庫文件已復制到 Proteus 的
LIBRARY
文件夾,重啟軟件后搜索 “STM32F103R6T6”(需完整型號)
五、STM32F103R6 開發技巧
- 資源規劃:32KB Flash 適合編寫中小型程序(如單外設控制),避免集成復雜算法
- 外設優先級:優先使用 UART、GPIO 等基礎外設,ADC 采集建議用單通道連續模式(節省資源)
- 仿真優化:Proteus 中關閉 “Animation Speed” 的 “Real Time”(菜單欄 Debug→Animation Speed→取消勾選),可提升仿真流暢度
實操提示:STM32F103R6 的引腳分布需特別注意(如 PA0 為 4 腳、BOOT0 為 62 腳),建議在 Proteus 中放大芯片圖標查看引腳編號,避免接線錯誤。后續可拓展 “UART 串口通信”“I2C 溫濕度采集” 等案例,逐步熟悉該芯片的外設用法!