Keil は STM32 プロジェクトを構築し、proteus を使用して LED 照明実験をシミュレートします

    STM32 MCU と 51 MCU には大きな違いがあります。構造に大きな違いがあるだけでなく、STM32 の方が複雑です。動作に関しても、STM32 の方がはるかに複雑です。51 MCU では手書きコードでピンを直接操作できますが、ただし、STM32 MCU ピンを操作する前に、クロックの有効化や GPIO ピンの初期化など、多くの初期化作業が必要です。

    以下に、STM32 シングルチップ マイコンの開発について簡単に紹介します。この記事はシミュレーションです。実際の STM32 シングルチップ マイコンは必要ありません。コンピュータに関連ソフトウェアをインストールして開発するだけで済みます。主にキールです。 mdkとプロテウス。

    ここでインストールする keil は STM32 シングルチップマイコンをサポートするバージョンであり、mdk のインストールが必要です。これは、mdk、抽出コード: 1234 をサポートする keil ダウンロード リンクです。そのインストールとクラッキングは keil-51 と似ています。クラッキングでは keygen.exe を使用して登録コードを生成します。インストール後、STM32 マイクロコントローラーをサポートするパッケージもインストールする必要があります: Keil.STM32F1xx_DFP.1.0.5.pack、ダウンロード上記のリンクからパッケージをダウンロードします。次のように、オフラインでインストールできます。

    keil ツールバーの [パック インストール] ボタンを選択し、ポップアップ ボックスで [ファイル] -> [インポート] を選択すると、ファイル選択ダイアログ ボックスが表示され、ダウンロードしたパック パッケージを選択すると、オフラインでインストールできます。

    STM32 プロジェクトを構築するには標準ライブラリが必要です。同様に、先ほどのダウンロード リンクには STM32F10x_StdPeriph_Lib_V3.5.0.rar が含まれています。解凍後の構造は次のとおりです。

 

    ここでは、標準ライブラリを使用して STM32 プロジェクトをビルドします。このプロジェクトには、プロジェクトに必要なヘッダー ファイルとソース ファイル、およびスタートアップ ファイルが含まれています。新しい STM プロジェクトを作成する前に、次のようなプロジェクト ファイル構造を準備します。

    ここでのコアは、CMSIS という名前でも構いません。個人的な習慣によれば、文字通りコア ファイルを意味します。ここでは、標準ライブラリの core_cm3.h および core_cm3.c ファイルをコピーする必要があります。パスは STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport です。

   Fwlibとはファームウェアライブラリの意味で、ここでは標準ライブラリのSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\srcのincフォルダとsrcフォルダをコピーします。

    Project は keil プロジェクトを保存するために使用され、後で keil に新しいプロジェクトを作成する場合、ここで保存場所を指定します。

    ユーザー、これがユーザー ファイルです。stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h ファイルをコピーし、

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template の下の stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h、system_stm32f10x.h (繰り返し)。

 

    Startup スタートアップ ファイルが保存されているフォルダー。ここでは、STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm の下に s で終わるすべてのファイルをコピーします (実際には 1 つだけが使用されます)。

   このようにして、プロジェクト フォルダーにファイルがないことを除いて、他の 4 つのディレクトリにファイルが存在します。

   ケイル新築

   keil-mdk を開き、新しいプロジェクトを作成し、その場所に準備したプロジェクト フォルダーを選択します。

     

    次のウィザードでは、ビルド ターゲットのデバイスを選択します。ここでは STM32F103C8 を選択しますが、シミュレーションのニーズに応じて他のデバイスも使用できます。

 

この新しいプロジェクトにはコンテンツがないため、リセットする必要があります。ツールバーの「エンジニアリング項目の管理」ボタン (3 色のブロック) をクリックします。

Project Targets がプロジェクト名に変更され、

グループ ここに Core、Fwlib、Startup、User という 4 つのグループとその中のファイルを追加します。先ほどの Core、Fwlib、Startup、User フォルダー内のファイルを選択します。構造は次のとおりです。

また、ユーザー ディレクトリに main.c ファイルを手動で追加し、ユーザー グループを右クリックして [既存のファイルをグループに追加] を選択する必要もあります。

