STM32考試復(fù)習(xí)(完整版)_第1頁
STM32考試復(fù)習(xí)(完整版)_第2頁
STM32考試復(fù)習(xí)(完整版)_第3頁
STM32考試復(fù)習(xí)(完整版)_第4頁
STM32考試復(fù)習(xí)(完整版)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2021/6/271嵌入式系統(tǒng)定義;與通用計算機系統(tǒng)的區(qū)別以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ),軟硬件可裁剪,從而能夠適應(yīng)實際應(yīng)用中對功能、可靠性、成本、體積、功耗和應(yīng)用環(huán)境有特殊要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)的組成嵌入式處理器;外圍設(shè)備;操作系統(tǒng);應(yīng)用軟件嵌入式處理器分類微控制器;微處理器;嵌入式DSP;片上系統(tǒng)緒論2021/6/272GPIOSTM32的GPIO有多種工作模式:輸入浮空;輸入上拉;輸入下拉;模擬輸入;推挽輸出;推挽復(fù)用;開漏輸出;開漏復(fù)用。要知道每種模式具體用在什么場合。GPIO的編程(可能有大題(編程題))用某個IO引腳控制一個LED燈,使其閃爍。要求畫出電路圖,并編程。2021/6/273STM32編寫程序時要用到哪個模塊首先要開啟那個模塊的時鐘voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時鐘配置為72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE); //打開GPIO時鐘}STM32GPIO例程講解2021/6/274voidGPIO_Configuration(void) //I/O口線配置{GPIO_InitTypeDefGPIO_InitStructure;//配置輸出腳PC0控制LED燈

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);}STM32GPIO例程講解2021/6/275寫0:GPIO_ResetBits(GPIOB,GPIO_Pin_5);寫1:GPIO_SetBits(GPIOB,GPIO_Pin_5);讀:GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);返回值是1(Bit_SET)或者0(Bit_RESET);STM32GPIO例程講解2021/6/276EXTI(外部中斷)中斷的定義

CPU在正常執(zhí)行程序的過程中,突然發(fā)生了一些需要緊急處理的事件,這些事件通過某種方式觸發(fā)引起CPU暫停當前正在執(zhí)行的程序,轉(zhuǎn)去處理突發(fā)事件,待突發(fā)事件處理完畢后,CPU再返回繼續(xù)執(zhí)行剛剛被暫停的程序的過程就稱之為中斷。2021/6/277STM32中斷優(yōu)先級分組優(yōu)先級越高,數(shù)值越低!搶占優(yōu)先級相同的任務(wù),響應(yīng)優(yōu)先級高的先響應(yīng),但不能互相搶占;搶占優(yōu)先級不同的,可以搶占低優(yōu)先級的CPU。2021/6/278STM32外部中斷的來源STM32和I/O口有關(guān)的中斷一共有16個:GPIO的管腳GPIOx.0~GPIOx.15(x=A,B,C,D,E,F(xiàn),G)分別對應(yīng)中斷線15~0。這樣每個中斷線對應(yīng)了最多7個IO口,以線0為例:它對應(yīng)了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中斷線每次只能連接到1個IO口上,這樣就需要通過配置來決定對應(yīng)的中斷線配置到哪個GPIO上了。2021/6/279voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時鐘配置為72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //打開AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE); //打開GPIO時鐘}STM32外部中斷例程講解2021/6/2710voidGPIO_Configuration(void) //輸入輸出管腳配置{GPIO_InitTypeDefGPIO_InitStructure;//配置輸出腳PC0控制LED燈

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);//配置輸入腳PA0控制按鍵

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);}STM32外部中斷例程講解2021/6/2711voidNVIC_Configuration(void) //嵌套向量中斷控制器配置{NVIC_InitTypeDefNVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//選擇優(yōu)先級組別

NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; //選擇中斷通道:EXTI線0中斷,因為按鍵連接的是PA0腳

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //0級搶占式優(yōu)先級

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//0級副優(yōu)先級

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能引腳作為中斷源

NVIC_Init(&NVIC_InitStructure);//調(diào)用NVIC_Init固件庫函數(shù)進行設(shè)置} STM32外部中斷例程講解2021/6/2712voidEXTI_Configuration(void){//調(diào)用固件庫中的GPIO_EXTILineConfig函數(shù),

//其中兩個參數(shù)分別是中斷口和中斷口對應(yīng)的引腳號

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

EXTI_InitStructure.EXTI_Line=EXTI_Line0;//將中斷映射到中斷/事件源Line0EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //中斷模式

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling //設(shè)置為下降沿中斷

