STM8およびSTM32の開発の概要

1つの一般的な説明
1.1 STM8
STM8マイコンモデルはSTM8A、STM8L、STM8S 3つのシリーズに分割されています。
STM8A:自動車用途
STM8L:超低消費電力MCU
STM8S:標準シリーズ

1.2 STM32
- 72MHzの最大動作周波数F1シリーズまで
- STM32ファームウェアライブラリ(関数)マニュアル
STM32F107:DWC2 FS OTG
STM32MP157C-DK2:MPU

1.3 ST開発ボード種
ST公式うちはヌクレオボードは、ディスカバリーおよびボード評価ボード構成ローからハイに、価格が低レベルから高レベルにあります。
ヌクレオ:一般的にMCU端子へのリード線と同様に、(仮想STLINKのUSB経由)、シリアルポート、価格は100元に数十程度となります。
発見プレート:複数のUSB(USBとMCU)よりプレートヌクレオ一般、オーディオデコーダ、ヘッドフォンジャック。価格も100ポイント以上。
評価:機能は、最も完全な、一般的な周辺機器が描かれ、最も汎用性の高い、最高価格、数百から1000 + RMBです。

2構築するための開発環境
2.1 STM32CubeMX_V4.27.0
www.st.com/stm32cubemx

キューブダウンロードSTM32を、各チップのモデルパックをサポート
https://blog.csdn.net/linxi8693/article/details/88229115

2.2 IAR8.30.1
8.30組込みワークベンチIAR
https://m.baidu.com/ala/c/m.3322.cc/mip/40168.html

