硬件平臺:stm32F407Zet6
軟件平臺:stm32cubeMX 4.7+MDK5.14
電路連接:PE8-LED0、PE9-LED1、PE10-LED2、PE11-LED3、PE12-KEY0、PE13-KEY1、PE14-KEY2、PE15-KEY3
第一步、使用stm32cubeMX創建工程,選擇相應的芯片,配置RCC、SYS、引腳和時鐘如下圖所示:
注意,由于按鍵上有上拉電阻,這里選擇中斷模式的時候,我們選擇下降沿觸發中斷。
第二步,配置輸出Keil工程
第三步、編寫程序下載驗證
STM32CubeMx把代碼都生成了,查找函數,分析調用的過程,添加應用層代碼就行
首先在stm32f4xx_it.c文件中查找,所有的中斷函數都是放在這個文件中的,代碼如下:
[cpp] view plain copy
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
/* USER CODE BEGIN EXTI15_10_IRQn 1 */
/* USER CODE END EXTI15_10_IRQn 1 */
}
可以看出,這四個按鍵的中斷觸發后首先會調用這個函數,這個函數有調用HAL_GPIO_EXTI_IRQHandler,再看一下這個函數的原型
[cpp] view plain copy
/**
* @brief This function handles EXTI interrupt request.
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
}
/**
* @brief EXTI line detection callbacks.
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
根據程序可以知道,當中斷發生的時候會調用HAL_GPIO_EXTI_Callback();程序中只給出了一個虛函數,需要重新實現它,在main.c添加如下代碼,來重新實現這個函數,來完成功能:
[cpp] view plain copy
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
switch(GPIO_Pin)
{
case GPIO_PIN_12:LED0_Toggle();break;
case GPIO_PIN_13:LED1_Toggle();break;
case GPIO_PIN_14:LED2_Toggle();break;
case GPIO_PIN_15:LED3_Toggle();break;
default:break;
}
}
/* USER CODE END 4 */
這樣就實現了當按鍵中斷發生的時候就反轉燈的狀態。
上一篇:STM32CubeMX學習教程之二:GPIO輸入之外部中斷
下一篇:STM32CubeMX學習教程之四:定時器中斷
推薦閱讀
史海拾趣
進入21世紀后,達方電子在技術研發上取得了重大突破,成功研發出多款具有競爭力的新產品。同時,公司積極開拓國際市場,通過與國際知名品牌的合作,將產品銷往全球各地。這一階段的成功,不僅使達方電子的營收大幅增長,也進一步提升了公司的品牌影響力。
隨著市場競爭的加劇,達方電子意識到單一產品線的風險。因此,公司開始實施多元化戰略,逐步拓展至電源元件、整合通訊元件等領域。通過多元化戰略的實施,達方電子成功降低了經營風險,并為公司帶來了新的增長點。
AF International的創立可以追溯到上世紀末,當時創始人張先生憑借對電子行業的敏銳洞察和深厚技術背景,決定創辦一家專注于電子元器件研發與生產的公司。張先生深知技術創新是行業發展的關鍵,因此在公司創立之初就投入大量資源用于研發,逐步開發出了一系列具有競爭力的產品。憑借這些產品,AF International在電子行業中逐漸嶄露頭角,贏得了客戶的信賴和市場的認可。
1976年,ELECTRONICON推出了采用金屬化聚丙烯薄膜的電容器系列,這一創新技術為電容器行業帶來了顯著的空間和成本優勢,進一步鞏固了其在市場上的領先地位。隨著技術的不斷進步,ELECTRONICON的產品逐漸拓展至照明、電機和電力電子等多個領域。
我使用I2C 讀取90*18AD值, 讀取的數據不到2K 的數據量,但是我定義了adlvoldata[90][18]二維數組,存儲讀取的AD值,在我的UCOS系統里,每當使用轉存儲到二維數組的時候,系統都會死。。。 不知道是什么原因。 OSSemPend(ReacPlateCir ...… 查看全部問答∨ |
小弟練習做一個電子閱讀器, 現在要嘗試讀txt文件, 以前用過讀取文件的api, 不知道txt是不是可以這么讀取呢? 其他格式的電子書文件是否先用文件api打開, 再按照特定的方式解碼呢? 最后想問問高手們讀取大量的文字需要動態分配內存, 小 ...… 查看全部問答∨ |
德克羅蒙推出一款傳感器,帶LED現場顯示一體化溫度變送器,可帶現場顯示功能。 可選各類卡盤及螺絲連接方式。316L材質。 精度可選德國DIN,AA,A,B,C級精度。 輸出4-20MA… 查看全部問答∨ |
附件是三個工具的demo,還有兩個參見下面鏈接,希望對大家有幫助 FreeRTOS demo for EKK-LM3Sxxxx http://www.freertos.org/index.html?http://www.freertos.org/a00090.html#LUMINARYMICRO NicheLite demo for EKx-LM3S8962 http://www.iniche ...… 查看全部問答∨ |
外部用的是有源晶振,20M,產生錯誤:Error: Input pin "CLK" feeds inclk ports of PLL "altpll0:inst2|altpll:altpll_component|pll" and other PLLs -- the input pin cannot feed inclk ports of more than 1 PLL Error: Input pin ...… 查看全部問答∨ |
先前玩過了msp430g2553 launchpad.玩f5529比較熟悉點。 由一圖可知用戶的燈在P1.0,P8.1,P8.2. 由二圖簡單創建工程。 #include <msp430.h> /* * main.c */ void main(void) { WDTCTL = WDTPW | WDTHOLD; &n ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉MicroPython(一) 燒入固件, 初識
- ESP32玩轉MicroPython(二) 連接WIFI網絡 webperl文件傳輸
- ESP32玩轉MicroPython(三) 延時、計時 和GPIO操作
- 玩轉 ESP32 + Arduino (一) 開發環境搭建
- 玩轉 ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉 ESP32 + Arduino (五) platformIO引入類庫 自開發庫 串口打印字符串
- 玩轉 ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉 ESP32 + Arduino (八) U8G2驅動OLED
- STM32一文通(6) 外部中斷
- ESP32玩轉MicroPython(一) 燒入固件, 初識
- ESP32玩轉MicroPython(二) 連接WIFI網絡 webperl文件傳輸
- 助力全電氣時代:浩亭亮相2025漢諾威工業博覽會
- ESP32玩轉MicroPython(三) 延時、計時 和GPIO操作
- Gartner:到2027年,AI代理將使利用賬號暴露進行攻擊的時間減少50%
- 玩轉 ESP32 + Arduino (一) 開發環境搭建
- 玩轉 ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉 ESP32 + Arduino (五) platformIO引入類庫 自開發庫 串口打印字符串
- 玩轉 ESP32 + Arduino (六) 硬件定時器, IIC, SPI