終于有時間再來學習STM32了~ 這幾天都在忙著該死的考試.直接進入正題
開發(fā)板:奮斗V5
這個按鍵中斷測試的要求是:按鍵2(K2)按下,LED2(V7)亮, 再一次按下就滅,循環(huán)..
好,先看看按鍵和LED的原理圖
好吧~ 雖然圖截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6
ok,剩下的就是配置工作了.. 先來理一理思路:
(1)初始化系統(tǒng)時鐘
(2)初始化外部時鐘(你所用到的東西)
(3)配置LED
(4)配置中斷優(yōu)先級
(5)配置外部中斷線
(6)中斷處理函數(shù)
恩,差不多就是這樣了..
然后再來一條一條的看:(1)和(2)都屬于RCC配置,可以放在一個功能模塊里面:
void RCC_Config(void){
SystemInit(); //系統(tǒng)時鐘初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
| RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF
| RCC_APB2Periph_GPIOG, ENABLE);
}
當然, 我們可以不用加SystemInit();這個函數(shù)也沒事.原因是startup_stm32f10x_hd.s這個文件已經(jīng)在幫我們干了這些事情了.. 它具體是怎么弄的,還有一些其它東西,目前還沒
去研究過,下次再研究看看.
(3)LED配置
void LED_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*led config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
LED的配置前面應(yīng)該已經(jīng)記錄了,所以這里就不弄了
(4)配置中斷優(yōu)先級和(5)配置外部中斷線,這兩個我選擇放在一個模塊,因為都是和中斷有關(guān)系的嘛
void EXTI_PC2_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* key for exti */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);
EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
這也沒什么好解釋的了,前面的文章已經(jīng)解釋了
(6)中斷處理函數(shù)
這家伙推薦在stm32f10x_it.c里面寫,因為那里有命名的模版,跟著官方走,錯不了
void EXTI2_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line2) != RESET) //判斷按鍵是否按下
{
//LED取反
GPIO_WriteBit(GPIOD, GPIO_Pin_6,
(BitAction)((1-GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_6))));
EXTI_ClearITPendingBit(EXTI_Line2); //清除中斷標志位
}
}
這里要注意的就是前面EXTIx這里的數(shù)字問題了,1-4沒什么問題,5-9就要稍微注意下.如果是應(yīng)該是這樣,它應(yīng)該是EXTI9_5_IRQHandler
這兒我有個問題,為什么沒看到外部中斷6呢,也就是EXTI6或7,8這些單獨的呢.. 原因可能是5-9他們都使用了同一個中斷向量表,這個話我印象中好像在哪兒看過
好,到這里基本功能就完成了.. 現(xiàn)象是可以出了.但是會有個問題就是有時候按一些按鍵,LED等會沒反應(yīng)或者亮滅幾下.. 這就是按鍵抖動的問題了;
好,接下來說說怎么削抖:
這里說軟件消抖,硬件就不說了.. 傳說中的抖動出現(xiàn)的原因就是你的手速不夠快,使中斷觸發(fā)了一次以上.. 我想如果你以20年到30年的專業(yè)單身手速(右手哦)來按的話
肯定沒這個問題..哈哈..好,直接上代碼..借鑒人家的:
用下面這個方法,就要調(diào)整前面的代碼了.
void KEY_DEL(void)
{
num = 0;
if (_keyon == 1) //按鍵是否按下,在中斷處理函數(shù)中
{
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0)
{
Delay(0x3ffff);//延遲,為的是讓你的手速能跟上
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0) //按鍵是否抖動
{
while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0); //是否松開
num = 1;
goto n_exit;
}
}
}
n_exit:;
_keyon = 0;
}
void EXTI2_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line2) != RESET)
{
_keyon = 1;//按鍵按下標志
EXTI_ClearITPendingBit(EXTI_Line2);
}
}
#include "misc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_rcc.h"
#include "system_stm32f10x.h"
#define LED_ON GPIO_SetBits(GPIOD, GPIO_Pin_6);
void LED_Config(void);
void EXTI_PC2_Config(void);
void RCC_Config(void);
void KEY_DEL(void);
void Delay(u32 times);
unsigned char _keyon = 0, num = 0;
int main(void)
{
unsigned char a = 0;
RCC_Config();
LED_Config();
EXTI_PC2_Config();
LED_ON;
while(1)
{
KEY_DEL();
if (num == 1 && a == 0)
{
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
a = 1;
}
else if(num == 1 && a == 1)
{
GPIO_SetBits(GPIOD, GPIO_Pin_6);
a = 0;
}
}
}
上一篇:STM32(二)之GPIO操作(2)——通過按鍵控制LED燈的開關(guān)
下一篇:STM32實戰(zhàn)1:按鍵點亮LED小燈
推薦閱讀
史海拾趣
對于光控電子鳥電路,網(wǎng)友們可能會提出一系列問題,這些問題可能涉及到電路的工作原理、設(shè)計細節(jié)、故障排查以及改進方法等方面。以下是一些可能的問題及回答:
一、工作原理相關(guān)問題
-
問題:光控電子鳥是如何實現(xiàn)光控功能的?
回答:光控電子鳥通過光敏元件(如光敏二極管或光敏電阻器)來實現(xiàn)光控功能。當光線照射到光敏元件上時,其電阻值會發(fā)生變化,進而影響電路中的電流和電壓,從而控制振蕩器的振蕩頻率,使揚聲器發(fā)出不同頻率的聲音來模擬鳥鳴聲。 -
問題:自激振蕩器在光控電子鳥中起什么作用?
回答:自激振蕩器在光控電子鳥中起到產(chǎn)生聲音信號的作用。它由晶體管、電容器和電阻器等元件組成,通過R、C的充放電過程模擬鳥兒的鳴叫聲。當光敏元件感受到光線變化時,會改變振蕩器的振蕩頻率,從而改變鳥鳴聲的特性。
二、設(shè)計細節(jié)相關(guān)問題
-
問題:如何選擇合適的光敏元件?
回答:選擇合適的光敏元件需要考慮其靈敏度、光譜響應(yīng)范圍以及工作環(huán)境等因素。對于光控電子鳥來說,一般選擇靈敏度高、光譜響應(yīng)范圍與自然光相近的光敏二極管或光敏電阻器。 -
問題:電路中的電容器和電阻器應(yīng)該如何選擇?
回答:電容器和電阻器的選擇需要根據(jù)電路的具體要求和性能參數(shù)來確定。例如,電容器的選擇需要考慮其容量、耐壓值以及工作頻率等因素;電阻器的選擇則需要考慮其阻值、功率以及穩(wěn)定性等因素。在光控電子鳥電路中,一般選用金屬膜電阻器和獨石電容器等高質(zhì)量元件。
三、故障排查相關(guān)問題
-
問題:如果光控電子鳥不發(fā)聲怎么辦?
回答:如果光控電子鳥不發(fā)聲,首先需要檢查電源是否正常供電;其次檢查光敏元件是否損壞或連接不良;最后檢查振蕩器電路是否工作正常。可以使用萬用表等工具進行逐步排查和測試。 -
問題:聲音失真或雜音大怎么辦?
回答:聲音失真或雜音大可能是由于電路中的元件老化、接觸不良或設(shè)計不合理等原因造成的??梢試L試更換損壞的元件、重新連接電路或調(diào)整電路設(shè)計等方法來解決問題。
四、改進方法相關(guān)問題
-
問題:如何改進光控電子鳥的聲音效果?
回答:改進光控電子鳥的聲音效果可以從多個方面入手。例如,可以優(yōu)化振蕩器電路的設(shè)計,調(diào)整電容器和電阻器的參數(shù)以改變聲音的特性;可以增加聲音處理電路,如濾波器、放大器等,來增強聲音的清晰度和響度;還可以采用數(shù)字控制技術(shù)來實現(xiàn)更復(fù)雜的聲音效果。 -
問題:如何增加光控電子鳥的智能化程度?
回答:增加光控電子鳥的智能化程度可以通過引入微控制器等智能芯片來實現(xiàn)。微控制器可以根據(jù)光敏元件的信號和預(yù)設(shè)的程序來控制振蕩器的振蕩頻率和聲音特性,實現(xiàn)更復(fù)雜的聲音效果和功能。同時,還可以加入傳感器、無線通信模塊等元件來擴展光控電子鳥的功能和應(yīng)用范圍。
以上是一些可能的問題及回答,希望能對網(wǎng)友們有所幫助。
機頂盒,全稱為數(shù)字視頻變換盒,是連接電視機與外部信號源的重要設(shè)備,具有高度的專業(yè)性和廣泛的應(yīng)用性。它不僅能接收來自有線電纜、衛(wèi)星天線、寬帶網(wǎng)絡(luò)及地面廣播的數(shù)字電視信號,還能將這些信號轉(zhuǎn)換成適合在電視機上播放的格式,極大地豐富了用戶的觀看體驗。
機頂盒分為數(shù)字機頂盒和網(wǎng)絡(luò)機頂盒兩大類。數(shù)字機頂盒主要實現(xiàn)數(shù)模轉(zhuǎn)換功能,使用戶能用原有的模擬電視機觀看數(shù)字電視,包括有線電視、衛(wèi)星電視和地面廣播電視的數(shù)字機頂盒。而網(wǎng)絡(luò)機頂盒則進一步擴展了功能,能接入互聯(lián)網(wǎng),提供如IPTV、視頻點播、在線游戲、網(wǎng)頁瀏覽等多元化服務(wù),使電視機轉(zhuǎn)變?yōu)橐粋€智能互動終端。
機頂盒的工作原理涵蓋接收、解碼和顯示三個關(guān)鍵步驟。通過內(nèi)置的調(diào)諧器接收信號,解調(diào)器將信號從載波中提取,解碼器再將信號轉(zhuǎn)換為電視可識別的視頻和音頻流,最終通過電視機呈現(xiàn)給用戶。隨著技術(shù)的不斷進步,機頂盒的功能也在不斷升級,如支持4K、8K超高清視頻播放,搭載智能推薦算法提供個性化內(nèi)容推薦,以及通過語音識別技術(shù)實現(xiàn)便捷操作等。
綜上所述,機頂盒作為連接電視與互聯(lián)網(wǎng)的重要橋梁,其專業(yè)性和科普性不言而喻。它不僅為用戶提供了豐富多彩的電視節(jié)目和娛樂選擇,還推動了電視產(chǎn)業(yè)的智能化發(fā)展,成為現(xiàn)代家庭不可或缺的一部分。
隨著全球?qū)Νh(huán)保和可持續(xù)發(fā)展的重視,F(xiàn)reeport Resources將這一理念融入到公司的發(fā)展戰(zhàn)略中。公司投入大量資金進行環(huán)保設(shè)施建設(shè)和生產(chǎn)技術(shù)改造,致力于減少開采和加工過程中的環(huán)境污染和資源浪費。同時,F(xiàn)reeport Resources還積極參與社會公益活動,推動礦業(yè)與社區(qū)的和諧共生。這些舉措不僅提升了公司的社會形象,也為其在電子材料市場的長期發(fā)展奠定了堅實的基礎(chǔ)。
隨著國內(nèi)市場的飽和,BENCENT公司開始將目光投向海外市場。公司制定了詳細的國際化戰(zhàn)略,包括在海外市場設(shè)立分支機構(gòu)、拓展銷售渠道、加強與當?shù)仄髽I(yè)的合作等。通過一系列的努力,公司成功打入多個海外市場,實現(xiàn)了業(yè)務(wù)的多元化和國際化。
背景:霍尼韋爾公司的歷史可以追溯到1885年,由發(fā)明家艾伯特·布茲在美國明尼阿波利斯創(chuàng)立布茲電子溫度調(diào)節(jié)器公司。
發(fā)展:布茲成功研發(fā)出了一種名為“風門擋板”的裝置,該裝置能夠自動調(diào)節(jié)室內(nèi)溫度,這是當時的一大技術(shù)突破。隨著業(yè)務(wù)的不斷發(fā)展,布茲電子溫度調(diào)節(jié)器公司被統(tǒng)一溫度控制公司收購,并在1893年更名為電子供熱調(diào)節(jié)器公司。
關(guān)鍵事件:1898年,電子供熱調(diào)節(jié)器公司被W.R. Sweatt收購,并于1916年更名為明尼阿波利斯熱調(diào)節(jié)器公司。這一系列的更名和收購奠定了霍尼韋爾在恒溫器領(lǐng)域的基礎(chǔ)。
為了降低成本、提高效率,CTC Coils Ltd公司開始對供應(yīng)鏈進行深度優(yōu)化。公司與供應(yīng)商建立了長期穩(wěn)定的合作關(guān)系,實現(xiàn)了原材料的穩(wěn)定供應(yīng)和成本控制。同時,公司還引入了先進的供應(yīng)鏈管理系統(tǒng),實現(xiàn)了從采購、生產(chǎn)到銷售的全流程信息化管理,提高了運營效率。
請問各位大俠,我現(xiàn)在有個問題:我有個正負12V電源供電傳感器,還有一根地線和一根信號線,要求當斷開電源線,地線其中的任何一根時要求輸出為小于等于零,怎么做呢?大家有什么方案,討論一下啦?… 查看全部問答∨ |
|
請問windows mobile 6.0或者windows CE 5.0 下有微軟自帶的console driver嗎?這部分在源代碼的哪個地方呢?謝謝… 查看全部問答∨ |
請問一下,在WINCE下,使用SOCKET編程怎么樣設(shè)置超時, 使用: ::setsockopt(m_Socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR 則返回錯誤代碼 10038 使用 select 返回一樣的錯誤代碼。 struct timeval time ...… 查看全部問答∨ |
要編一個CE流驅(qū)動的串口的攝像頭驅(qū)動,但我對硬件這方面沒有概念,我需要了解串口的哪些硬件知識呢?還有攝像頭的硬件知識從哪能獲得呢?如何將這些硬件的設(shè)置過渡到軟件上呢? 請好心人能給點提示好嗎?非常感謝你們了~~… 查看全部問答∨ |
|
原因:終端屏幕顯示的信息是來自遠程計算機所發(fā)送的,而不是已輸入到本地計算機上的信息。為了查看所鍵入的信息,遠程計算機必須可反饋輸入信息。這可能會在輸入信息與終端屏幕顯示信息之間存在時間滯后的問題。解決方案:請確保與遠程計算機正確連 ...… 查看全部問答∨ |
|
EEWORLD真是好地方,簡直是TI M3 - Stellaris的基地呀~ EEWORLD真是好地方,簡直是TI M3 - Stellaris的基地呀~。感謝EEWORLD的努力,讓這么多人學會了使用LM3S系列ARM,今天搜了下百度和谷歌,關(guān)于TI M3 - Stellaris的原創(chuàng)資料基本都是出自EEWORLD。TI公司對于EEWORLD的推廣應(yīng)該大力支持~~~~,大家以后有 ...… 查看全部問答∨ |
老師在學校申請個《基于fpga的cpu設(shè)計》的項目,我自己也沒什么頭緒,我是個剛學fpga不久的菜鳥,我用的是altera公司的clone2系列芯片的開發(fā)板,也就是我之前推薦給大家的黑金fpga,不知道各位有大俠對此項目什么好的建議或者寶貴意見,小弟希望做 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 孚能科技全固態(tài)電池中試線年底建成,能量密度超400Wh/kg
- 比亞迪新專利:電池尺寸不變,續(xù)航大幅提升
- 豐田子公司37億大連建廠首次在中國生產(chǎn)純電汽車電池
- 博泰車聯(lián)網(wǎng)沖刺港股:上海灘走出的汽車智能化隱形冠軍
- 從自動駕駛到具身智能,激光雷達緣何一邊被嫌棄,一邊被追捧?
- 軟件定義車輛改變汽車行業(yè)的3種方式
- 混合動力汽車也是超級跑車:強調(diào)性能,而不是里程
- 人形機器人風口下,六維力傳感器成為國產(chǎn)廠商“卡位”關(guān)鍵點
- AURIX? TC4x虛擬化技術(shù)詳解
- 從荔枝的“鮮和煎”,看英特爾銳炫Pro B60的AI空間折疊魔術(shù)