。3リファレンスマニュアル
3.1
では検索エンジン、キーで<STM32中国のリファレンスマニュアル>、[検索" 「オープンIT。ライブラリBaiduの

3.2 Baiduは知っている
英語STM32 STM公式サイトでデータシートデータシートをダウンロードする方法
のBaiduの最初のステップを」「、にクリックした最初のリンクSTの公式ウェブサイトを
入力して、ディレクトリ製品・マイクロコントローラ(MCU)に第二段階のクリックをチップ選択されたページ

第3のステップは、あなたがチップの詳細ページに、対応するチップのモデルを見つけます。私はSTM32F103ZE例に来ました。

第四段階、断っチップの詳細ページには、リファレンスマニュアルは、ダウンロードページにジャンプします見つけます。

第五の工程は、完全にPDFのダウンロードをクリックしてください。

 

ADC 4
4.1 TRGO(トリガ出力)原理
TIM1が(PWMモードとして設定する必要があり)期待オーバーフローイベントTRGO各カウントを生成します。
イベントソースTIM1について、TRGOは、から選択するいくつかのオプションADCのための唯一のRESETイベントがTRGOを生成したデフォルトの状態が、そうでもトリガーた場合、外部外部トリガイベントTRGO ADCを選択し、UPDATEイベントに設定する必要がありますがありますが、また、TIM-1に覚えていますイベントのTRGO構成は、それがADCキャプチャ機能をトリガしません。

次のようにサンプルコードは:
TIM_ITConfig(TIM1、TIM_IT_Update、ENABLE);
TIM_SelectOutputTrigger(TIM1、TIM_TRGOSource_Update);

4.2のURL
STM32F0タイマートリガADC、マルチチャンネルのサンプリング、DMA転送データの構成
http://blog.csdn.net/xuezhimeng2010 / Articleこの記事は、/詳細/ 15157911た

5 NVIC
5.1割り込みサービスルーチン
サービスルーチン名割り込みSTM32をカスタマイズすることはできませんが、あなたが名前は次のように参照することが、定義されている正式なファイル名を使用する必要があります。

ドライバ\ CMSIS \デバイス\ ST @ \ STM32L0xx \ソース\テンプレート\ IAR \ startup_stm32l061xx.s
stm32f10x_it.c年のコース、特定のコンテンツ・サービス・プログラムや、自分の書き込み、。

5.2 BASEPRI
すべての割り込みで閉じないFreeRTOSは、クリティカルセクションに入るが、優先度マスクの使用はBASEPRI(= configMAX_SYSCALL_INTERRUPT_PRIORITY)を登録し、部分的に中断閉じ、このレジスタへの9までの(優先度の決定を表すビット)。これは、優先度マスクされたしきい値を定義します。それは値に設定されている場合、この優先度にすべての数値以上の割り込みがターンオンされる値(より高い優先順位番号、優先度の低いです)。0に設定されている場合は、割り込みは0がデフォルト値で、オフにしないされていません。

コードの入退室FreeRTOSミッションクリティカルセクションは、主に演算レジスタBASEPRIによって達成されます。クリティカル領域より大きくを入力するか、コードのクリティカルセクションが中断干渉されないが、PendSVタスク切り替えと割込み機能のSysTickタイマーチック割り込みを達成するようBASEPRIは、優先割り込み全てのマクロ定義を閉じ等しいconfigMAX_SYSCALL_INTERRUPT_PRIORITY割り込み最も低い優先度が定義されていますので、コードのクリティカルセクションの実行中に、このタスクは、他の優先度の高いタスクによって中断されることはありません。BASEPRI再登録操作開いているクリティカルセクションを出閉じ割り込み(ここでは、優先順位の高い割り込みのないFreeRTOS管理を考慮していない)です。

Cortex-Mコア「割り込み優先度レジスタは」の最上位ビット(MSB)と整列しています。優先順位は4レジスタ使用STM32は、割り込み優先順位ビットに4ビット4、ビット5、ビット6、ビット7ビットレジスタ。残りのビット0〜ビット3は、任意の値に設定することができます。だから、割り込み優先順位はFreeRTOSのシフト操作が計算されます。

 マイクロコントローラのCMSISと異なるサプライヤーは、割り込みがライブラリ関数の優先順位を設定することができます提供します。ライブラリ関数のいくつかのパラメータは、最下位ビットが整列使用して、正しく設定を使用するときに、手動アプリケーションライブラリ関数に相談する必要がありますので、ライブラリの機能のいくつかのパラメータは、最上位ビット整列を使用する場合があります。

あなたは、マクロconfigMAX_SYSCALL_INTERRUPT_PRIORITYとFreeRTOSConfig.hに設定することができます
値configKERNEL_INTERRUPT_PRIORITY。(:のhttp://openmcu.net/post/kernel-config.htmlこれら2つのパラメータにはマクロ章、URLを参照することができます)。どちらのマクロは、Cortex-Mコア自体を設定する必要があり、最上位ビットが整列します。たとえばMCUはconfigKERNEL_INTERRUPT_PRIORITYコードであり、5が設けられて、優先順位が4レジスタ使用
の#define configKERNEL_INTERRUPT_PRIORITY(<< 5(8-4))

公式FreeRTOS実証ルーチンのそれぞれについて、これもFreeRTOSConfigありますマクロconfigKERNEL_INTERRUPT_PRIORITYに最も低い優先度を設定する際の.h、なぜあなたはの理由255(1111 1111B)に設定したいです。このように、指定された値を使用する理由は、FreeRTOSカーネル(ライブラリの関数インタフェースサードパーティ製を使用していない)直接ほとんどの図書館よりのCortex-Mコア・ハードウェア上で動作を実行するようにしていること、です。しかし、今、私たちは最初のCortex-Mライブラリ関数プログラムを開発しました。

5.3 IPR
構造体のtypedef
{
    vu32 ISER [2];
    U32 RESERVED0 [30];
    vu32 ICER [2];
    U32 RSERVED1 [30];
    vu32 ISPR [2];
    U32 RSERVED2 [30];
    vu32 ICPR [2];
    U32 RSERVED3 [ 30]。
    IABRのvu32 [2];
    U32 RSERVED4 [30];
    vu32 IPR [15];
} NVIC_TypeDef;

NVIC IPR [15]:優先割り込みレジスタ、割り込み優先制御レジスタ群。STM32は、密接にこのレジスタに関連するグループ化割り込みます。そのため60以上のSTM32に中断までの、STM32は、優先度の割り込みを決定するために、割り込みパケットよう措置をとります。IPRは32ビットレジスタでレジスタ15、各マスク可能割り込みが8ビットを占め、これは15x4 = 60マスク可能割り込みの総数を表すことができます。[31:24]、[23:16]、[15:8]にIPR [0]、[7:0]は、それぞれ割り込み3-0、60の外部割込みの合計に相当します。そして、各マスカブル割り込みは8ビットがすべて高いだけ4を使用しないで占領しました。これは4つのサブプリエンプティブ優先順位とに分割されています。これらの2つの優先度は、SCB-> AIRCR(システム制御ブロック、に従って決定されるアプリケーション割り込みおよびリセットレジスタ) パケットを割り込み設定。

STM32短時間の中断パケット:8が定義された:STM32割り込みが登録BIT10 SCB-> AIRCRで4〜5 0のグループに分けました。表5-1に示したように。
表5-1 AIRCR割り込みグループ設定テーブル

グループ

AIRCR [10:8]

ビット[7:4]流通

配分結果

0

111

0:4

0先取り優先順位、優先度に応じて4

1

110

1:3

先取り優先順位、優先度に応じて3

2

101 

2:2

2先取り優先順位、優先度に応じて、2

3

100 

3:1  

3先取り優先順位、優先応答

4

011

4:0

4先取り優先順位、優先度に応じて0

この表を使用すると、はっきりと配置関係グループを見ることができます0-4たとえば、グループがその時点ですべての60個の割り込み各4つの優先順位の高い割り込みレジスタが3つの最高プリエンプションで、0×03に設定され、対応します優先順位、優先度の低い応答。各割り込み先取り優先順位は、0から7まで0または1の応答の優先順位を設定することができます。先取り優先順位レベルは、値が小さいほど高い優先度を表し、レスポンス優先順位よりも高くなります。

そして特定ネストされたルールの優先順位を決定する:
サービス、割り込みネスティング構成割り込みプリエンプト低優先度の割り込みCAN割り込み(1)は、より高い先取り優先;
(N)の(2)は、2つの同一のプリエンプションを割り込みは、それらの間に入れ子構造であることはできませんが、発生する割り込みレベルの割り込みSTM32最初のサブ高優先度に応じて、
(3)場合の2つ(N)第一のSTM32に応じて優先度レベルと子同じ優先順位プリエンプション中断、実行さ誰である誰でも発生する割り込み割り込みベクタ・アドレス・ローに対応する割り込みチャネル。

SHPRxプライオリティシステムハンドラ5.4レジスタ
-15から-1(SHPRxの優先制御)の割り込み皮質M4システム、0から63までの周辺割り込み(IPRによる優先制御)。

32ビットレジスタにSHPR1 SHPR3,3は、8ビットのそれぞれは割込み優先度を設定し、8 configPRIO_BITS、ライト無効他のビットとして高い使用12の割り込み構成可能システム、の合計は、0が読み出されます。-3の3つのデフォルト割り込み優先順位があり、-2、-1。
割り込み図5-1のCortex-Mの配信


ビット割り当て図5-2 SHPRx登録


5.5サンプルコード
/ *割り込みプライオリティレジスタを* /
静的INT command_dump_ipr(cli_node_t * CMD、INT ARGC、チャー** ARGV)
{
    CONST揮発性uint8_t * CONSTのpcInterruptPriorityRegisters =
        (CONST揮発性uint8_t * CONST)0xE000E3F0。
    私はuint8_t。

    console_puts_lite( "" CR_LF)。
    console_puts_lite( "configPRIO_BITS =%dの" CR_LF、
            configPRIO_BITS)。
    console_puts_lite( "configKERNEL_INTERRUPT_PRIORITY = 0X%02X" CR_LF、
            configKERNEL_INTERRUPT_PRIORITY)。
    console_puts_lite( "configMAX_SYSCALL_INTERRUPT_PRIORITY = 0X%02X" CR_LF、
            configMAX_SYSCALL_INTERRUPT_PRIORITY)。
    console_puts_lite( "" CR_LF)。

    / *(4-7、8-11、12-15)* /
    console_puts_lite(「システムハンドラ優先度レジスタ」CR_LF)。
    以下のために(私は= 0; I <12; I ++){
        console_puts_liteは( "PRI_%D - 0X%02X" CR_LF、(4 + I)、SCB-> SHP [I])。
    }
    console_puts_lite( "" CR_LF)。

    console_puts_lite(「ユーザー割り込み優先度レジスタ」CR_LF)。
    {(; I <(16 + IRQ_NUMBER_MAX)は、i ++ iは= 16)についての
        console_puts_lite( - CR_LF、 "0X%02X IRQ%dの"
                ; - (I 16)、pcInterruptPriorityRegisters [i])と
    }
    0を返します。
}
DECLARE_CONSOLE_COMMAND(dump_ipr、command_dump_ipr、NULL);

6タイマー
6.1捕获模式
STM32キャプチャモード入力は、入力信号が主に測定期間に使用され、その後、周波数波形を計算しています。通常の状況下で。インプットキャプチャモードのみ測定期間は、提供STM32入力キャプチャモードとして立ち上がりまたは立ち下がりを検出します。エッジはTIMx-> CCR1(キャプチャ/コンペアレジスタへのタイマの現在値を保存し、検出されたとき ) に登録します。割り込みでこのレジスタを読み出すと、立ち上がりまたは立ち下がり2の間のパルス数を取得することができ、その後、タイマーに応じてクロック波形の周期を計算します。
あなたがなり、デューティ・サイクルを測定したい場合は中断にエッジを再設定します。
0xffffとのタイマカウンタ最大値。

6.2 TIM_Prescaler、TIM_PeriodとTIM_ClockDivision区別
TIM_Prescaler(PSC):TIMの値は分周クロックを指定するために使用され、すなわち、それは分周単に各タイマ間隔であるための1つのカウントであるTIMクロックに遠いですどのくらいの。
TIM_Period(ARR):それはタイミング・サイクルを制御します。たとえば、更新イベントTIM_Period(TIM1_ARR)の後に999を提供し、カウンタは1000(999 + 1)、ゼロにカウント値をカウントアップ。
TIM_ClockDivision:クロック分周、0の通常値。

48MHzのクロック周波数が仮定される、すなわちTIM_Prescalerプリスケーラ値48000を(-1)を指定した場合、動作周波数を介して周波数分割も1kHzのとして知られている、48 000 1000で後に、カウント値が指定されている場合、すなわち、次に1000 TIM_Period (-1)、それは、正確に1秒です。

例えば、公式のルーチンは、出力は36kHz(約)を実現するためにTIM3を使用しています。
1)まず、TIM3の規定は、サイズTIM_Prescalerを描くことができる24000000Hz、下で実行します
PrescalerValue =(uint16_t)(SystemCoreClock / 2400万) - 1;
2従ってTIM_Prescaler。

2)次に、走行がキロヘルツの36 TIM3にあります
。TIM3 TIM3カウンタクロック周波数= /(ARR 1 +)= 24メガヘルツ/ 666キロヘルツ= 36
を得TIM_Period 666から1まで。