最終的なプロジェクト ファイル構造は次のとおりです。

    main.c にコードを追加して、空のプロジェクトとしてコンパイルできるようにします。

#include "stm32f10x.h"

int main()
{

}

このとき、プロジェクトを直接コンパイルするとエラーが報告されますので、ヘッダファイルの検索範囲を設定する必要があります 具体的な操作は、ツールバーの魔法の杖(ターゲットのオプション)をクリックし、c/c++を選択しますポップアップ ボックスの [定義] に USE_STDPERIPH_DRIVER と入力し、その下にパスを含めます。 フォルダー Core、Fwlib/inc、ユーザー 3 つのディレクトリを選択し、手動で次を選択します。

    最後に、正常にコンパイルできます。

 

  シミュレーションには最後に HEX ファイルが必要なので、設定も必要です。[ターゲットのオプション] をクリックして出力に切り替え、[HEX ファイルの作成] チェックボックスをオンにします。

    STM32 マイクロコントローラー照明のコードはやや複雑で、主にクロックをオンにしてピン レベルを設定する必要があります。

#include "stm32f10x.h"

void Delay()
{
	unsigned int i, j;
    for(i = 0; i < 2000; i++)
	  for(j = 0; j < 110; j++);
}

void LED_Config()
{
      GPIO_InitTypeDef GPIO_InitStructure;                  // GPIO初始化结构体
	
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2时钟使能,这里单片机开启的是B口,所以对应RCC_APB2Periph_GPIOB,如果开启A口,这里对应RCC_APB2Periph_GPIOA
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      // 推挽模式
	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;             // 管脚B5作为输出
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //时钟频率
      GPIO_Init(GPIOB, &GPIO_InitStructure);                // GPIO初始化,开启GPIOB,如果要开启A或者C,改变这里的GPIOA或者GPIOC
}

int main()
{
    LED_Config();
	  while(1)
	  {
			GPIO_SetBits(GPIOB, GPIO_Pin_5);
			Delay();
			GPIO_ResetBits(GPIOB, GPIO_Pin_5);
			Delay();
	 }
}

    コンパイルでエラーが報告されない場合は、シミュレーションを開始できます。proteus では、以下に示すように LED 設計図を構築します。

 

   チップ STM32F103C8 を選択し、発光ダイオード LED-GREEN を見つけて、抵抗を追加し、接地します。シンプルな接続です。STM32 MCU は 51 MCU とは少し異なるようです。ここでは接続を処理し、メニュー バーの [デザイン] で [Power Rail Configuration] を選択し、GND と VCC/VDD の左側にリストされている部品を渡す必要があります。中央の [追加] をクリックすると、(右に移動) 矢印が右側に追加されます。

    設定する必要があるもう 1 つの重要な場所があります。それは、マイクロコントローラーの水晶発振器周波数です。設定されていない場合は、エラーが報告されます。

0x40010C00 で非クロックペリフェラルのレジスタにアクセスすると BUS_FAULT が発生する [U1_CM3CORE]
 

    この問題はシミュレーション中にのみ報告される可能性があり、コード内でクロック イネーブルを設定する必要があると記載されているところもありますが、ここでのコードは明らかに設定されています (RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); このコード )   この問題は非常に厄介です。最初、コードは main.c ファイルの内容を実行していないと思いました。実際にはそうではなく、水晶発振器の周波数ですが、周波数も設定されていません。 STM32CubeMX によって生成されたコードは問題なく実行されますが、これも非常に奇妙です。

    

    ここでの 50MHz は、コードで設定されているクロック周波数 GPIO_Speed_50MHz です。 

    最後に、シミュレーションはエラーを報告しません。 

     ここでは標準ライブラリを利用してSTM32プロジェクトをビルドするため、標準ライブラリのヘッダファイルとソースファイルを追加します ここでは、プロジェクトの特性に合わせて、Core、Fwlib、Project、Startup、Userフォルダを新たに追加しますターゲットに設定されているグループ Core、Fwlib、Startup、および User は同じ意味を持ちませんが、名前は同じです 最後に、手動でファイルを追加する必要がありますこれらのグループに。

    

おすすめ

転載: blog.csdn.net/feinifi/article/details/132261309