EXTI_InitStructure.EXTI_LineCmd=ENABLE; //中斷使能,即開中斷

EXTI_Init(&EXTI_InitStructure); //調(diào)用EXTI_Init固件庫函數(shù),將結(jié)構(gòu)體寫入EXTI相關(guān)寄存器中} STM32外部中斷例程講解2021/6/2713voidEXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0)!=RESET){//將LED1的狀態(tài)反轉(zhuǎn)

GPIO_WriteBit(GPIOC,GPIO_Pin_0,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_0))));//清中斷

EXTI_ClearITPendingBit(EXTI_Line0);}}STM32外部中斷例程講解注意:中斷服務(wù)函數(shù)都包含在“stm32f10x_it.c”文件中,用的時候只需添加指令即可!2021/6/2714串行通信基礎(chǔ)

數(shù)據(jù)通信方式:并行通信與串行通信并行通信:一次傳輸多位的數(shù)據(jù)特點:速度快,適合近距離傳輸串行通信:數(shù)據(jù)一位一位地發(fā)送特點:硬件簡單,占用I/O口資源少,適合距離遠,速度要求不高的場合2021/6/2715波特率

單位時間內(nèi)傳送的信息量。以每秒傳送的位為單位:電傳機:10字符/秒,1個字符11位,波特率為:10×11=110(波特)2021/6/2716voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時鐘配置為72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);//外設(shè)時鐘配置}STM32串口例程講解2021/6/2717/********************************************************************************Name:UART1_GPIO_Configuration*Deion:Configurestheuart1GPIOports.*Input:None*Output:None*Return:None*******************************************************************************/voidUART1_GPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//ConfigureUSART1_Txasalternatepush-pullGPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);//ConfigureUSART1_RxasinputfloatingGPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);}STM32串口例程講解2021/6/2718/********************************************************************************Name:UART1_Configuration*******************************************************************************/voidUSART_Configuration(void){USART_InitTypeDefUSART_InitStructure;/*ConfiguretheUSART1synchronousparamters*/USART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/*ConfigureUSART1basicandasynchronousparamters*/USART_Init(USART1,&USART_InitStructure);/*EnableUSART1Receiveinterrupts*/USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);/*EnableUSART1*/USART_Cmd(USART1,ENABLE);}

STM32串口例程講解2021/6/2719/********************************************************************************Name:NVIC_Configuration*Deion:ConfiguresNVICandVectorTablebaselocation.*Input:None*Output:None*Return:None*******************************************************************************/voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);}STM32串口例程講解2021/6/2720voidUSART1_IRQHandler(void){if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){//將數(shù)據(jù)回送至超級終端

USART_SendData(USART1,USART_ReceiveData(USART1));//等待數(shù)據(jù)發(fā)送完畢

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); //等待發(fā)送完成

USART_ClearFlag(USART1,USART_FLAG_TXE); //清零發(fā)送完成標志位 //等待發(fā)送完成}USART_ClearITPendingBit(USART1,USART_IT_RXNE);}STM32串口例程講解2021/6/2721直接存儲器存取DMA直接存儲器存取(DMA)用來提供在外設(shè)和存儲器之間或者存儲器和存儲器之間的高速的無需CPU干預(yù)的數(shù)據(jù)傳輸。把數(shù)據(jù)傳輸?shù)娜蝿?wù)交給DMA執(zhí)行,CPU就可以去做別的事情了,提高了CPU的工作效率。

2021/6/2722Stm32有兩個DMA控制器,其中DMA1有7個通道,DMA2有5個通道,每個通道專門用來管理來自于一個或多個外設(shè)對存儲器訪問的請求。

DMA的通道不是隨便使用的,有一個預(yù)先的分配。DMA通道和請求2021/6/2723DMA1的通道分配2021/6/2724DMA2的通道分配2021/6/2725intmain(void){RCC_Configuration(); //系統(tǒng)時鐘設(shè)置

GPIO_Configuration(); //端口初始化

USART_Config(USART1); //串口1初始化

MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,5); while(1);}例程:串口1通過DMA進行數(shù)據(jù)的發(fā)送voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時鐘配置為72MHZ}DMA編程例程2021/6/2726voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//A口時鐘配置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //USART1TXGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //復(fù)用推挽輸出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure); //A端口

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //USART1RXGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //復(fù)用浮空輸入

GPIO_Init(GPIOA,&GPIO_InitStructure);//A端口}DMA編程例程2021/6/2727voidUSART1_Config(void){USART_InitTypeDefUSART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //串口時鐘使能

