stm 32標準外設庫使用詳細

6290 ワード

転載は出典を明記してください.http://blog.csdn.net/lbl1234
コードをダウンロード
     stm 32標準外付けライブラリはstm 32の全シリーズのチップの外付け駆動であり、これがあれば、私達の開発stm 32を大幅に加速できます.    まず、st社のウェブサイトから最新のstm 32標準外設庫をダウンロードし、本文を書く時の最新バージョンはV 3.5.
    このzipファイルを解凍して、次のフォルダとファイルSTM 32 F 10 x_を取得します.StdPeriph_Lib_V 3.5\   _httmress   Libries   プロジェクト   ユーティリティ   Release_Notes.   stm 32 f 10 x_stdperiph_lib_m.chm
    このうちLibriesはライブラリのソースコードを含み、Projectはstm 32の各外設の使用例と工事テンプレートを含み、Utilitiesはst社の評価ボードを使用した例であり、stm 32 f 10 x_stdperiph_lib_m.chm標準の外付けライブラリの使い方を教えてください.
プロジェクトディレクトリ構造    32桁のマクロプロセッサを使うつもりですから、小さいプロジェクトではないはずです.だから、工程のカタログも計画を立てるべきです.ここで私が使っているカタログの構造を紹介します.プロジェクト名をtemplateと仮定して、templateというフォルダを作ってください.このディレクトリの下には3つの固定フォルダdocがあります.Src、include、docはプロジェクト関連の資料ファイルを保存します.srcソースコードを入れて、srcの下で機能モジュールごとに一つのフォルダを作ります.includeは各モジュールが使う公共ヘッダファイルを置きます.outputには2つのサブフォルダobjとlistが含まれています.
template\   doc   src   include   out put\obj            \リスト      ライブラリコードを整理する    Libriesの下のCMSISフォルダの多くのコードはコンパイラとチップと関連しているため、フォルダの多さと深さが大きいため、工事のメンテナンスには不利です.実際には一つのプロジェクトは固定のコンパイラとチップを使っていますので、ライブラリを整理する必要があります.    srcでlibstm 32ディレクトリを作成します.    1.Libries\STM 32 F 10 x_StdPeriph_Driver\下の内容をlibstm 32ディレクトリにコピーします.    2.libstm 32ディレクトリの下にcmsisフォルダを作成し、Libries\CMSIS\CM 3\CoreSupport\下のcore_cm 3 c、core_cm 3.hLibries\CMSIS\CM 3\DeviceSupport\ST\STM 32 F 10 x\下のstm 32 f 10 x.h,system_stm 32 f 10 x.c,system_stm 32 f 10 x.hはcmsisフォルダにコピーされます.    3.あなたが選択したチップの種類に応じて、Libries\CMSIS\CM 3\DeviceSupport\ST\STM 32 F 10 x\startup\arm\で対応するスタートファイルをcmsisフォルダにコピーします.ここでコピーしたのはstartupです.stm 32 f 10 x_hd.s(大容量stm 32チップの起動ファイル).
   このライブラリのファイルについて簡単に紹介します.    Libries\STM 32 F 10 x_StdPeriph_Driver\下の内容がよく分かります.stm 32の各外装モジュール駆動コードです.    misc.hとmisc.cはCM 3カーネルに関するNVICとSysTickの駆動コードです.       Libries\CMSISの下には何がありますか?cmsis英語フルネーム:Cortex Microcontroller Software Interface Standardは、Cortexシリーズのプロセッサハードウェア抽象層であり、cotexカーネルのソフトウェアインターフェースとして理解できる.    コールバックcm 3 c、core_cm 3.h    これらのディレクトリ名はCoreSupportであり、この二つのファイルはCM 3カーネルサポートファイルであり、他のCM 3カーネルを使ったチップも使えます.STm 32とは限らないです.この二つのファイルは設定CM 3カーネルを取得し、いくつかのカーネルレジスタを構成する.    stm 32 f 10 x.h,system_stm 32 f 10 x.c,system_stm 32 f 10 x.hとstartup_stm 32 f 10 x_hd.sはDeviceSupportディレクトリの下で、これらのファイルは具体的なチップと関連があります.つまりstm 32チップのサポートファイルです.ここでstm 32 f 10 x.hは標準外設定ライブラリの入り口であり、標準外設定ライブラリを使用するコードには必ずこのヘッダファイルが含まれています.system_stm 32 f 10 x.c,system_stm 32 f 10 x.hの2つのファイル提供関数は、STm 32チップを初期化するために使用され、PLL、システムクロック、flashインターフェースを内蔵するように構成されています.startupstm 32 f 10 x_hd.sは大容量STm 32チップの起動ファイルです.    建設工事       keil MDKを使って(私は4.12版を使います)templateディレクトリの下で工事を創立して、工事名はtemplateです.STM 32シリーズのチップを選ぶなら、どちらでも構いません.(STM 32 F 101 RCを選んだのです.私の板はこのチップを使っています.)次は起動コードをプロジェクトフォルダにコピーするかどうかNoを選択します.標準外付け倉庫には既に起動コードがあります.    UV 4におけるproject windowのトップディレクトリ名をtemplateに変更し、最初のグループ名をlibstm 32に変更します.libstm 32ディレクトリの下にあるすべてのファイルをプロジェクトのlibstm 32にロードします.    srcの下でinitディレクトリを作成してシステム初期化コードを置く.Project\STM 32 F 10 x_StdPeriph_Template\下のstm 32 f 10 x_it.cはinitフォルダにコピーして、stm 32 f 10 x_t.h,stm 32 f 10 x_conf.hはincludeフォルダにコピーされます.    stm 32 f 10 x_t.c,stm 32 f 10 x_it.hはサービスプログラムを中断するファイルです.stm 32 f 10 x_conf.hは標準外設庫の配置ファイルで、工事中に必要でない外設について、中に含まれているヘッダファイルを注釈することができます.ここでは先にstm 32 f 10 x_だけを残しておくことを提案します.gpio.h,stm 32 f 10 x_rcc.h,misc.h,何を使って何を開けばいいですか?このようにコンパイルすれば速くなります.もちろん都留もできます.
