




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
平臺(tái)簡(jiǎn)介處理器與外部數(shù)據(jù)溝通的橋梁01開發(fā)板Nucleo-F401RESTM32F401RE請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本2開發(fā)板板載用戶按鈕(B1)與PC13相連按鈕未按下時(shí),PC13上電壓為3.3V、按下時(shí)電壓為0V板載用戶LED(LD2)PA5連接控制3.3V時(shí)發(fā)光、0V時(shí)不發(fā)光板載USBST-LINK直接通過USB與計(jì)算機(jī)相連,利用MDK-ARM進(jìn)行程序開發(fā)USART2連接PA2和PA3USB供電且作為調(diào)試工具JP5選擇U5V供電JP6短接CN11和CN12短接請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本3KEILMDK-ARM新建工程“Device”對(duì)話框選擇“STMicroelectronics”-“STM32F401”-“STM32F401RE”-“STM32F401RETx”使用之前必須要先成功安裝STM32F401xx的資源包請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本4KEILMDK-ARM配置調(diào)試器新建或添加源文件startup.s異常向量表main.c接口定義處理函數(shù)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本5時(shí)鐘管理處理器系統(tǒng)是按照時(shí)鐘節(jié)奏運(yùn)行的02時(shí)鐘管理四種振蕩電路HSI振蕩器HSE振蕩器PLL頻率合成器用于I2S的PLL頻率合成器時(shí)鐘控制寄存器(CR)HSIONHSEONPLLONPLL2SON啟動(dòng)時(shí)默認(rèn)配置16MHz的HSI振蕩器使能,并選為SYSCLKHCLK=PCLK1=PCLK2=16MHzHPRE=PPRE1=PPRE2=1請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本7外設(shè)時(shí)鐘使能每個(gè)外設(shè)在使用前都要使能時(shí)鐘,其使能位在所隸屬的使能寄存器中AHB1ENRAHB2ENRAPB1ENRAPB2ENR請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本8寄存器位含義位含義位含義位含義位含義位含義位含義位含義AHB1ENR0GPIOAEN1GPIOBEN2GPIOCEN3GPIODEN4GPIOEEN12CECEN21DMA1EN22DMA2ENAHB2ENR7OTGFSEN--------------APB1ENR0TIM2EN1TIM3EN2TIM4EN3TIM5EN11WWDGEN14SPI2EN15SPI3EN17USART2EN21I2C1EN22I2C2EN23I2C3EN28PWREN--------APB2ENR0TIM1EN4USART1EN5USART6EN8ADC1EN11SDIOEN12SPI1EN13SPI4EN14SYSCFGEN16TIM9EN17TIM10EN18TIM11EN----------電源管理RCC共有21個(gè)寄存器,基地址為0x40023800結(jié)構(gòu)體描述typedefstruct{unsignedintCR,PLLCFGR,CFGR,CIR;//時(shí)鐘配置 unsignedintAHB1RSTR,AHB2RSTR,rsv0[2];//AHB外設(shè)重置 unsignedintAPB1RSTR,APB2RSTR,rsv1[2];//APB外設(shè)重置 unsignedintAHB1ENR,AHB2ENR,rsv3[2];//AHB外設(shè)時(shí)鐘使能 unsignedintAPB1ENR,APB2ENR,rsv4[2];//APB外設(shè)時(shí)鐘使能 unsignedintAHB1LPENR,AHB2LPENR,rsv5[2];//低功耗模式AHB外設(shè)時(shí)鐘使能 unsignedintAPB1LPENR,APB2LPENR,rsv6[2];//低功耗模式APB外設(shè)時(shí)鐘使能 unsignedintBDCR,CSR,rsv7[2],SSCGR,PLL2SCFGR,rsv8,DCKCFGR;}RCC_def;#defineRCC ((volatileRCC_def*)0x40023800)//定義RCC實(shí)例請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本9通用輸入輸出用作通用輸入、輸出接口,部分管腳可以提供AF復(fù)用功能03寄存器組配置寄存器模式寄存器(MODER)輸出類型寄存器(OTYPER)輸出速率寄存器(OSPEEDR)上拉下拉寄存器(PUPDR)備選功能寄存器(AFRL/H)數(shù)據(jù)寄存器數(shù)據(jù)輸入寄存器(IDR)數(shù)據(jù)輸出寄存器(ODR)位控制寄存器鎖定寄存器寄存器位含義311530142913281227112610259248237226215204193182171160MODER(0x00)MODE15MODE14MODE13MODE12MODE11MODE10MODE9MODE8MODE7MODE6MODE5MODE4MODE3MODE2MODE1MODE0MODEx:00-通用輸入、01-通用輸出、10-備選(AF)、11-模擬OTYPER(0x04)----------------OT15OT14OT13OT12OT11OT10OT9OT8OT7OT6OT5OT4OT3OT2OT1OT0OTx:0-推挽、1-開漏
OSPEEDR(0x08)OSPEED15OSPEED14OSPEED13OSPEED12OSPEED11OSPEED10OSPEED9OSPEED8OSPEED7OSPEED6OSPEED5OSPEED4OSPEED3OSPEED2OSPEED1OSPEED0OSPEEDx:00-低速、01-中速、10-高速、11-特高速PUPDR(0x0C)PUPD15PUPD14PUPD13PUPD12PUPD11PUPD10PUPD9PUPD8PUPD7PUPD6PUPD5PUPD4PUPD3PUPD2PUPD1PUPD0PUPDx:00-無、01-上拉、10-下拉、11-保留
IDR(0x10)----------------I15I14I13I12I11I10I9I8I7I6I5I4I3I2I1I0Ix:端口x的輸入值ODR(0x14)----------------O15O14O13O12O11O10O9O8O7O6O5O4O3O2O1O0Ix:端口x的輸出值A(chǔ)FRL(0x20)AFS7AFS6AFS5AFS4AFS3AFS2AFS1AFS0AFSx:端口x的備選功能號(hào)AF0-AF15AFRH(0x24)AFS15AFS14AFS13AFS12AFS11AFS10AFS9AFS8AFSx:端口x的備選功能號(hào)AF0-AF15寄存器組結(jié)構(gòu)體typedefstruct{unsignedintMODER,OTYPER,OSPEEDR,PUPDR,IDR,ODR,BSRR,LCKR,AFR[2];}GPIO_def;#defineGPIOA((volatileGPIO_def*)0x40020000)//GPIOA基地址指針#defineGPIOB((volatileGPIO_def*)0x40020400)//GPIOB基地址指針#defineGPIOC((volatileGPIO_def*)0x40020800)//GPIOC基地址指針操作步驟使能對(duì)應(yīng)GPIO口時(shí)鐘
配置對(duì)應(yīng)GPIO口的輸入輸出模式、速率根據(jù)設(shè)定的輸入輸出模式,操作相關(guān)數(shù)據(jù)寄存器應(yīng)用設(shè)計(jì)1功能需求開發(fā)呼吸燈功能LED一亮一滅,亮滅交替,周而復(fù)始亮滅時(shí)長均約1秒設(shè)計(jì)思路將PA5配置成數(shù)字推挽輸出利用PA5輸出高低電平控制LED的亮滅PA5輸出高電平并保持約1秒時(shí)長,再輸出低電平并保持1秒時(shí)長,反復(fù)操作PA5初始輸出高請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本13應(yīng)用設(shè)計(jì)1LED初始化函數(shù)LedInit函數(shù)實(shí)現(xiàn)對(duì)PA5的設(shè)置。voidLedInit(void){//設(shè)置PA5為通用推挽輸出、高速 RCC->AHB1ENR|=1<<0;//使能GPIOA時(shí)鐘 GPIOA->MODER=(GPIOA->MODER&~(0x3<<10))|(0x1<<10);//配PA5為輸出 GPIOA->OTYPER&=~(0x1<<5);//配PA5推挽輸出 GPIOA->OSPEEDR=(GPIOA->OSPEEDR&~(0x3<<10))|(0x2<<10);//配PA5為高速 GPIOA->ODR|=1<<5;//PA5輸出高電平}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本14應(yīng)用設(shè)計(jì)1燈亮滅控制函數(shù)LedFlash函數(shù)控制PA5電平輸出voidLedFlash(inton)//on==0滅on<>0亮{ if(on)//on<>0,PA5值應(yīng)為1 GPIOA->ODR|=1<<5;//也可用GPIOA->BSRR=1<<5代替 else//on==0,PA5值應(yīng)為0 GPIOA->ODR&=~(1<<5);//也可用GPIOA->BSRR=1<<21代替}延時(shí)1秒Delay函數(shù)實(shí)現(xiàn)空循環(huán)若干次voidDelay(void){ unsignedinti; for(i=4000000;i>0;i--);}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本15從C程序編譯結(jié)果反匯編可知循環(huán)一次需要執(zhí)行4指令周期故計(jì)算可得循環(huán)次數(shù)約為4000000應(yīng)用設(shè)計(jì)1主函數(shù)main函數(shù)完成時(shí)鐘使能、LED控制端口初始化,并循環(huán)控制燈亮變滅。intmain(){ LedInit(); //LED初始化 while(1) { LedFlash(1);//燈亮 Delay();//延時(shí) LedFlash(0);//燈滅 Delay();//延時(shí) } return0;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本16應(yīng)用設(shè)計(jì)2功能需求開發(fā)鍵控?zé)艄δ軣魷鐣r(shí),按一下按鈕燈亮燈亮?xí)r,按一下按鈕燈滅設(shè)計(jì)思路PA5配置成數(shù)字推挽輸出PC13配置成數(shù)字輸入檢測(cè)到PC13的輸入從高電平變?yōu)榈碗娖綍r(shí),PA5值翻轉(zhuǎn)PA5初始輸出高電平請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本17應(yīng)用設(shè)計(jì)2LED初始化函數(shù)LedInit函數(shù)實(shí)現(xiàn)對(duì)PA5的設(shè)置燈亮滅翻轉(zhuǎn)函數(shù)voidLedSw(){ GPIOA->ODR^=1<<5; }按鈕初始化函數(shù)voidBtnInit(){ RCC->AHB1ENR|=1<<2;//使能GPIOC時(shí)鐘 GPIOC->MODER&=~(0x3<<26);//配PC13為輸入 GPIOC->PUPDR=(GPIOC->PUPDR&~(0x3<<26))|(0x1<<26);//配PC13上拉}讀取按鈕值函數(shù)intBtnGet(){ return(GPIOC->IDR>>13)&0x1;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本18LedSw函數(shù)控制PA5電平翻轉(zhuǎn)BtnInit函數(shù)將PC13配置為數(shù)字輸入并上拉BtnGet函數(shù)實(shí)現(xiàn)對(duì)PC13電平的讀取應(yīng)用設(shè)計(jì)2主函數(shù)完成時(shí)鐘使能、LED和按鈕初始化,并循環(huán)讀取按鈕值控制燈亮滅intmain(){ intbtn_previous,btn_current; LedInit(); //LED初始化 BtnInit();//按鈕初始化 btn_previous=1;
請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本19while(1){btn_current=BtnGet();if(!btn_current){if(btn_previous)LedSw();}btn_previous=btn_current;}return0;}外部中斷外部設(shè)備所產(chǎn)生的信號(hào)通過EXTI觸發(fā)中斷04寄存器組配置寄存器中斷屏蔽寄存器(IMR)事件屏蔽寄存器(EMR)上升沿觸發(fā)選擇寄存器(RTSR)下降沿觸發(fā)選擇寄存器(FTSR)軟中斷事件寄存器(SWIER)掛起寄存器(PR)寄存器功能描述IMR(0x00)位i為0表示EXITi中斷屏蔽,為1表示EXTIi非中斷屏蔽。EMR(0x04)位i為0表示EXITi中斷屏蔽,為1表示EXTIi非中斷屏蔽。RTSR(0x08)位i為0表示EXITi禁用上升沿觸發(fā),為1表示EXTIi使用上升沿觸發(fā)。FTSR(0x0C)位i為0表示EXITi禁用下降沿觸發(fā),為1表示EXTIi使用下降沿觸發(fā)。SWIER(0x10)當(dāng)該位i為0時(shí),寫1使PR位i置1產(chǎn)生中斷請(qǐng)求。當(dāng)PR位i寫1清零時(shí),該位自動(dòng)清零。PR(0x14)位i為0表示EXITi未產(chǎn)生觸發(fā)請(qǐng)求,為1表示EXTIi已產(chǎn)生觸發(fā)請(qǐng)求。在EXTIi產(chǎn)生中斷請(qǐng)求時(shí)置位,通過向該位寫1清零。寄存器組結(jié)構(gòu)體typedefstruct{ unsignedintIMR,EMR,RTSR,FTSR,SWIER,PR;}EXTI_def;#defineEXTI((volatileEXTI_def*)0x40013C00)typedefstruct{ unsignedintMEMRMP,PMC,EXTICR[4],rsv[2],CMPCR;}SYSCFG_def;#defineSYSCFG((volatileSYSCFG_def*)0x40013800)EXTI0~EXTI15的端口源選擇每個(gè)寄存器配置4個(gè)端口,每個(gè)配置項(xiàng)為4位,值0-7分別表示PA-PHEXTICR1EXTI0~EXTI3EXTICR2EXTI4~EXTI7EXTICR3EXTI8~EXTI11EXTICR4EXTI12~EXTI15操作步驟配置外部中斷對(duì)應(yīng)GPIO口的時(shí)鐘配置對(duì)應(yīng)GPIO口的工作模式配置GPIO和EXTI的映射關(guān)系配置EXTI觸發(fā)條件配置中斷向量表和使能中斷編寫對(duì)應(yīng)中斷服務(wù)函數(shù)應(yīng)用設(shè)計(jì)功能需求開發(fā)鍵控?zé)艄δ軣魷鐣r(shí),按一下按鈕燈亮燈亮?xí)r,按一下按鈕燈滅設(shè)計(jì)思路PA5配置成數(shù)字推挽輸出PC13配置成數(shù)字輸入和外部中斷EXTI13線當(dāng)按下按鈕時(shí)產(chǎn)生下降沿觸發(fā)EXTI13中斷在中斷處理函數(shù)中PA5值翻轉(zhuǎn)PA5初始輸出高電平請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本23應(yīng)用設(shè)計(jì)中斷配置函數(shù)配置EXTI信號(hào)源為PC13,下降沿觸發(fā)。voidExIntInit(void){ RCC->AHB1ENR|=1<<2;//使能GPIOC時(shí)鐘 RCC->APB2ENR|=1<<14;//使能SYSCFG時(shí)鐘 SYSCFG->EXTICR[3]=(SYSCFG->EXTICR[3]&~(0xF<<4))|(2<<4);//EXTI13信號(hào)源為PC13 EXTI->IMR|=1<<13;//取消對(duì)EXTI13信號(hào)線的屏蔽 EXTI->FTSR|=1<<13;//設(shè)定EXTI13中斷觸發(fā)信號(hào)為下降沿 NVIC->ISER[1]|=1<<8;//在NVIC中設(shè)置EXTI15_10中斷使能}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本24LED初始化函數(shù)LedInit函數(shù)實(shí)現(xiàn)對(duì)PA5的設(shè)置燈亮滅翻轉(zhuǎn)函數(shù)LedSw函數(shù)控制PA5電平翻轉(zhuǎn)按鈕初始化函數(shù)BtnInit函數(shù)將PC13配置為數(shù)字輸入并上拉應(yīng)用設(shè)計(jì)主函數(shù)完成時(shí)鐘使能、LED端口初始化、按鈕端口初始化和外部中斷初始化intmain(void){ LedInit();//配置PA5 BtnInit();//配置PC13 ExIntInit();//配置EXTI13中斷相關(guān)屬性 while(1); return0;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本25通用定時(shí)器定時(shí)器用來產(chǎn)生精確的時(shí)間,同時(shí)支持捕獲/比較功能,還可以產(chǎn)生PWM波形05寄存器組配置寄存器控制寄存器1(CR1)DMA和中斷使能寄存器(DIER)中斷狀態(tài)寄存器(SR)計(jì)數(shù)寄存器(CNT)預(yù)分頻寄存器(PSC)自動(dòng)重載寄存器(ARR)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本27偏移寄存器位標(biāo)識(shí)功能0x00CR10CEN計(jì)數(shù)器使能開關(guān),1使能。1UDIS禁止產(chǎn)生更新事件標(biāo)志位,1禁止。2URS更新請(qǐng)求源,1表示只有計(jì)數(shù)器的上溢和下溢才觸發(fā)更新中斷或DMA請(qǐng)求。3OPM是否是單脈沖模式,1單脈沖模式。4DIR計(jì)數(shù)方向,0向上計(jì)數(shù),1向下計(jì)數(shù)。5-6CMS選擇計(jì)數(shù)器對(duì)齊模式。該選項(xiàng)有兩個(gè)bit位,取值為00時(shí)表示采用邊沿對(duì)齊模式,計(jì)數(shù)方向由DIR指明。其他取值分別對(duì)應(yīng)中央對(duì)齊模式的不同計(jì)數(shù)模式。0x0CDIER0UIE更新中斷使能,1使能,0禁止。1-4CCxIE通道比較/捕獲中斷使能,1使能,0禁止。6TIE觸發(fā)中斷使能,1使能,0禁止。8UDEDMA請(qǐng)求使能,1使能,0禁止。9-12CCxDE通道比較/捕獲DMA請(qǐng)求使能,1使能,0禁止。14TDE觸發(fā)DMA請(qǐng)求使能,1使能,0禁止。0x10SR0UIF更新中斷標(biāo)志位,當(dāng)發(fā)生更新事件時(shí)由硬件置為1,可由軟件置0清0。1-4CCxIF通道比較/捕獲中斷標(biāo)志。輸入模式下,捕獲事件發(fā)生時(shí)此標(biāo)志位被置1;輸出模式下,此標(biāo)志位在一個(gè)比較事件發(fā)生時(shí)被置1。該位可由軟件置0清0。6TIF觸發(fā)中斷標(biāo)志,發(fā)生觸發(fā)事件時(shí),此標(biāo)志由硬件置1。此位可軟件置0清0。9-12CCxOF通道捕獲溢出標(biāo)志,在CHxIF標(biāo)志位被置1后,捕獲事件再次發(fā)生時(shí),該標(biāo)志位由硬件置1,可由軟件清0。0x24CNT0-31當(dāng)前計(jì)數(shù)值,TIM2和TIM5為32位,其他為16位。0x28PSC0-15時(shí)鐘源的預(yù)分頻系數(shù)N,CK_CNT=CK_PSC/(N+1)。0x2CARR0-31計(jì)數(shù)器上限M,TIM2和TIM5為32位,其他為16位。寄存器組脈沖波形調(diào)制(PWM)產(chǎn)生不同占空比的周期脈沖捕獲/比較模式寄存器1/2(CCMR1/2)捕獲/比較使能寄存器(CCER)捕獲/比較寄存器1/2/3/4(CCR1/2/3/4)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本28偏移寄存器位標(biāo)識(shí)功能0x18CCMR10-1、8-9CC1/2通道1和2模式選擇,00表示通道為輸出,01、10和11對(duì)應(yīng)不同的輸入模式。3/11OC1/2PE通道1和2輸出比較影子寄存器使能,1-使能,0-禁止。4-5、12-14OC1/2M通道1和2的輸出比較模式0x18CCMR20-1、8-9CC3/4S通道3和4模式選擇,00表示通道為輸出,01、10和11對(duì)應(yīng)不同的輸入模式。3/11OC3/4通道3和4輸出比較影子寄存器使能,1-使能,0-禁止。4-5、12-14OC3/4M通道3和4的輸出比較模式0x20CCER0/4/8/12CCxE通道1/2/3/4捕獲/比較使能,1-使能,0-禁止。1/5/9/13CCxP通道1/2/3/4極性。輸出模式時(shí),0為高電平有效,1為低電平有效。輸入模式時(shí),0為上升沿作為捕獲或從模式下觸發(fā)的有效信號(hào)且信號(hào)不會(huì)被反轉(zhuǎn)。1為下降沿作為捕獲或從模式下觸發(fā)的有效信號(hào)且信號(hào)產(chǎn)生反轉(zhuǎn)。0x340x380x3C0x40CCR1CCR2CCR3CCR40-31當(dāng)通道x為輸入模式時(shí)為只讀狀態(tài),數(shù)值是上次捕獲事件發(fā)生時(shí)的計(jì)數(shù)器值。當(dāng)通道x為輸出模式時(shí),包含即將和計(jì)數(shù)器比較的值。TIM2和TIM5為32位,其他為16位。寄存器組結(jié)構(gòu)體typedefstruct{ unsignedintCR1,CR2,SMCR,DIER,SR,EGR,CCMR1,CCMR2,CCER; unsignedintCNT,PSC,ARR,rsv0; unsignedintCCR1,CCR2,CCR3,CCR4,rsv1,DCR,DMAR,OR;}TIM_def;#defineTIM2((volatileTIM_def*)0x40000000)操作步驟使能定時(shí)器時(shí)鐘配置定時(shí)器工作模式、計(jì)數(shù)方向配置定時(shí)器時(shí)鐘源預(yù)分頻系數(shù)配置定時(shí)器計(jì)數(shù)器自動(dòng)預(yù)裝載寄存器值開啟NVIC對(duì)應(yīng)時(shí)鐘中斷使能、設(shè)定優(yōu)先級(jí)開啟定時(shí)器更新使能,啟動(dòng)定時(shí)器使能請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本29應(yīng)用設(shè)計(jì)1功能需求開發(fā)呼吸燈功能LED一亮一滅,亮滅交替,周而復(fù)始亮滅時(shí)長均約1秒設(shè)計(jì)思路將PA5配置成數(shù)字推挽輸出利用PA5輸出高低電平控制LED的亮滅采用定時(shí)器TIM2作為1秒定時(shí)器每1秒觸發(fā)一次定時(shí)中斷在中斷處理函數(shù)內(nèi)反轉(zhuǎn)PA5的輸出電平請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本30應(yīng)用設(shè)計(jì)1LED初始化函數(shù)燈亮滅翻轉(zhuǎn)函數(shù)定時(shí)器初始化函數(shù)TimerInit函數(shù)對(duì)TIM2、NVIC相關(guān)寄存器進(jìn)行配置。時(shí)鐘源TIMCLK的頻率為16MHz,設(shè)計(jì)預(yù)分頻N=1000,計(jì)數(shù)器分頻M=16000,共1600000分頻,定時(shí)時(shí)長為M×N÷TIMCLK=1秒。因此預(yù)分頻寄存器PSC值為N-1=999,自動(dòng)重載寄存器ARR值為M-1=15999。voidTimerInit(void){ RCC->APB1ENR|=1<<0;//使能TIM2 TIM2->CR1=1<<7;//配置為自重載預(yù)載使能、邊沿對(duì)齊、向上計(jì)數(shù)工作模式 TIM2->PSC=999;//設(shè)定預(yù)分頻數(shù)16MHz÷1000=16kHz TIM2->ARR=15999;//設(shè)定計(jì)數(shù)器分頻數(shù)16kHz ÷16000=1Hz TIM2->DIER|=1<<0;//設(shè)置中斷更新使能 NVIC->ISER[0]|=1<<28;//在NVIC中設(shè)置TIM2中斷使能 TIM2->CR1|=1<<0;//開啟TIM2}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本31應(yīng)用設(shè)計(jì)1主函數(shù)完成時(shí)鐘使能、LED控制端口初始化和定時(shí)器初始化intmain(void){ ClkEn();//時(shí)鐘使能 LedInit();//LED初始化 TimerInit();//定時(shí)器初始化 while(1); return0;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本32應(yīng)用設(shè)計(jì)1功能需求開發(fā)呼吸燈功能LED一亮一滅,亮滅交替,周而復(fù)始亮滅時(shí)長均約1秒設(shè)計(jì)思路PA5配置成TIM2的CH1輸出定時(shí)器TIM2產(chǎn)生PWM波形周期為2秒且占空比為50%1秒時(shí)長的低電平1秒時(shí)長的高電平請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本33①使能定時(shí)器時(shí)鐘;②配置定時(shí)器工作模式、計(jì)數(shù)方向;③配置定時(shí)器時(shí)鐘源預(yù)分頻系數(shù);④配置定時(shí)器計(jì)數(shù)器自動(dòng)預(yù)裝載寄存器值;⑤配置定時(shí)器輸出比較值(設(shè)定占空比);⑥啟動(dòng)定時(shí)器使能。應(yīng)用設(shè)計(jì)2PWM輸出端口初始化PwmOutInit函數(shù)實(shí)現(xiàn)PA5復(fù)用為TIM2的CH1輸出。voidPwmOutInit(void){//PA5------>TIM2_CH1 RCC->AHB1ENR|=1<<0;//使能GPIOA //設(shè)置PA5為AF復(fù)用、推挽輸出、無上拉無下拉、中速 GPIOA->MODER=(GPIOA->MODER&~(0x3<<10))|(0x2<<10); GPIOA->OTYPER&=~(1<<5); GPIOA->PUPDR&=~(0x3<<10); GPIOA->OSPEEDR=(GPIOA->OSPEEDR&~(0x3<<10))|(1<<10); //設(shè)置AFRL寄存器,將PA5復(fù)用為TIM2的CH1輸出 GPIOA->AFR[0]=(GPIOA->AFR[0]&~(0xF<<20))|(1<<20);}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本34應(yīng)用設(shè)計(jì)2定時(shí)器初始化函數(shù)TimerInit函數(shù)實(shí)現(xiàn)定時(shí)器2的參數(shù)配置。voidTimerInit(void){ RCC->APB1ENR|=1<<0;//使能TIM2 TIM2->CR1=1<<7;//配置為自重載預(yù)載使能、邊沿對(duì)齊、向上計(jì)數(shù)工作模式 TIM2->PSC=1999;//16MHz÷2000=8kHz
TIM2->ARR=15999;//
8kHz÷16000=0.5HzPWM周期為2秒
//配置CH1為PWM1輸出模式 TIM2->CCMR1=(TIM2->CCMR1&~(0x00FF))|0x68; TIM2->CCER|=1;//使能比較通道1作為輸出 TIM2->CCR1=8000;//占空比為50% TIM2->CR1|=1;//開啟TIM2}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本35自動(dòng)重載寄存器ARR值為M-1=15999比較寄存器為計(jì)數(shù)器自動(dòng)重載值一半應(yīng)用設(shè)計(jì)2主函數(shù)完成時(shí)鐘使能、LED控制端口初始化和定時(shí)器初始化intmain(void){
PwmOutInit(); TimerInit(); while(1); return0;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本36通用同/異步收發(fā)器提供兩設(shè)備之間的串行雙工通信,支持中斷和DMA工作??刹捎幂喸?、中斷和DMA三種方式進(jìn)行數(shù)據(jù)收發(fā)。06寄存器組配置寄存器控制寄存器1(CR1)控制寄存器2(CR2)控制寄存器3(CR3)波特率寄存器(BRR)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本38偏移寄存器位標(biāo)識(shí)功能描述0x08BRR15~0低16bit有效,傳輸時(shí)鐘的分頻系數(shù)R_Baud。高12位保存分頻系數(shù)的整數(shù)部分,低4位保存分頻系數(shù)的小數(shù)部分。采用過采樣率為16時(shí),波特率=PCLK÷16÷R_Baud=PCLK÷BRR值。0xCCR113UEUSART使能,1允許,0禁止。12M字長,0表示8數(shù)據(jù)位,1表示9數(shù)據(jù)位。10PCE校驗(yàn)控制使能,0-禁止,1-使能。9PS校驗(yàn)選擇,0-偶校驗(yàn),1-奇校驗(yàn)。7TXEIE發(fā)送數(shù)據(jù)寄存器空中斷使能,1使能,0禁止。6TCIE發(fā)送完成中斷使能,1使能,0禁止。5RXNEIE接收數(shù)據(jù)寄存器非空中斷使能,1使能,0禁止。3TE發(fā)送使能,1允許,0禁止。2RE接收使能,1允許,0禁止。0x10CR212~13STOP停止位設(shè)定,00為1停止位、01為0.5停止位、10為2停止位、11為1.5停止位。11CLKENCK指針使能,1為允許,0為禁止。0x14CR310CTSIECTS中斷使能,1為允許,0為禁止9CTSECTS使能,1為允許,0為禁止。8RTSERTS使能,1為允許,0為禁止7DMATDMA發(fā)送使能,1為允許,0為禁止。6DMARDMA接收使能,1為允許,0為禁止。寄存器組狀態(tài)寄存器(SR)數(shù)據(jù)寄存器(DR)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本39偏移寄存器位標(biāo)識(shí)功能描述0x00SR9CTSCTS標(biāo)志位,1表示CTS復(fù)位,0表示CTS置位。7TXE發(fā)送數(shù)據(jù)寄存器空標(biāo)志位,1表示數(shù)據(jù)空,0表示非空。6TC傳輸結(jié)束標(biāo)志位,1表示結(jié)束,0表示沒有結(jié)束。5RXNE接收數(shù)據(jù)寄存器非空標(biāo)志,1表示由數(shù)據(jù),0表示無數(shù)據(jù)。3ORE數(shù)據(jù)溢出標(biāo)志位,1表示溢出發(fā)生,0無溢出。0x04DR8~0低9bit位有效,存放收發(fā)的數(shù)據(jù)。實(shí)質(zhì)是兩個(gè)同地址的寄存器,一個(gè)是用于接收的只讀寄存器,一個(gè)是用于發(fā)送的只寫寄存器。typedefstruct{ unsignedintSR,DR,BRR,CR1,CR2,CR3,GTPR;}USART_def;#defineUSART1((volatileUSART_def*)0x40011000)//USART1基地址#defineUSART6((volatileUSART_def*)0x40011400)//USART6基地址#defineUSART2((volatileUSART_def*)0x40044000)//USART2基地址操作步驟使能GPIO、USART時(shí)鐘配置GPIO對(duì)應(yīng)管腳復(fù)用模式配置USART波特率、停等位等屬性配置USART接收和發(fā)送使能需要中斷的配置中斷及中斷處理函數(shù),需要DMA的配DMA參數(shù)啟動(dòng)USART請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本40收發(fā)處理模式輪詢模式不斷查詢收或發(fā)狀態(tài)確定下一個(gè)收或發(fā)。不停查詢收發(fā)狀態(tài),發(fā)準(zhǔn)備好才能發(fā),收準(zhǔn)備好才能收。逐個(gè)數(shù)據(jù)發(fā)送與接收,且處理器要反復(fù)查詢。中斷模式收準(zhǔn)備好和發(fā)準(zhǔn)備好時(shí)產(chǎn)生中斷,在中斷處理程序中讀取或發(fā)送數(shù)據(jù)。實(shí)時(shí)性高,高效率。中斷處理程序需要對(duì)收發(fā)進(jìn)行管理。DMA模式將收發(fā)數(shù)據(jù)寄存器與存儲(chǔ)器建立DMA通道,由收準(zhǔn)備好和發(fā)準(zhǔn)備好來觸發(fā)傳輸。一旦啟動(dòng)就可以自動(dòng)完成,只需要查詢DMA是否完成就知道一次傳輸是否結(jié)束。需要對(duì)DMA操作狀態(tài)進(jìn)行檢查,以確定收發(fā)操作是否完成。DMA+中斷模式在DMA傳輸結(jié)束產(chǎn)生中斷,在中斷處理中進(jìn)行后續(xù)處理。請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本41接收查詢晚了,已收的數(shù)據(jù)可被后到數(shù)據(jù)更新,導(dǎo)致少收的情況兩次發(fā)送間隔較長輪詢模式應(yīng)用設(shè)計(jì)功能需求遠(yuǎn)程串行通信數(shù)據(jù)回傳確認(rèn)收到一個(gè)字符就立即發(fā)送出去串口通信參數(shù)為:波特率9600,8個(gè)數(shù)據(jù)位,無校驗(yàn)位,1個(gè)停止位。設(shè)計(jì)思路管腳PA2與PA3分別為USART1的TX和RX信號(hào)周而復(fù)始執(zhí)行檢查接收狀態(tài),一旦收到新數(shù)據(jù),立即將新數(shù)據(jù)發(fā)送出去請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本42輪詢模式應(yīng)用程序設(shè)計(jì)UART初始化函數(shù)完成GPIOA和USART2時(shí)鐘使能、管腳PA2和PA3的復(fù)用、配置USART2的波特率產(chǎn)生器和幀結(jié)構(gòu)等參數(shù),并使能串口的收發(fā)操作。voidUartInit(void){ RCC->AHB1ENR|=1;//使能GPIOA時(shí)鐘 RCC->APB1ENR|=1<<17;//使能USART2時(shí)鐘 //配置PA2、PA3為復(fù)用、推挽輸出、高速 GPIOA->MODER=(GPIOA->MODER&~(0xF<<4))|(0xA<<4); GPIOA->OTYPER&=~(0xF<<4); GPIOA->OSPEEDR=(GPIOA->OSPEEDR&~(0xF<<4))|(0xA<<4); //設(shè)置AFRL寄存器,PA2和PA3復(fù)用模式為AF7,分別為U2TX和U2RX GPIOA->AFR[0]=(GPIOA->AFR[0]&~(0xFF<<8))|(0x77<<8); USART2->BRR=1667;//BRR寄存器值=PCLK÷RBaud=16M/9600≈1667 USART2->CR1=(1<<13)|(1<<3)|(1<<2);//使能接收和發(fā)送功能}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本43輪詢模式應(yīng)用程序設(shè)計(jì)串口數(shù)據(jù)接收函數(shù)用來獲取已經(jīng)接收到的數(shù)據(jù),僅當(dāng)收到數(shù)據(jù)時(shí)才讀取數(shù)據(jù)并成功返回,未收到數(shù)據(jù)時(shí)返回失敗intUartRx(char*prxd){ if(!(USART2->SR&(0x1<<5))) return0; *prxd=(char)USART2->DR; return1;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本44數(shù)據(jù)發(fā)送函數(shù)用來發(fā)送數(shù)據(jù),僅當(dāng)發(fā)送數(shù)據(jù)寄存器空了才寫入數(shù)據(jù)并成功返回,發(fā)送數(shù)據(jù)寄存器未空時(shí)返回失敗。intUartTx(chartxd){ if(!(USART2->SR&(0x1<<7))) return0; USART2->DR=txd; return1;}輪詢模式應(yīng)用程序設(shè)計(jì)主函數(shù)使能時(shí)鐘,初始化UART,循環(huán)執(zhí)行轉(zhuǎn)發(fā)操作。intmain(void){ charch; UartInit(); while(1) { while(!UartRx(&ch)); while(!UartTx(ch)); } return0;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本45中斷模式應(yīng)用設(shè)計(jì)功能需求遠(yuǎn)程串行通信數(shù)據(jù)回傳確認(rèn)收到一個(gè)字符就立即發(fā)送出去串口通信參數(shù)為:波特率9600,8個(gè)數(shù)據(jù)位,無校驗(yàn)位,1個(gè)停止位。設(shè)計(jì)思路管腳PA2與PA3分別為USART1的TX和RX信號(hào)接收到數(shù)據(jù)時(shí)產(chǎn)生中斷,在中斷中將數(shù)據(jù)發(fā)送出去。請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本46中斷模式應(yīng)用程序設(shè)計(jì)UART初始化函數(shù)串口數(shù)據(jù)接收函數(shù)數(shù)據(jù)發(fā)送函數(shù)使能接收中斷函數(shù)UartRxIntEn函數(shù)使能接收中斷。voidUartRxIntEn(void){ USART2->CR1|=1<<5; NVIC->ISER[1]|=1<<6;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本47USART2中斷處理函數(shù)根據(jù)前面約定,中斷處理函數(shù)名定為USART2_IRQHandlervoidUSART2_IRQHandler(void){charch; while(!UartRx(&ch)); while(!UartTx(ch));}輪詢模式應(yīng)用程序設(shè)計(jì)主函數(shù)使能時(shí)鐘,初始化UART,使能接收中斷intmain(void){UartInit();UartRxIntEn();while(1);return0;}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本48DMA控制器實(shí)現(xiàn)外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸。無須處理器干預(yù),節(jié)省了處理器的資源來做其他操作。07寄存器組兩個(gè)DMAC請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本50偏移寄存器名稱功能描述0x00低中斷狀態(tài)寄存器LISR記錄當(dāng)前產(chǎn)生的各通道DMA事件和中斷0x04高中斷狀態(tài)寄存器HISR0x08低中斷標(biāo)志清除寄存器LIFCR清除中斷標(biāo)志位0x0C高中斷標(biāo)志清除寄存器HIFCR0x10流通道0配置寄存器S0CR配置通道0相關(guān)參數(shù),詳見表0x14流通道0計(jì)數(shù)器S0NDTR低16bit位有效,配置當(dāng)前需要傳送的數(shù)據(jù)數(shù)0x18流通道0外設(shè)地址寄存器S0PAR存放外設(shè)(存儲(chǔ)器)地址0x1C流通道0存儲(chǔ)器0地址寄存器S0M0AR存放存儲(chǔ)器0地址0x20流通道0存儲(chǔ)器1地址寄存器S0M1AR存放存儲(chǔ)器1地址0x24流通道0FIFO控制寄存器S0FCRFIFO控制、狀態(tài)、門限以及直接模式使能0x28流通道1配置寄存器S1CR
????0xCC流通道7FIFO控制寄存器S7FCR
寄存器組SxCR請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本51位標(biāo)識(shí)含義27~25CHSEL通道選擇,CH0-CH7。24~23MBURST存儲(chǔ)器突發(fā)傳輸配置,0-單次傳輸(直傳)、1-INCR4、2-INCR8、3-INCR16。22~21PBURST外設(shè)突發(fā)傳輸配置,0-單次傳輸(直傳)、1-INCR4、2-INCR8、3-INCR16。19CT當(dāng)前目標(biāo)(僅在雙緩沖模式),0-存儲(chǔ)器0(M0AR)、1-存儲(chǔ)器1(M1AR)。18DBM雙緩沖模式17~16PL優(yōu)先級(jí),0-低、1-中、2-高、3-特高。15PINCOS外設(shè)地址增量偏移大小,0-PSIZE、1-固定4。14~13MSIZE存儲(chǔ)器數(shù)據(jù)寬度,0-字節(jié)、1-半字、2-字。12~11PSIZE外設(shè)數(shù)據(jù)寬度,0-字節(jié)、1-半字、2-字。10MINC存儲(chǔ)器地址自增使能,1為允許,0為禁止。9PINC外設(shè)地址自增使能,1為允許,0為禁止。8CIRC循環(huán)模式使能,1為允許,0為禁止。7~6DIR傳輸方向,0-外設(shè)至存儲(chǔ)器、1-存儲(chǔ)器至外設(shè)、2-存儲(chǔ)器至存儲(chǔ)器。5PFCTRL外設(shè)流控,0-DMA是流控器、1-外設(shè)是流控器4TCIE傳輸完成中斷使能,1為允許,0為禁止。3HTIE傳輸一半中斷使能,1為允許,0為禁止。2TEIE傳輸錯(cuò)誤中斷使能,1為允許,0為禁止。1DMEIE直接模式錯(cuò)誤中斷使能,1為允許,0為禁止。0EN流通道使能,0-流通道禁用、1-流通道使能。寄存器組結(jié)構(gòu)體typedefstruct{ unsignedintCR,NDTR,PAR,M0AR,M1AR,FCR;}DMA_Stream_def;typedefstruct{ unsignedintLISR,HISR,LIFCR,HIFCR;}DMA_def;#defineDMA2((volatileDMA_def*)0x40026400)#defineDMA2_Stream7((volatileDMA_Stream_def*)0x400264B8)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本52外設(shè)DMA模式操作步驟使能外設(shè)和DMA時(shí)鐘配置DMA通道,包括傳輸模式、傳輸寬度、地址模式、源地址、目的地址和待發(fā)送數(shù)據(jù)數(shù)量以及通道對(duì)應(yīng)的硬件請(qǐng)求映射配置外設(shè)參數(shù)并使能收發(fā)和DMA傳輸功能使能DMA使能外設(shè)工作請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本53UARTDMA模式應(yīng)用設(shè)計(jì)功能需求遠(yuǎn)程串行通信數(shù)據(jù)回傳確認(rèn)。雙方每次連續(xù)傳輸8個(gè)字符。波特率9600,8個(gè)數(shù)據(jù)位,無校驗(yàn)位,1個(gè)停止位設(shè)計(jì)思路管腳PA2與PA3分別為USART2的TX和RX信號(hào)DMA1中的流通道6的通道4發(fā)送,從存儲(chǔ)器到UART的發(fā)送數(shù)據(jù)寄存器DMA1中的流通道5的通道4接收,從UART的接收數(shù)據(jù)寄存器到存儲(chǔ)器傳輸參數(shù)存儲(chǔ)器與外設(shè)之間傳輸存儲(chǔ)器和外設(shè)的數(shù)據(jù)寬度為8bit采用單次傳送方式外設(shè)地址為固定模式存儲(chǔ)器執(zhí)行增量地址方式。請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本54UARTDMA模式應(yīng)用設(shè)計(jì)串口初始化函數(shù)串口DMA發(fā)使能函數(shù)UartDmaTxEn函數(shù)使能USART2的DMA發(fā)。voidUartDmaTxEn(){ RCC->AHB1ENR|=(1<<21);//使能DMA1時(shí)鐘 USART2->CR3|=(1<<7);//使能UART2的DMAT DMA1_Stream6->CR=0; DMA1_Stream6->PAR=(int)&USART2->DR; DMA1_Stream6->CR=(4<<25)|(3<<16)|(1<<10)|(1<<6);}請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本55串口DMA發(fā)送函數(shù)UartDmaTx函數(shù)啟動(dòng)USART2的DMA發(fā)送voidUartDmaTx(char*tx_buf,inttx_len){ DMA1_Stream6->CR&=~1; DMA1_Stream6->M0AR=tx_buf; DMA1_Stream6->NDTR=tx_len; DMA1_Stream6->CR|=1;}串口DMA發(fā)送狀態(tài)獲取函數(shù)UartDmaTxSts函數(shù)返回DMA發(fā)送是否完成intUartDmaTxSts(){ if(!(DMA1->HISR&(1<<21))) return0; DMA1->HIFCR|=1<<21; return1;}UARTDMA模式應(yīng)用設(shè)計(jì)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本56串口DMA收使能函數(shù)UartDmaRxEn函數(shù)使能USART2的DMA收。voidUartDmaRxEn(){ RCC->AHB1ENR|=(1<<21);//使能DMA1時(shí)鐘 USART2->CR3|=(1<<6);//使能UART2的DMAR DMA1_Stream5->CR=0; DMA1_Stream5->PAR=(int)&USART2->DR; DMA1_Stream5->CR=(4<<25)|(3<<16)|(1<<10);}串口DMA接收函數(shù)UartRx函數(shù)啟動(dòng)USART2的DMA接收。voidUartDmaRx(char*rx_buf,intrx_len){ DMA1_Stream5->CR&=~1; DMA1_Stream5->M0AR=(int)rx_buf; DMA1_Stream5->NDTR=rx_len; DMA1_Stream5->CR|=1;}串口DMA接收狀態(tài)獲取函數(shù)UartDmaRxSts函數(shù)返回DMA接收是否完成。intUartDmaRxSts(){ if(!(DMA1->HISR&(1<<11))) return0; DMA1->HIFCR|=1<<11; return1;}UARTDMA模式應(yīng)用設(shè)計(jì)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本57主函數(shù)使能時(shí)鐘,初始化GPIO、USART1、DMA1,并反復(fù)執(zhí)行接收回發(fā)操作intmain(void){ charbuf[8];//定義數(shù)據(jù)緩沖 UartInit(); UartDmaTxEn(); UartDmaRxEn(); while(1) { UartDmaRx(buf,8); while(!UartDmaRxSts()); UartDmaTx(buf,8); while(!UartDmaTxSts()); } return0;}存儲(chǔ)器DMA模式應(yīng)用設(shè)計(jì)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本58功能需求將某存儲(chǔ)區(qū)的數(shù)據(jù)通過DMA方式復(fù)制到另一個(gè)存儲(chǔ)區(qū)內(nèi)設(shè)計(jì)思路DMA2的流通道4傳輸模式為存儲(chǔ)器與存儲(chǔ)器之間傳輸存儲(chǔ)器和存儲(chǔ)器的數(shù)據(jù)寬度為8bit采用單次傳送方式存儲(chǔ)器執(zhí)行增量地址方式存儲(chǔ)器DMA模式程序設(shè)計(jì)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本59DMA初始化函數(shù)DmaInit函數(shù)使能DMA2時(shí)鐘。voidDmaInit(){ RCC->AHB1ENR|=1<<22; DMA2_Stream4->CR=(7<<25)|(1<<10)|(1<<9)|(2<<6);//通道7,外設(shè)和存儲(chǔ)器均采用字節(jié)傳輸,地址均遞增,方向?yàn)榇鎯?chǔ)器至存儲(chǔ)器。}存儲(chǔ)器拷貝函數(shù)MemCpy函數(shù)實(shí)現(xiàn)兩個(gè)存儲(chǔ)區(qū)的數(shù)據(jù)復(fù)制。voidMemCpy(char*sbuf,char*dbuf,intlen){ DMA2_Stream4->CR&=~1; DMA2_Stream4->PAR=sbuf;//源存儲(chǔ)區(qū)首地址 DMA2_Stream4->M0AR=dbuf;//目的存儲(chǔ)區(qū)首地址 DMA2_Stream4->NDTR=len;//拷貝字節(jié)數(shù) DMA2_Stream4->CR|=(1<<0); //使能DMA while(!(DMA2->HISR&(1<<5)));//傳輸完成 DMA2->HIFCR|=1<<5;}存儲(chǔ)器DMA模式程序設(shè)計(jì)請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本60主函數(shù)使能DMA2,將一定義字符串復(fù)制到別一個(gè)存儲(chǔ)區(qū)。intmain(void){ charmytext[16]; DmaInit(); MemCpy("Helloworld!",mytext,13); while(1);return0;}模擬數(shù)字轉(zhuǎn)換器將各種傳感器所產(chǎn)生的模擬測(cè)量信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)以供MCU內(nèi)部使用08寄存器組常規(guī)通道和插入通道請(qǐng)?jiān)诓迦氩藛巍撁己晚撃_中修改此文本62偏移寄存器名稱功能描述0x00狀態(tài)寄存器SR4STRT1-常規(guī)通道轉(zhuǎn)換已經(jīng)啟動(dòng)、0-未啟動(dòng)。1EOC1-常規(guī)通道轉(zhuǎn)換完成、0-未完成。0x04控制寄存器1CR125~24RES轉(zhuǎn)換分辨率,00-12位、01-10位、10-8位、11-6位。15~13DISCNUM常規(guī)通道間斷模式通道數(shù),取值1~8。11DISCEN1-常規(guī)通道間斷模式使能、0-禁止。8SCAN1-掃描模式使能、0-禁用。5EOCIE1-常規(guī)通道轉(zhuǎn)換完成中斷使能,0-禁止0x08控制寄存器2CR230SWSTART1-常規(guī)通道的轉(zhuǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀杏樹買賣合同
- 物流運(yùn)輸行業(yè)多式聯(lián)運(yùn)平臺(tái)建設(shè)方案
- 汽車租賃轉(zhuǎn)租合同
- 自返式取樣器項(xiàng)目風(fēng)險(xiǎn)識(shí)別與評(píng)估綜合報(bào)告
- 2024-2030全球鈦制壓力容器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030年中國電腦絲印緞帶商標(biāo)行業(yè)深度研究分析報(bào)告
- 2024年全球及中國報(bào)警電源行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030年中國資壽項(xiàng)目投資可行性研究分析報(bào)告
- 建筑施工合同范文的質(zhì)量標(biāo)準(zhǔn)
- 社會(huì)服務(wù)機(jī)構(gòu)合同審核流程
- 貴州區(qū)域地質(zhì)地史概述
- Aptitude態(tài)度的重要性
- 《推薦》500kV輸電線路應(yīng)急處置預(yù)案6個(gè)
- 麗聲北極星分級(jí)繪本第三級(jí)下 The Class Trip 課件
- 放射性元素的衰變
- 第一課想聽聽我的忠告嗎
- 高英Lesson3 Pub Talk and the King27s English
- 防洪堤防工程堤頂高程的計(jì)算表
- 古詩詞常見題材之思鄉(xiāng)懷人詩鑒賞
- 《平方差公式(1)》導(dǎo)學(xué)案
- 等保三級(jí)基線要求判分標(biāo)準(zhǔn)v10
評(píng)論
0/150
提交評(píng)論