USART_InitStructure.USART_BaudRate=115200;//速率115200USART_InitStructure.USART_WordLength=USART_WordLength_8b; //數(shù)據(jù)位8位USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位1位USART_InitStructure.USART_Parity=USART_Parity_No; //無校驗位

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無硬件流控

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //收發(fā)模式USART_Init(USART1,&USART_InitStructure); //配置串口參數(shù)函數(shù)

USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //開啟串口的DMA發(fā)送功能

USART_Cmd(USART1,ENABLE); }DMA編程例程2021/6/2728voidMYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32cpar,u32cmar,u16cndtr){DMA_InitTypeDefDMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);/*EnableDMAclock*/DMA_InitStructure.DMA_PeripheralBaseAddr=cpar;//外設(shè)基地址DMA_InitStructure.DMA_MemoryBaseAddr=cmar;//內(nèi)存基地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST; //傳送數(shù)據(jù)方向DMA_InitStructure.DMA_BufferSize=cndtr;//傳送數(shù)據(jù)的大小DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; //外設(shè)地址不變DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; //內(nèi)存地址遞增DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte; //外設(shè)數(shù)據(jù)寬度DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte; //內(nèi)存數(shù)據(jù)寬度DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;//不循環(huán)DMA_InitStructure.DMA_Priority=DMA_Priority_High;//DMA通道的優(yōu)先級DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;DMA_Init(DMA_CHx,&DMA_InitStructure);DMA_Cmd(DMA_CHx,ENABLE);}DMA編程例程2021/6/272930

AD模數(shù)模塊(Analog-to-DigitalConverter),即模擬/數(shù)字轉(zhuǎn)換器,主要功能是將連續(xù)變量的模擬信號轉(zhuǎn)換為離散的數(shù)字信號。由于單片機只能處理數(shù)字信號,因此,在對外部的模擬信號進行分析、處理的過程中,必須使用ADC模塊將外部的模擬信號轉(zhuǎn)換成單片機所能處理的數(shù)字信號。ADC模數(shù)轉(zhuǎn)換模塊2021/6/2730分辨率

A/D轉(zhuǎn)換器能分辨的最小模擬電壓。例如,某款A(yù)/D參考電壓是5V,輸出8位二進制數(shù)可以分辨的最小模擬電壓為5V×2-8=20mV;而輸出12位二進制數(shù)可以分辨的最小模擬電壓為5V×2-12≈1.22mV。輸入模擬量與輸出數(shù)字量之間的關(guān)系

STM32的ADC是12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有18個通道,可測量16個外部和2個內(nèi)部信號源(溫度傳感器、內(nèi)部參考電壓)。ADC模數(shù)轉(zhuǎn)換模塊2021/6/2731ADC編程步驟1、開啟PA口時鐘和ADC1時鐘2021/6/27322、復(fù)位ADC1,同時設(shè)置ADC1分頻因子ADC時鐘復(fù)位的方法是:ADC_DeInit(ADC1);分頻因子要確保ADC1的時鐘(ADCCLK)不要超過14Mhz。這個我們設(shè)置分頻因子位6,時鐘為72/6=12MHz,庫函數(shù)的實現(xiàn)方法是:RCC_ADCCLKConfig(RCC_PCLK2_Div6);2021/6/27333、初始化GPIO和ADC1參數(shù)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.12021/6/2734ADC_InitTypeDefADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:獨立模式ADC_InitStructure.ADC_ScanConvMode=DISABLE;//AD單通道模式ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//AD單次轉(zhuǎn)換模式ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC數(shù)據(jù)右對齊ADC_InitStructure.ADC_NbrOfChannel=1;//順序進行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目1ADC_Init(ADC1,&ADC_InitStructure);//根據(jù)指定的參數(shù)初始化外設(shè)ADCx2021/6/27354、使能ADC并校準使能ADC的方法:ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1校準包括復(fù)位校準和AD校準執(zhí)行復(fù)位校準的方法是:ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));//等待復(fù)位校準結(jié)束執(zhí)行ADC校準的方法是:ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));//等待AD校準結(jié)束2021/6/27365、設(shè)置規(guī)則組的通道,啟動A/D,讀取A/D結(jié)果我們這里是規(guī)則序列中的第1個轉(zhuǎn)換,同時采樣周期為239.5,所以設(shè)置為:ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);軟件開啟ADC轉(zhuǎn)換的方法:ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的軟件轉(zhuǎn)換啟動功能開啟轉(zhuǎn)換之后,就可以獲取轉(zhuǎn)換ADC轉(zhuǎn)換結(jié)果數(shù)據(jù),方法是:ADC_GetConversionValue(ADC1);2021/6/2737DAC數(shù)模轉(zhuǎn)換模塊2021/6/2738/*****************************************************************************名稱:voidRCC_Configuration(void)*功能:時鐘配置*入口參數(shù):無*出口參數(shù):無*說明:*調(diào)用方法:無****************************************************************************/voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時鐘配置}2021/6/2739voidDAC_Init(void){GPIO_InitTypeDefGPIO_InitStructure;DAC_InitTypeDefDAC_InitType;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE); //外設(shè)時鐘使能