3)デューティサイクルパラメータTIM_Pulse変更することで変更する
TIM3チャネル1デューティサイクル=(TIM3_CCR1 / TIM3_ARR)* 100 = 50%
TIM3チャンネル2デューティ・サイクル=(TIM3_CCR2 / TIM3_ARR)* 100 = 37.5%
TIM3 Channel3デューティサイクル=(TIM3_CCR3を/ TIM3_ARR)×100 = 25%
TIM3 Channel4デューティ・サイクル=(TIM3_CCR4 / TIM3_ARR)* 100 = 12.5%

6.3チャンネルキャプチャモード
我々は、手動でダブルエッジを達成するために持っているので、STM32は、ダブルエッジキャプチャをサポートしていない、である、私たちが中断することができます割り込みが変更する割り込みエッジ、立ち上がりエッジ割り込みに編集反し立ち下がり、立ち上がりエッジであれば、割り込み割り込み立ち上がりエッジまたは立ち下がりれる割り込み選択検出。

チャネルキャプチャモードの6.4ペア
stm32f10x_it.c @
機能割り込みTIM波形キャプチャ機能、同じ(TIM5)割り込み、2つのチャネルがあり、周波数とデューティサイクルの計算は重要な機能です。

図6-1の立ち上がりエッジをキャプチャします

