日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]先從最簡單的問題開始,用STM32外部中斷的方法實現(xiàn)PB.0按鍵控制PA.0LED燈:先總的說下實現(xiàn)中斷的步驟:1,配置NVIC寄存器(函數),設置中斷為第幾組,占先優(yōu)先級和次優(yōu)先級; 函數方法: void NVIC_Configuration()

先從最簡單的問題開始,用STM32外部中斷的方法實現(xiàn)PB.0按鍵控制PA.0LED燈:

先總的說下實現(xiàn)中斷的步驟:

1,配置NVIC寄存器(函數),設置中斷為第幾組,占先優(yōu)先級和次優(yōu)先級;

函數方法:

void NVIC_Configuration()
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
}

以上為配置優(yōu)先級的一般步驟:設置優(yōu)先級分組,設置中斷通道,分別設置先占優(yōu)先級,次占優(yōu)先級,使能等;



2,配置EXTI寄存器及(函數),設置中斷線,中斷方式,等;


voidEXTI_Configuration()

{

EXTI_InitTypeDefEXTI_InitStructure;

EXTI_ClearITPendingBit(EXTI_Line0);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);

EXTI_InitStructure.EXTI_Line=EXTI_Line0;

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd=ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

和配置NVIC一樣,這也是EXTI配置的一般步驟:清除相應中斷線標志位(這個很重要,剛開始一直沒找到這個問題),聯(lián)結端口與中斷線(也可以在GPIO初始化時配置),選擇中斷線,設置中斷模式,中斷方式,使能等;


3,寫中斷服務函數

中斷服務程序一般寫在STM32F10X_it.c文件里:


voidEXTI0_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line0)==SET)

{

EXTI_ClearITPendingBit(EXTI_Line0);

if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)==Bit_RESET)

{

GPIO_SetBits(GPIOA,GPIO_Pin_0);

}

else

{

GPIO_ResetBits(GPIOA,GPIO_Pin_0);

}

}

}

其中最重要的一點:需要注意進入服務程序后清除中斷標志位;


說幾點容易忽略的地方:

1.中斷服務程序一定要清除中斷標志位;

2.聯(lián)結相應端口與中斷線;

3.按鍵端口設置成上拉輸入;

4.在配置EXTI時清除中斷標志位;

按鍵部分的短路自己連的:



下面是直接操作寄存器的方法:

1.GPIO初始化:這里只要注意GPIOB.0設置成上拉輸入(不光要設置GPIOB->CRL=0X08,還要設置GPIOB->ODR=0X01,為了和下拉區(qū)分)


voidGPIO_Config()

{

GPIOA->CRL=0X03;

GPIOA->ODR=0X01;

GPIOB->CRL=0X08;

GPIOB->ODR=0X01;

}


2. NVIC 初始化:

直接上代碼:


voidNVIC_Configuration()

{

u32temp;

temp=SCB->AIRCR;

temp&=0x0000f8ff;

temp|=0x05fa0000;

temp|=0x0700;

SCB->AIRCR=temp;

NVIC->ISER[0]=1<<6;

NVIC->IP[1]=0;

}

3. EXTI初始化

和用函數方法差不多,設置幾個寄存器;有點不明白的是這里好像可以不用清除標志位;


voidEXTI_Configuration()

{

AFIO->EXTICR[0]=0X0001;

EXTI->IMR=0X01;

EXTI->RTSR=0X01;

}


然后是中斷服務程序:

voidEXTI0_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line0)==SET)

{

EXTI->PR=0X01;

if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)==Bit_RESET)

{

GPIO_SetBits(GPIOA,GPIO_Pin_0);

}

else

{

GPIO_ResetBits(GPIOA,GPIO_Pin_0);

}

}

}



下面是整個用函數代碼:


#include"stm32f10x.h"

voidGPIO_Config();

voidNVIC_Configuration();

voidEXTI_Configuration();

voidSysclkConfiguration();

intmain()

{

SysclkConfiguration();

GPIO_Config();

EXTI_Configuration();

NVIC_Configuration();

while(1);

return0;

}

voidSysclkConfiguration()

{

RCC_DeInit();

RCC_HSEConfig(RCC_HSE_ON);

if(RCC_WaitForHSEStartUp()==SUCCESS)

{

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

RCC_PLLCmd(ENABLE);

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource()!=0X08);

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);

RCC_PCLK2Config(RCC_HCLK_Div1);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

}

}

voidGPIO_Config()

{

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

樹莓派,(英語:Raspberry Pi,簡寫為RPi,別名為RasPi / RPI)是為學習計算機編程教育而設計,只有信用卡大小的微型電腦,其系統(tǒng)基于Linux。隨著Windows 10 IoT的發(fā)布,用戶可以用上運行...

關鍵字: 樹莓派 gpio gpio編程

MCS-51單片機有兩個外部中斷源INT0和INT1,它們分別在P3.2和P3.3引腳出現(xiàn)低電平或下降沿信號時向單片機發(fā)出中斷請求。外部中斷可用于檢測單片機外部發(fā)生的事件,如鍵盤敲擊和特定脈沖發(fā)生的次數等。

關鍵字: 51單片機 外部中斷

外部中斷是單片機實時地處理外部事件的一種機制。具體指的是,當某種外部事件發(fā)生時,單片機的中斷系統(tǒng)迫使CPU暫停正在執(zhí)行的程序,轉而去進行中斷事件的處理;中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。這里我們以Nuc...

關鍵字: MCU 外部中斷 ST

STM32CubeMX是官方推薦的配置軟件,而HAL庫也是取代之前的庫函數的通用庫,所以STM32CubeMX+HAL庫是當前主流的工程創(chuàng)建方式,HAL庫的可移植性也高于被取代的庫函數。 之前在[程序員小哈]的公眾號中寫...

關鍵字: LED 外部中斷

1.ARM中一些常見英文縮寫解釋 MSB:最高有效位; LSB:最低有效位; AHB:先進的高性能總線; VPB:連接片內外設功能的VLSI外設總線; EMC:外部存儲器控制器; MAM:存儲器加速模塊; VIC:向量中...

關鍵字: ARM THUMB I2C 外部中斷

串行外設接口(SPI)是微控制器和外圍IC(如傳感器、ADC、DAC、移位寄存器、SRAM等)之間使用最廣泛的接口之一。本文先簡要說明SPI接口,然后介紹ADI公司支持SPI的模擬開關與多路轉換器,以及它們如何幫助減少系...

關鍵字: gpio spi 串行外設接口

一、什么是GPIO? GPIO,英文全稱為General-Purpose IO ports,也就是通用IO口。嵌入式系統(tǒng)中常常有數量眾多,但是結構卻比較簡單的外部設備/電路,對這些設備/電路有的需要C

關鍵字: gpio 通用io口

//**********************************************************************//************************************...

關鍵字: gpio STM32

GPIO(General Purpose I/O Ports)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態(tài)-是高電平或是低電平。 S3C2410共有117個I...

關鍵字: ARM gpio 硬件介紹

Ⅰ、寫在前面完事開頭難,只要肯努力;師傅領進門,修行看個人;當你看到本文,說明你是幸運的,作者接下來推出的一系列STM8S教程,將助你踏入STM8S的世界。本文是STM8S教程的開始,寫給剛入門STM8S的朋友。學習本文

關鍵字: gpio stm8s 基礎知識
關閉