1.ソフトウェアおよびエンジニアリング環境の構築
- 紹介しません。既製の
リンクを直接使用できます:https
://pan.baidu.com/s/1GaSYpNm6yh-lZZmqRdXxvQ抽出コード:dy63 - 関連ライブラリファイル
リンク:https
://pan.baidu.com/s/19PLYdtiuSoZZGdVD7_tumQ抽出コード:mrw8
2.キーを押して、LEDライトの制御を中断します
- 割り込み処理プロセスについて学ぶ
割り込み処理プロセス:例外(割り込み)割り込みソース->割り込みの許可->割り込みの適用-> CPU応答->シーンの保護(スタック)->ジャンプ処理->リターン。
-
意義
割り込みの割り込みは、プログラムイベントで非常に重要な位置を占めています。中断がない場合、CPUの効率は大幅に低下します。UARTモジュールと同様に、コンピューターから送信されたデータを受信するときは、while(){}メソッドを使用してステータスを照会します。コンピュータがデータを送信しない場合、プログラムはブロックを続け、CPUが他のことを実行できなくなります。メカニズムがある場合、CPUがデータが来るかどうかを周期的に照会する代わりに、ハードウェアは自動的にデータを受信し、データが受信されると自動的にCPUに通知し、CPUはデータを読み取ります。このように、データを受信する前に、CPUは他のことを行うことができ、作業効率は自然に向上します。CPUハードウェアでは、この機能は割り込みメカニズムによって実現されます。各オンチップ周辺ハードウェアは割り込み信号を提供します。モジュールが特定の動作状態を処理すると、CPUと通信するために割り込み信号が発生します。 -
中断されたライブラリ関数をいくつか追加します
-
開発ボードの回路図を見てください。
外部割り込みトリガー(割り込み)イベントの方法:1。立ち上がりエッジトリガー2.
立ち下がりエッジトリガー3.エッジトリガー前日に対応する対応するキーはKEY1-> PA0です。 、KEY2-> PD2、KEY3-> PC12、KEY1をクリックしてハイレベルにします。KEY2とKEY3はそれぞれローレベルです。
立ち上がりエッジでの高レベルトリガー、立ち下がりエッジでの低レベルトリガー -
外部割り込みラインEXTISTM32F4xx
中国語リファレンスマニュアル.pdfを選択して、key1のPA0がEXTI0に対応し、key2のPD2がEXTI2に対応し、key3のPC12がEXTI12に対応するようにします。 -
システム構成コントローラー(SYSCFG)
システム構成コントローラーは、主に、実行可能コードストレージ領域のアドレス再マッピングの管理、イーサネットPHYインターフェイスの選択
、およびGPIOの外部割り込みライン接続の管理に使用されます。
特に指定のない限り、このセクションはSTM32F4xxシリーズ全体に適用されます。 -
最初にLEDを初期化するので、これ以上は書きません。初日にLEDがある場合は、そうでない場合はチェックアウトしてから、Exit_Initが初期化されます。
/*******************************************************
*函数名:Exit_Init
*功 能:中断初始化
*参 数:无
*返 回:无
*备 注:注意开启PA0,PD2的PC12的映射SYSCFG时钟 ,使能外部中断
********************************************************/
void Exit_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//开启SYSCFG时钟,简称重映射
EXTI_InitTypeDef Exit_Key1,Exit_Key2,Exit_Key3;//定义外部中断结构体变量
// //key1
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0); //映射到PA0引脚到EXTI
Exit_Key1.EXTI_Line = EXTI_Line0; //选择EXTI0
Exit_Key1.EXTI_Mode = EXTI_Mode_Interrupt; // 选择模式(中断)
Exit_Key1.EXTI_Trigger = EXTI_Trigger_Rising;//选择上升沿触
Exit_Key1.EXTI_LineCmd = ENABLE;//启用EXTI0
EXTI_Init(&Exit_Key1);//写入EXTI初始化
NVIC_EnableIRQ(EXTI0_IRQn);//使能外部中断0线进行工作
//key2
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD,EXTI_PinSource2); //映射到PD2引脚到EXTI2
Exit_Key2.EXTI_Line = EXTI_Line2; //选择EXTI2
Exit_Key1.EXTI_Mode = EXTI_Mode_Interrupt; // 选择模式(中断)
Exit_Key2.EXTI_Trigger = EXTI_Trigger_Falling;//选择下升沿触
Exit_Key2.EXTI_LineCmd = ENABLE;启用EXTI2
EXTI_Init(&Exit_Key2);//写入EXTI初始化
NVIC_EnableIRQ(EXTI2_IRQn);//使能外部中断2线进行工作
//key3
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource12); //映射到PC12引脚到EXTI3
Exit_Key3.EXTI_Line = EXTI_Line12; //选择EXTI12
Exit_Key3.EXTI_Mode = EXTI_Mode_Interrupt; // 选择模式(中断)
Exit_Key3.EXTI_Trigger = EXTI_Trigger_Falling;//选择下升沿触
Exit_Key3.EXTI_LineCmd = ENABLE;//启用EXTI3
EXTI_Init(&Exit_Key3);//写入EXTI初始化
NVIC_EnableIRQ(EXTI15_10_IRQn);//由于没有EXTI12,所以使能外部中断15_10线进行工作
}
- (メインのものが来ています、彼は来ています)キーを押して中断し、クリックしてLEDライトを制御してオンとオフを切り替えます
/*******************************************************
*函数名:EXTI0_IRQHandler
*功 能:按键一中断
*参 数:无
*返 回:无
*备 注:注意挂起寄存器(清0)
********************************************************/
int EXTI1_flag;
void EXTI0_IRQHandler(void)//由中断自动触发
{
EXTI_ClearFlag(EXTI_Line0); //挂起寄存器PA0
EXTI1_flag++;
if(EXTI1_flag%2)
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
else
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
/*******************************************************
*函数名:EXTI0_IRQHandler
*功 能:按键二中断
*参 数:无
*返 回:无
*备 注:注意挂起寄存器(清0)
********************************************************/
int EXTI2_flag;
void EXTI2_IRQHandler(void)//由中断自动触发
{
EXTI_ClearFlag(EXTI_Line2); //挂起寄存器PD2
EXTI2_flag++;
if(EXTI2_flag%2)
GPIO_ResetBits(GPIOC,GPIO_Pin_10);
else
GPIO_SetBits(GPIOC,GPIO_Pin_10);
}
/*******************************************************
*函数名:EXTI0_IRQHandler
*功 能:按键三中断
*参 数:无
*返 回:无
*备 注:注意挂起寄存器(清0)
********************************************************/
int EXTI3_flag;
void EXTI15_10_IRQHandler(void)
{
EXTI3_flag++;
if(EXTI3_flag%2)
GPIO_ResetBits(GPIOC,GPIO_Pin_11);
else
GPIO_SetBits(GPIOC,GPIO_Pin_11);
EXTI_ClearFlag(EXTI_Line12); //挂起寄存器PC2
}
- 主な関数は関連する関数を呼び出します
LEDInit();//LED初始化
Exit_Init();//中断初始化
while(1)
{
//是不是很激动,这里什么都不用写,哈哈
}
この時点で、キーの中断は完全に実現されています。クリックしてLEDライトを制御し、オンとオフを切り替えます。最後に、読んでいただきありがとうございます。その他の関連情報が必要な場合は、私に連絡してください。