図6-2キャプチャマイナス


URLの6.5
STM32汎用タイマインプットキャプチャ研究ノートとして
http://www.2cto.com/kf/201707/660425.html

STM32F4_TIM入力波形キャプチャ(パルス周波数、デューティ・サイクル)
http://www.cnblogs.com/ strongerHuang / P / 5668361.html

ダブルエッジキャプチャ
STM32のPWM入力キャプチャ入力モード
http://blog.csdn.net/u012271722/article/details/42173823

学習IR
およびSTM32キャプチャモード入力は、データをDMA提供受け取る
//ブログ:HTTPを。 csdn.net/jdh99/article/details/23224041

6.6略語
ARR:自動リロードレジスタ
BKP:バックアップ
CCER:キャプチャ/いつでも立ち上がりで登録を有効にし、キャプチャ割り込み割り込み、現在の立ち上がりまたは立ち下がりエッジのキャプチャを決定するために使用されますが、変化に比較キャプチャキャプチャまたは沿って下降
CCR:割り込みが発生すると、キャプチャ/レジスタを比較し、CNTが時間を決定するために使用され、レジスタの現在の値を表し、PWM出力レジスタのデューティ比、関数TIM_SetCompare1ある(...)
CNT :カウンターの登録は、自動的に1クロックサイクルごとのタイマーをカウントするために使用され、時間がタイミングを容易にするために、クリアするために必要な
OC:;比較出力PWM信号を出力する(アウトプットコンペア)とCCRレジスタCNTを比較するには、出力が小さい出力0以上、1以上である
PSC:登録presacler、プリスケーラレジスタの
RCRを:繰り返しカウンタレジスタは、繰り返しが登録
SR:ステータスレジスタ決定されない割り込み入力キャプチャのために

