Proteus仿真STM32實例:簡易搶答器


幫微信好友調試了一個基於Proteus的搶答器程序,一晃距離上次使用Proteus,已經過去五六年了,當時還是仿真的51單片機。藉此機會,我們看一下,如果使用Proteus仿真STM32,本次測試實現的目標如下:

  • 使用Proteus搭建仿真的原理圖
  • 使用STM32CubeMX創建STM32F103R6的工程
  • 添加printf輸出重定向代碼,即串口1的打印輸出功能
  • 添加HAL庫的按鍵讀取函數
  • 點擊按鍵,來回切換LED的狀態

推薦閱讀:
STM32單片機最小系統詳解
STM32F103 串口的使用方法
STM32中精確延時函數的實現
利用STM32F103C8T6最小系統板點亮流水燈
4行代碼實現LED閃爍
使用STM32CubeMX求得CPU芯片溫度

安裝Proteus 8.9 Pro

在這裏插入圖片描述

安裝過程比較簡單,默認下一步即可,安裝完畢,記得先激活,再運行,具體激活方法,參考Crack文件夾中的激活說明。

注意:
其中到下圖步驟時,注意選擇“Custom”:

在這裏插入圖片描述

然後將“Installation Path”和“Program Data Path”選擇爲同一個目錄,否則容易發生閃退現象:

在這裏插入圖片描述

創建Proteus工程

  • 點擊“New Project”,創建新工程。

在這裏插入圖片描述

  • 隨意命名,如Keil_STM32F103RT6,並選擇安裝路徑。

在這裏插入圖片描述

  • 創建一個缺省的原理圖。

在這裏插入圖片描述

  • 不用創建PCB視圖。

在這裏插入圖片描述

  • 選擇“No Firmware Project”,不用創建代碼工程,我們將使用STM32CubeMX創建工程。

在這裏插入圖片描述

  • 完成Proteus工程的創建。

在這裏插入圖片描述

  • 完成原理圖的繪製如下。

在這裏插入圖片描述

  • 雙擊主芯片,設置屬性

在這裏插入圖片描述

Proteus使用過程中可能出現的問題

  • 用proteus仿真時,一直出現animating:0.00149(CPU load 70%),但就是沒結果?

模擬電路仿真有點慢,你可以把電路中的電阻改成數字式的。
雙擊電阻,在model type後邊有個下拉菜單,把analog改爲digital。

在這裏插入圖片描述

  • 如何改變原理圖大小?
    選擇System->Set Sheet Sizes。

在這裏插入圖片描述
在這裏插入圖片描述

  • 如遇到下面報錯該如何解決?

No power supply specified for net VSD in Power Rail Configuration.
No power supply specified for net VDDA in Power Rail Configuration.
No power supply specified for net VSSA in Power Rail Configuration.

解決辦法:
Step1:點擊工具欄上方的 Design 選項

在這裏插入圖片描述

Step2:點擊 “Configure Power Rails"
Step3:勾選左下角的 “Use default power rail connections?”
然後配置“Unconnected power nets”。

在這裏插入圖片描述

step4: 點擊 OK

  • 在使用Proteus調試串口時會遇到自帶的Virtual Terminal無法彈出窗口。

解決辦法如下:
在Simulation中止後,進入工具欄Debug->Reset Debug Pop up Windows,並在彈出窗口中選“yes”。 再次運行Simulation,可以發現窗口可以正常彈出。

  • STM32F103RT6對應的啓動文件爲?
    startup_stm32f10x_ld.s: for STM32 Low density devices

在這裏插入圖片描述

ld:低密度產品,FLASH小於64K
md:中等密度產品,FLASH=64 or 128
hd:高密度產品,FLASH大於128

  • 串口顯示亂碼
    可能晶振不對。

  • 如何旋轉元器件擺放方向?
    旋轉:Ctrl+M,或者:+ 或者 -

選中元件後依次按下鍵盤上的Ctrl+M,元件便完成水平方向180°;
小鍵盤的“+”鍵,可以使元件完成逆時針90°翻轉;
小鍵盤的“-”,使元件完成順時針90°翻轉。

STM32CubeMX創建工程

  • 使用STM32CubeMX創建主芯片爲STM32F103R6的工程。

在這裏插入圖片描述

  • 選擇晶振作爲外部高速時鐘。

在這裏插入圖片描述

  • 使能串口1。

在這裏插入圖片描述

  • 配置GPIO。

在這裏插入圖片描述

其中PA6與BTN2相連;PB7與LED相連。
在這裏插入圖片描述

  • 配置時鐘樹:

在這裏插入圖片描述

  • 配置工程設置,並生成代碼。

在這裏插入圖片描述

生成後的Keil工程目錄如下所示:

在這裏插入圖片描述

  • 添加串口1的重定向:

在這裏插入圖片描述

/* USER CODE BEGIN 0 */
#include "stdio.h"

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
    //具體哪個串口可以更改huart1爲其它串口
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1 , 0xffff);
    return ch;
}
/* USER CODE END 0 */
  • main.c文件中添加引用的頭文件:

在這裏插入圖片描述

  • main函數中添加如下實現代碼:

在這裏插入圖片描述

其中,int GetPress(void)函數實現如下:

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int GetPress(void)
{
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
    {
        HAL_Delay(10);//防抖
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
		{
			while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)//等待按鍵擡起。
			{;}
			return 1;
		}
		else return 0;
    }
    else    return 0;
}
/* USER CODE END 0 */

測試結果

在這裏插入圖片描述

資料下載

微信公衆號後臺回覆“Proteus仿真”,可以下載工程源碼。


喜歡請關注微信公衆號:程序員小哈
有問題可以加我微信號:chengxuyuanxiaoha(程序員小哈)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章