/*GPIO的配置*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AIN;GPIO_Init(GPIOA,&GPIO_InitStructure);/*DAC的配置*/DAC_InitType.DAC_Trigger= DAC_Trigger_None; //不要硬件觸發(fā)

DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None; //不要波形

DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=0;DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable;DAC_Init(DAC_Channel_1,&DAC_InitType);/*使能DAC*/DAC_Cmd(DAC_Channel_1,ENABLE);DAC_SetChannel1Data(DAC_Align_12b_R,0);}2021/6/2740voidDAC1_Set_Vol(u16vol){floattemp;temp=vol;temp/=1000;temp=temp*4095/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,(u16)temp);}intmain(void){RCC_Configuration(); //系統(tǒng)時鐘配置

DAC_Init(); DAC1_Set_Vol(2000);while(1);}2021/6/2741

計數(shù)器模式TIM2-TIM5可以由向上計數(shù)、向下計數(shù)、中央對齊模式。STM32定時器簡介

向上計數(shù)模式:計數(shù)器從0計數(shù)到設(shè)定的數(shù)值,然后重新從0開始計數(shù)并且產(chǎn)生一個計數(shù)器溢出事件,這個事件也稱為更新事件。向下計數(shù)模式:計數(shù)器從設(shè)定的數(shù)值開始向下計數(shù)到0,然后自動從設(shè)定的數(shù)值重新向下計數(shù),并產(chǎn)生一個向下溢出事件,這個事件也稱為更新事件。中央對齊模式(向上/向下計數(shù)):計數(shù)器從0開始計數(shù)到設(shè)定的數(shù)值,產(chǎn)生一個計數(shù)器溢出事件,然后向下計數(shù)到1并且產(chǎn)生一個計數(shù)器下溢事件;再從0開始重新計數(shù)。2021/6/2742STM32定時器簡介

2021/6/2743(1)RCC配置;voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時鐘配置為72MHZ

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //定時器3時鐘使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); //外設(shè)時鐘使能}STM32定時器例程講解2021/6/2744(2)I/O口線配置voidGPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//選擇第11個引腳

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//配置為推挽輸出模式

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//口線翻轉(zhuǎn)速度最高為50MHzGPIO_Init(GPIOG,&GPIO_InitStructure);

}STM32定時器例程講解2021/6/2745(3)定時器初始化voidTIM3_Init(u16arr,u16psc){TIM_TimeBaseInitTypeDefTIM3_TimeBaseStructure;TIM3_TimeBaseStructure.TIM_Period=arr; //設(shè)置自動重裝載寄存器的值(設(shè)置定時時間)

TIM3_TimeBaseStructure.TIM_Prescaler=psc; //設(shè)置預(yù)分頻器的分頻值

TIM3_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//計數(shù)器向上計數(shù)模式

TIM3_TimeBaseStructure.TIM_ClockDivision=0x0;//設(shè)置時鐘分割

TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseStructure);//初始化TIM3TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//允許TIM3更新中斷

TIM_Cmd(TIM3,ENABLE);//啟動定時器3}STM32定時器例程講解2021/6/2746(4)NVIC初始化voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//中斷優(yōu)先級分組(0組)

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //選擇定時器3中斷

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//設(shè)置搶占優(yōu)先級的大小

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//設(shè)置從優(yōu)先級的大小

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //中斷使能

NVIC_Init(&NVIC_InitStructure); }STM32定時器例程講解2021/6/2747(5)定時器中斷voidTIM3_IRQHandler(void){staticu8flag=0; if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)//檢查TIM3更新中斷是否發(fā)生

{if(flag) { GPIO_ResetBits(GPIOG,GPIO_Pin_11); flag=0; }else { GPIO_SetBits(GPIOG,GPIO_Pin_11); flag=1; }

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論