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

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

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

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

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

函數(shù)方法:

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)先級(jí)的一般步驟:設(shè)置優(yōu)先級(jí)分組,設(shè)置中斷通道,分別設(shè)置先占優(yōu)先級(jí),次占優(yōu)先級(jí),使能等;



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


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配置的一般步驟:清除相應(yīng)中斷線標(biāo)志位(這個(gè)很重要,剛開(kāi)始一直沒(méi)找到這個(gè)問(wèn)題),聯(lián)結(jié)端口與中斷線(也可以在GPIO初始化時(shí)配置),選擇中斷線,設(shè)置中斷模式,中斷方式,使能等;


3,寫(xiě)中斷服務(wù)函數(shù)

中斷服務(wù)程序一般寫(xiě)在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);

}

}

}

其中最重要的一點(diǎn):需要注意進(jìn)入服務(wù)程序后清除中斷標(biāo)志位;


說(shuō)幾點(diǎn)容易忽略的地方:

1.中斷服務(wù)程序一定要清除中斷標(biāo)志位;

2.聯(lián)結(jié)相應(yīng)端口與中斷線;

3.按鍵端口設(shè)置成上拉輸入;

4.在配置EXTI時(shí)清除中斷標(biāo)志位;

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



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

1.GPIO初始化:這里只要注意GPIOB.0設(shè)置成上拉輸入(不光要設(shè)置GPIOB->CRL=0X08,還要設(shè)置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初始化

和用函數(shù)方法差不多,設(shè)置幾個(gè)寄存器;有點(diǎn)不明白的是這里好像可以不用清除標(biāo)志位;


voidEXTI_Configuration()

{

AFIO->EXTICR[0]=0X0001;

EXTI->IMR=0X01;

EXTI->RTSR=0X01;

}


然后是中斷服務(wù)程序:

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);

}

}

}



下面是整個(gè)用函數(shù)代碼:


#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

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

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

關(guān)鍵字: 樹(shù)莓派 gpio gpio編程

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

關(guān)鍵字: 51單片機(jī) 外部中斷

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

關(guān)鍵字: MCU 外部中斷 ST

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

關(guān)鍵字: LED 外部中斷

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

關(guān)鍵字: ARM THUMB I2C 外部中斷

串行外設(shè)接口(SPI)是微控制器和外圍IC(如傳感器、ADC、DAC、移位寄存器、SRAM等)之間使用最廣泛的接口之一。本文先簡(jiǎn)要說(shuō)明SPI接口,然后介紹ADI公司支持SPI的模擬開(kāi)關(guān)與多路轉(zhuǎn)換器,以及它們?nèi)绾螏椭鷾p少系...

關(guān)鍵字: gpio spi 串行外設(shè)接口

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

關(guān)鍵字: gpio 通用io口

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

關(guān)鍵字: gpio STM32

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

關(guān)鍵字: ARM gpio 硬件介紹

Ⅰ、寫(xiě)在前面完事開(kāi)頭難,只要肯努力;師傅領(lǐng)進(jìn)門(mén),修行看個(gè)人;當(dāng)你看到本文,說(shuō)明你是幸運(yùn)的,作者接下來(lái)推出的一系列STM8S教程,將助你踏入STM8S的世界。本文是STM8S教程的開(kāi)始,寫(xiě)給剛?cè)腴T(mén)STM8S的朋友。學(xué)習(xí)本文

關(guān)鍵字: gpio stm8s 基礎(chǔ)知識(shí)
關(guān)閉