7。USART
7.1エンプティ割り込み
受信データが検出された後1時間のデータバス上のバイトは、データは、アイドル割込みトリガを受信していません。RXNEの設定時間は、無料のバスを検出します。
2.アイドル割り込みは、データのバイトがトリガされる割込みハイ(アイドル)状態のアイドル状態の後に受け入れられています。アイドルが中断されていません、トリガが低レベルとなっている場合には、(ストップビット)バイトを上昇した後のアイドル割り込み(トリガブレーク割り込み)ではないと言うことは正確でなければなりません。

URLの7.2
STM32シリアルアイドルストップデータ受信
http://blog.csdn.net/bobbat/article/details/39813647

8 USB
8.1 USBasp -純粋なソフトウェア実装USB1.1プロトコルから
USBasp -アトメルAVR用USBプログラマコントローラ
HTTPS:/ /www.fischl.de/usbasp/

8.2略語
MDATA:複数DATA0およびDATA1に切換機構に対応するデータ、(ep_kind可能)EP-ビスバッファUSB
PMA:パケットバッファメモリ領域
USB KVM:KVMキーボード(キーボード)、ディスプレイ(ビデオ)、マウス(マウス)の略語。KVMポートは、25ピンでインタフェースVGAインターフェイスとUSBあって
usofを:マイクロフレームの開始、125us

8.3 URLの
STM32 USBの問題の概要
http://m.eeworld.com.cn/ic_article/268/27882.html

割り込み処理の更新- (送信と受信を含む)STM32_USB完全にダブルバッファリングを
http://m.eeworld.comを。 CN / ic_article / 268 / 32494.html

STM32 USBデータ受信機構
https://m.baidu.com/sf_edu_wenku/view/5e64fe5776c66137ee0619ea

9つのURL
9.1 GCCコンパイラ
STM32CubeMX MakefileのGCCプロジェクト
https://www.ba0sh1.com/blog/ 2015年2月23日/ stm32cubemx-GCC-のMakefile /#1062-詳細

STM32移植FreeRTOSのためMDK 9.2
移植FreeRTOS STM32F103プロセス全体に
http://m.blog.chinaunix.net/uid-22072065-id-5196763。 HTML

MDKでSTM32移植のFreeRTOS
https://wk.baidu.com/view/06b6a1a40029bd64783e2c6f?ivk_sa=1023194j

10一般的な略語
AIRC:アプリケーション割り込みおよびリセットの登録
BSP:用ボードサポートパッケージ変更
CmBacktrace:Cortexマイクロコントローラ・バックトレース、ARMのためにありますCortex-MシリーズMCUエラーコード自動追尾、ポジショニング、オープンソースのライブラリの自動エラー原因解析。
CubeMX:マイクロコントローラGUI
ECC-USB:USB eCosの中心の
ガーナGHSの銀行:グリーンヒルズ・ソフトウェア、提供GHSハイパーバイザー(のようなQNXハイパーバイザー)、楽器RTOS、MCU開発IDE専用の
IAR:2つの文字は創業者の名アンダース・ラングレンから取られた後、手紙、スウェーデンIngenjörsfirmanアンダース・ラングレン、意味アンダース・ラングレンのエンジニアリング会社
IAR ICF:ILINK設定ファイル
MSP:用MCUの特定のパッケージ変更
NVIC:ネストされたベクタ割り込みコントローラ
NVIC IPR:割り込み優先度レジスタ
RCC:リセットとクロック制御
SHPRx:システムハンドラ優先度レジスタ
ST AMG:アナログ・グループとMEMS、アナログおよびMEMS部門(現在はアナログ、MEMSおよびセンサーグループに変更)
STM32H7:高パーフォレーションのCortex-M7
STM32WB:BLE5ワイヤレスシリーズ0.0
PendSV:割り込み要求は、他の割り込み応答が必要とされない場合、システムは、コンテキストスイッチを実行することを余儀なくされますPendableサービス
トリガーされるSVC命令によってスーパーバイザコール、FreeRTOSは、タスクスケジューラを起動するためにそれを使用します。SVCallを
USBのBHリセット:ビガーのハンマーかブラッドHosler、表示ウォームリセット、USB 3.0の仕様は、他の場所で同じリセットのタイプのいくつかの場所で「ウォームリセット」と「BHリセット」を呼び出し、なぜあなたは混同されることがあります。「BH」リセットは「ビッグハンマー」にリセットするために立つことになったが、それはまた、「ブラッドHosler」の略です。ブラッドは、USB 3.0バス仕様が開始された直後に死亡した、と彼らは彼の後にリセットに名前を付けることにしました。提案は仕様が確定して直前に行われ、その文言は、ビット矛盾してました。

公開された124元の記事 ウォン称賛51 ビュー320 000 +

おすすめ

転載: blog.csdn.net/zoosenpin/article/details/77629656