stm 32標準ライブラリを使う    実は、stm 32標準外設庫の使用はstm 32 f 10 x_にあります.stdperiph_lib_M.chmのHow to use the Libraryの一節に説明があります.その中の手順を羅列します.1.選択したチップに基づいて、Libries\CMSIS\CM 3\DeviceSupport\ST\STM 32 F 10 x\startup\armの起動コードをプロジェクトに加えます.このステップは上ですでにやりました.2.stm 32 f 10 x.hの66-73行で、選択したチップタイプによって、相応の注釈を削除します.ここでSTM 32 F 10 X_を抜きます.HD行のコメント(大容量STm 32チップ).3.105行のUSE_を取り除く.stdPERIPH_DRIVERコメントは、stm 32標準外付けライブラリを有効にします.4.system_STm 32 f 10 x.cの110-115行は、選択されたチップマスタによって対応する注釈を削除し、デフォルトSYSCLK_FREQ72 MHzの注釈が削除されました.あなたのチップの主周波数が72 MHzなら、修正しなくてもいいです.ここで私のチップは36 MHzです.SYSCLKを注釈してください.FREQ72 MHz、SYSCLK_を除く.FREQ36 MHzコメント
走馬灯プログラム   今はstm 32標準の外付けライブラリが使えます.簡単な走馬灯プログラムで説明します.
initディレクトリの下にシステムの入口としてmain.cを作成します.
srcの下でbspディレクトリを作成して、ボードレベルのサポートコードを置いて、led.cを作成します.led.h.
コードは以下の通りです.led.h
#ifndef _LED_H_
#define _LED_H_

#include 

#define LED_0     0
#define LED_1     1
#define LED_2     2

void led_init(void);
void led_on(uint32_t n);
void led_off(uint32_t n);

#endif

 
led.c
#include "stm32f10x.h"
#include "led.h"

void led_init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void led_on(uint32_t n)
{
 switch (n)
 {
  case LED_0:
   GPIO_SetBits(GPIOC, GPIO_Pin_6);
   break;
  case LED_1:
   GPIO_SetBits(GPIOC, GPIO_Pin_7);
   break;
  case LED_2:
   GPIO_SetBits(GPIOC, GPIO_Pin_8);
   break;
  default:
   break;
 }
}

void led_off(uint32_t n)
{
 switch (n)
 {
  case LED_0:
   GPIO_ResetBits(GPIOC, GPIO_Pin_6);
   break;
  case LED_1:                            
   GPIO_ResetBits(GPIOC, GPIO_Pin_7);
   break;
  case LED_2:
   GPIO_ResetBits(GPIOC, GPIO_Pin_8);
   break;
  default:
   break;
 }
}

 
このコードのピンは板によって修正が必要ですが、構造は同じです.
メール.
#include "led.h"

static void delay(uint32_t ms)
{
 uint32_t count = 8000;
 while (ms--)
 {
  while (count--);
  count = 8000;
 }
}

int main(void)
{
 led_init();
 
 for (;;)
 {
  led_on(LED_0);
  led_off(LED_1);
  led_off(LED_2);
  delay(1000);

  led_off(LED_0);
  led_on(LED_1);
  led_off(LED_2);
  delay(1000);

  led_off(LED_0);
  led_off(LED_1);
  led_on(LED_2); 
  delay(1000);
 }
}
 
    projectでinit,bspグループを作り,各種コードを加入する.プロジェクトのOptionsにc/c+タブのInclude Pathsに追加します.\include;src\libstm 32\cmsis;.\src\libstm 32\inc;.\src\bsp;    OutputタブSelect Folder for Objectで選択します.\output\obj.    ListingタブSelect Folder for Listingsの中から選択します.\out put\list.    Debugタブはuse ULINK Cortex Debuggerを選んで、Run to main()はフックを打って、この歩はみんなは自分の手の上の本物そっくりな器によって異なっている選択をすることができます.    コンパイル実行    本論文のコード:http://download.csdn.net/source/3448543
    --終了--