7. Stm32f407キー、外部割り込み
ハードウェアプラットフォーム:stm32f407ve
ソフトウェアプラットフォーム:win10(OS名:Microsoft Windowsの10エンタープライズ
OSバージョン:10.0.18363 N / Aビルド18363)
Keil5 5.26.2
HALライブラリのバージョン:2.14.0(現在は最新のをダウンロード)
時間:2020年2月13日
中国は、マニュアルや権威ガイドを参照する必要があるのこの部分を中断しました。
ここで私はこの事NVICに言及し、ネストされた割り込みコントローラ、すなわちネスト型ベクタ割り込みコントローラをベクタ立っています。このデバイスは(電話オペレーターがあなたを与えていない、とお使いの携帯電話は戦いの外にはないことを通信事業者に類似した現実の生活の中での権限、)すべてのSTM32割り込みを管理するために使用され、NVICは、割り込みのトリガを許可していません。割り込み、その後、どんなに割り込み設定、またはどのようにトリガに、なりませんCPU応答(割り込み)原因。
すべての割り込みを設定することが後に私たちのプログラムは、NVICの集合部分にバインドされているので、NVICのセットのこの部分に注意を払う必要があり、NVICは、割り込み優先順位を設定することが簡単で、割り込みイネーブルすることができます。中断終了またはこれに先制他の最初の応答ではNVIC割り込み管理カテゴリです。
Stm32f4割り込み優先順位は、それだけで16の割り込みの総数、より少数、より高い優先度を設定することができ、かなり特殊です。(設計におけるARMチップは、より優先順位(128又は256)が、より優先順位の手段より、より洗練された割込み優先度管理回路、より複雑なロジックをサポートすることができパワー、作られたデザインのトレードオフでSTM32が、基本的には)、16の優先割り込みを話すか、アプリケーションのほとんどを満たすために。
満たすためにのみ4ビット、4(バイナリ)ビット数16で表すことができ、その上にのみ4つの高優先度レジスタが設けられている割り込み優先、下位4ビットの一部に設けられている割り込み16無効(なぜが高い4を選択し、権威あるガイドブックを参照することができ、ST社は、プログラムの互換性の問題を検討しています)。
Stm32f4このシリーズはまた、優先順位プリエンプションの優先度と応答の優先順位、それらの二つまたは16の和に分割することができます。
私のプログラムはHAL_init割り込み優先順位の割り当てに初期化されます
私たちのプログラム設定の詳細については、16先取り優先権があります。
NVIC_PRIORITYGROUP_0:先取り優先ない先取り優先順位0ビット
subpriority 16レベル応答割り込みの4ビット
NVIC_PRIORITYGROUP_1:先取り優先順位レベル2割り込みプリエンプションのために1ビット
subpriority 8割り込みレベルの応答のための3ビット
NVIC_PRIORITYGROUP_2:先取り優先順位レベル4割り込みプリエンプションのために2ビット
subpriorityレベル4の割り込み応答のための2ビット
NVIC_PRIORITYGROUP_3:先取り優先8プリエンプティブ割り込みの3ビット
subpriorityレベル2の割り込み応答のための1ビット
NVIC_PRIORITYGROUP_4:先取り優先16プリエンプティブ優先権の4ビット
subpriority 0ビット無応答の優先
最後に、割り込みハンドラがあります
割り込みハンドラの原則:
- 会うの場合機能的には、それは早いほど良い、セマフォロックなどを取得するには、関数呼び出しの閉塞を引き起こし、ないブロックしていないはずです。
- 没有返回值,没有参数(这基本是所有中断函数的特点)。
- 尽量不使用printf函数,这个也是会引起阻塞的
- 要清除中断标志
我们的中断处理比较简单:
翻转led,因为按键是机械形变,所有会造成机械抖动,在电信号的部分产生抖动信号,所以实际按键的时候,并不是按一下,翻转一下led,有可能等保持不变,或者变化很多次。这都是电路抖动引起的,具体的话可以参考一下消抖部分(大部分都是延时处理,因为我觉得中断应尽量的快,就不使用别人的延时了,我也就不演示了哈,后期可以使用定时器去定时扫描按键的部分,讲到定时器的时候,我们说一下这个部分)。
github的工程源码:
https://github.com/zhaozhi0810/stm32f407_hal_keil5