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

下載本文檔

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

文檔簡(jiǎn)介

2021/6/271嵌入式系統(tǒng)定義;與通用計(jì)算機(jī)系統(tǒng)的區(qū)別以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,從而能夠適應(yīng)實(shí)際應(yīng)用中對(duì)功能、可靠性、成本、體積、功耗和應(yīng)用環(huán)境有特殊要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的組成嵌入式處理器;外圍設(shè)備;操作系統(tǒng);應(yīng)用軟件嵌入式處理器分類(lèi)微控制器;微處理器;嵌入式DSP;片上系統(tǒng)緒論2021/6/272GPIOSTM32的GPIO有多種工作模式:輸入浮空;輸入上拉;輸入下拉;模擬輸入;推挽輸出;推挽復(fù)用;開(kāi)漏輸出;開(kāi)漏復(fù)用。要知道每種模式具體用在什么場(chǎng)合。GPIO的編程(可能有大題(編程題))用某個(gè)IO引腳控制一個(gè)LED燈,使其閃爍。要求畫(huà)出電路圖,并編程。2021/6/273STM32編寫(xiě)程序時(shí)要用到哪個(gè)模塊首先要開(kāi)啟那個(gè)模塊的時(shí)鐘voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時(shí)鐘配置為72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE); //打開(kāi)GPIO時(shí)鐘}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寫(xiě)0:GPIO_ResetBits(GPIOB,GPIO_Pin_5);寫(xiě)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í)行程序的過(guò)程中,突然發(fā)生了一些需要緊急處理的事件,這些事件通過(guò)某種方式觸發(fā)引起CPU暫停當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)去處理突發(fā)事件,待突發(fā)事件處理完畢后,CPU再返回繼續(xù)執(zhí)行剛剛被暫停的程序的過(guò)程就稱(chēng)之為中斷。2021/6/277STM32中斷優(yōu)先級(jí)分組優(yōu)先級(jí)越高,數(shù)值越低!搶占優(yōu)先級(jí)相同的任務(wù),響應(yīng)優(yōu)先級(jí)高的先響應(yīng),但不能互相搶占;搶占優(yōu)先級(jí)不同的,可以搶占低優(yōu)先級(jí)的CPU。2021/6/278STM32外部中斷的來(lái)源STM32和I/O口有關(guān)的中斷一共有16個(gè):GPIO的管腳GPIOx.0~GPIOx.15(x=A,B,C,D,E,F(xiàn),G)分別對(duì)應(yīng)中斷線15~0。這樣每個(gè)中斷線對(duì)應(yīng)了最多7個(gè)IO口,以線0為例:它對(duì)應(yīng)了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中斷線每次只能連接到1個(gè)IO口上,這樣就需要通過(guò)配置來(lái)決定對(duì)應(yīng)的中斷線配置到哪個(gè)GPIO上了。2021/6/279voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時(shí)鐘配置為72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //打開(kāi)AFIO時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE); //打開(kāi)GPIO時(shí)鐘}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)先級(jí)組別

NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; //選擇中斷通道:EXTI線0中斷,因?yàn)榘存I連接的是PA0腳

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

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

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

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

//其中兩個(gè)參數(shù)分別是中斷口和中斷口對(duì)應(yīng)的引腳號(hào)

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; //中斷使能,即開(kāi)中斷

EXTI_Init(&EXTI_InitStructure); //調(diào)用EXTI_Init固件庫(kù)函數(shù),將結(jié)構(gòu)體寫(xiě)入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”文件中,用的時(shí)候只需添加指令即可!2021/6/2714串行通信基礎(chǔ)

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

單位時(shí)間內(nèi)傳送的信息量。以每秒傳送的位為單位:電傳機(jī):10字符/秒,1個(gè)字符11位,波特率為:10×11=110(波特)2021/6/2716voidRCC_Configuration(void){SystemInit(); //系統(tǒng)時(shí)鐘配置為72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);//外設(shè)時(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ù)回送至超級(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ā)送完成標(biāo)志位 //等待發(fā)送完成}USART_ClearITPendingBit(USART1,USART_IT_RXNE);}STM32串口例程講解2021/6/2721直接存儲(chǔ)器存取DMA直接存儲(chǔ)器存取(DMA)用來(lái)提供在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速的無(wú)需CPU干預(yù)的數(shù)據(jù)傳輸。把數(shù)據(jù)傳輸?shù)娜蝿?wù)交給DMA執(zhí)行,CPU就可以去做別的事情了,提高了CPU的工作效率。

2021/6/2722Stm32有兩個(gè)DMA控制器,其中DMA1有7個(gè)通道,DMA2有5個(gè)通道,每個(gè)通道專(zhuān)門(mén)用來(lái)管理來(lái)自于一個(gè)或多個(gè)外設(shè)對(duì)存儲(chǔ)器訪問(wèn)的請(qǐng)求。

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

GPIO_Configuration(); //端口初始化

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

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

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); //串口時(shí)鐘使能

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; //無(wú)校驗(yàn)位

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無(wú)硬件流控

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); //開(kāi)啟串口的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)先級(jí)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ù)變量的模擬信號(hào)轉(zhuǎn)換為離散的數(shù)字信號(hào)。由于單片機(jī)只能處理數(shù)字信號(hào),因此,在對(duì)外部的模擬信號(hào)進(jìn)行分析、處理的過(guò)程中,必須使用ADC模塊將外部的模擬信號(hào)轉(zhuǎn)換成單片機(jī)所能處理的數(shù)字信號(hào)。ADC模數(shù)轉(zhuǎn)換模塊2021/6/2730分辨率

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //選擇定時(shí)器3中斷

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論