freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于stm32的溫度測量系統(tǒng)設(shè)計(jì)畢業(yè)論文(編輯修改稿)

2025-07-23 09:41 本頁面
 

【文章內(nèi)容簡介】 JTAG原理圖 TFTLCD電路設(shè)計(jì)TFTLCD采用34引腳,部分對應(yīng)關(guān)系為:LCD_LED對應(yīng)PC10;LCD_CS對應(yīng)PC9;LCD_RS對應(yīng)PC8;LCD_WR對應(yīng)PC7;LCD_RD對應(yīng)PC6;LCD_D[17:1];對應(yīng)PB[15:0] tftlcd原理圖4 軟件設(shè)計(jì)軟件設(shè)計(jì)部分,包括兩大部分:初始化和功能性設(shè)計(jì)。 系統(tǒng)初始化 時(shí)鐘的初始化時(shí)鐘是MCU的驅(qū)動(dòng)源,而STM32有三種不同的時(shí)鐘源來驅(qū)動(dòng)系統(tǒng)時(shí)鐘:HSI振蕩器時(shí)鐘、HSE振蕩器時(shí)鐘、PLL時(shí)鐘。HSI時(shí)鐘信號由內(nèi)部8MHz的RC振蕩器產(chǎn)生,可在2分頻后作為PLL輸入,HSE即高速外部時(shí)鐘信號由兩種時(shí)鐘源產(chǎn)生:HSE外部晶體/陶瓷諧振器、HSE用戶外部時(shí)鐘。而我選用的是PLL時(shí)鐘。主PLL以HSI時(shí)鐘除以2或HSE通過一個(gè)可配置分頻器的PLL2時(shí)鐘來倍頻后輸出。PLL2和PLL3由HSE通過一個(gè)可配置的分頻器提供時(shí)鐘。必須在使能每個(gè)PLL之前完成PLL的配置(選擇時(shí)鐘源、預(yù)分頻系數(shù)和倍頻系數(shù)等),同時(shí)應(yīng)該在它們的輸入時(shí)鐘穩(wěn)定(就緒位)后才能使能。一旦使能了PLL,這些參數(shù)將不能再被改變。 當(dāng)改變主PLL的輸入時(shí)鐘源時(shí),必須在選中了新的時(shí)鐘源(通過時(shí)鐘配置寄存器(RCC_CFGR)的PLLSRC位)之后才能關(guān)閉原來的時(shí)鐘源。時(shí)鐘中斷寄存器(RCC_CIR),可以在PLL就緒時(shí)產(chǎn)生一個(gè)中斷。 其代碼如下://系統(tǒng)時(shí)鐘初始化函數(shù) //pll:選擇的倍頻數(shù),從2開始,最大值為16 void Stm32_Clock_Init(u8 PLL) { unsigned char temp=0。 MYRCC_DeInit()。 //復(fù)位并配置向量表 RCCCR|=0x00010000。 //外部高速時(shí)鐘使能HSEON while(!(RCCCR17))。//等待外部時(shí)鐘就緒 RCCCFGR=0X00000400。 //APB1/2=DIV2。AHB=DIV1。 PLL=2。//抵消2個(gè)單位 RCCCFGR|=PLL18。 //設(shè)置PLL值 2~16 RCCCFGR|=116。 //PLLSRC ON FLASHACR|=0x32。 //FLASH 2個(gè)延時(shí)周期 RCCCR|=0x01000000。 //PLLON while(!(RCCCR25))。//等待PLL鎖定 RCCCFGR|=0x00000002。//PLL作為系統(tǒng)時(shí)鐘 while(temp!=0x02) //等待PLL作為系統(tǒng)時(shí)鐘設(shè)置成功 { temp=RCCCFGR2。 tempamp。=0x03。 } } Stm32_Clock_Init函數(shù)只有一個(gè)變量PLL,就是用來配置時(shí)鐘的倍頻數(shù)的,當(dāng)前所用的晶振為8Mhz,PLL的值設(shè)為9,那么STM32將運(yùn)行在72M的速度下。此外,在程序中經(jīng)常用到延時(shí)函數(shù),利用CM3內(nèi)核的處理器內(nèi)部包含的SysTick定時(shí)器來實(shí)現(xiàn)延時(shí),它是一個(gè)24位的倒計(jì)數(shù)定時(shí)器,當(dāng)記到0時(shí),將從RELOAD寄存器中自動(dòng)重裝載定時(shí)初值。只要不把它在SysTick控制及狀態(tài)寄存器中的使能位清除,就永不停息。使用SysTick來實(shí)現(xiàn)延時(shí),既不占用中斷,也不占用系統(tǒng)定時(shí)器。 I/O初始化每個(gè)GPI/O端口有兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR),一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR),一個(gè)16位復(fù)位寄存器(GPIOx_BRR)和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。 GPIO端口的每個(gè)位可以由軟件分別配置成多種模式: 輸入浮空 、輸入上拉、 輸入下拉 、模擬輸入、開漏輸出 、推挽式輸出、推挽式復(fù)用功能 、開漏復(fù)用功能。每個(gè)I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問(不允許半字或字節(jié)訪問)。GPIOx_BSRR和GPIOx_BRR寄存器允許對任何GPIO寄存器的讀/更改的獨(dú)立訪問;這樣,在讀和更改訪問之間產(chǎn)生IRQ時(shí)不會發(fā)生危險(xiǎn)。下圖給出了一個(gè)I/O端口位的基本結(jié)構(gòu)。 I/O端口結(jié)構(gòu) 首先為了方便函數(shù)的編寫,進(jìn)行IO口的地址映射,如下(列舉部分):define BITBAND(addr, bitnum) ((addr amp。 0xF0000000)+0x2000000+((addr amp。0xFFFFF)5)+(bitnum2)) define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射 define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C 在使用IO口前需要使能相應(yīng)端口的時(shí)鐘,然后配置它的模式。與配置相關(guān)的兩個(gè)寄存器位CRL,CRH,其結(jié)構(gòu)如下所示 CRL/CRH寄存器結(jié)構(gòu)該寄存器的復(fù)位值為0X4444 4444,從上圖可以看到,復(fù)位值其實(shí)就是配置端口為浮空輸入模式。從上圖還可以得出:STM32的CRL控制著每個(gè)IO端口(A~G)的低8位的模式。每個(gè)IO端口的位占用CRL的4個(gè)位,高兩位為CNF,低兩位為MODE。這里我們可以記住幾個(gè)常用的配置,比如0X0表示模擬輸入模式(ADC用)、0X3表示推挽輸出模式(做輸出口用,50M速率)、0X8表示上/下拉輸入模式(做輸入口用)、0XB表示復(fù)用輸出(使用IO口的第二功能,50M速率)。 CRH的作用和CRL完全一樣,只是CRL控制的是低8位輸出口,而CRH控制的是高8位輸出口。 RCCAPB2ENR|=12。 //使能PORTA時(shí)鐘 RCCAPB2ENR|=15。 //使能PORTD時(shí)鐘 GPIOACRHamp。=0XFFFFFFF0。 GPIOACRH|=0X00000003。//PA8 推挽輸出 GPIOAODR|=18。 //PA8 輸出高 GPIODCRLamp。=0XFFFFF0FF。 GPIODCRL|=0X00000300。//PD2 推挽輸出 GPIODODR|=12。 //PD2 輸出高這里PA2與PD2分別對應(yīng)LED0和LED1。此外,按鍵的初始化也就是對I/O進(jìn)行設(shè)置,key0與key1分別對應(yīng)PA13和PA15,都設(shè)置為上拉輸入。 RCCAPB2ENR|=12。 //使能PORTA時(shí)鐘 GPIOACRHamp。=0X000FFFFF。 GPIOACRH|=0X80800000。 //PA13,15 設(shè)置為輸入 GPIOAODR|=113。 //PA13上拉 GPIOAODR|=115。 //PA15上拉 串口初始化本次設(shè)計(jì)中藍(lán)牙的收發(fā)都是通過串口傳至STM32內(nèi),串口最基本的設(shè)置,就是波特率的設(shè)置。STM32的串口使用需要開啟了串口時(shí)鐘,并設(shè)置相應(yīng)IO口的模式,然后配置一下波特率,數(shù)據(jù)位長度,奇偶校驗(yàn)位等信息。具體步驟如下。串口時(shí)鐘使能。串口作為STM32的一個(gè)外設(shè),其時(shí)鐘由外設(shè)時(shí)鐘使能寄存器控制,其中串口1是在APB2ENR寄存器的第14位。除了串口1的時(shí)鐘使能在APB2ENR寄存器,其他串口的時(shí)鐘使能位都在APB1ENR寄存器。串口復(fù)位。當(dāng)外設(shè)出現(xiàn)異常的時(shí)候可以通過復(fù)位寄存器里面的對應(yīng)位設(shè)置,實(shí)現(xiàn)該外設(shè)的復(fù)位,然后重新配置這個(gè)外設(shè)達(dá)到讓其重新工作的目的。一般在系統(tǒng)剛開始配置外設(shè)的時(shí)候,都會先執(zhí)行復(fù)位該外設(shè)的操作。串口1的復(fù)位是通過配置APB2RSTR寄存器的第14位來實(shí)現(xiàn)的。串口波特率設(shè)置。每個(gè)串口都有一個(gè)自己獨(dú)立的波特率寄存器USART_BRR,通過設(shè)置該寄存器就可以達(dá)到配置不同波特率的目的。串口控制。STM32的每個(gè)串口都有3個(gè)控制寄存器USART_CR1~3,串口的很多配置都是通過這3個(gè)寄存器來設(shè)置的。 USART_CR寄存器各位描述該寄存器的高18位沒有用到,低14位用于串口的功能設(shè)置。UE為串口使能位,通過該位置1,以使能串口。M為字長選擇位,當(dāng)該位為0的時(shí)候設(shè)置串口為8個(gè)字長外加n個(gè)停止位,停止位的個(gè)數(shù)(n)是根據(jù)USART_CR2的[13:12]位設(shè)置來決定的,默認(rèn)為0。PCE為校驗(yàn)使能位,設(shè)置為0,則禁止校驗(yàn),否則使能校驗(yàn)。PS為校驗(yàn)位選擇,設(shè)置為0則為偶校驗(yàn),否則為奇校驗(yàn)。TXIE為發(fā)送緩沖區(qū)空中斷使能位,設(shè)置該位為1,當(dāng)USART_SR中的TXE位為1時(shí),將產(chǎn)生串口中斷。TCIE為發(fā)送完成中斷使能位,設(shè)置該位為1,當(dāng)USART_SR中的TC位為1時(shí),將產(chǎn)生串口中斷。RXNEIE為接收緩沖區(qū)非空中斷使能,設(shè)置該位為1,當(dāng)USART_SR中的ORE或者RXNE位為1時(shí),將產(chǎn)生串口中斷。TE為發(fā)送使能位,設(shè)置為1,將開啟串口的發(fā)送功能。RE為接收使能位,用法同TE。 數(shù)據(jù)發(fā)送與接收。STM32的發(fā)送與接收是通過數(shù)據(jù)寄存器USART_DR來實(shí)現(xiàn)的,這是一個(gè)雙寄存器,包含了TDR和RDR。當(dāng)向該寄存器寫數(shù)據(jù)的時(shí)候,串口就會自動(dòng)發(fā)送,當(dāng)收到收據(jù)的時(shí)候,也是存在該寄存器內(nèi)。該寄存器的各位描述如下圖所示: USART_DR寄存器各位描述 串口狀態(tài)。串口的狀態(tài)可以通過狀態(tài)寄存器USART_SR讀取。USART_SR的各位描述如下圖所示: USART_SR寄存器各位描述 RXNE(讀數(shù)據(jù)寄存器非空),當(dāng)該位被置1的時(shí)候,就是提示已經(jīng)有數(shù)據(jù)被接收到了,并且可以讀出來了。這時(shí)候我們要做的就是盡快去讀取USART_DR,通過讀USART_DR可以將該位清零,也可以向該位寫0,直接清除。 TC(發(fā)送完成),當(dāng)該位被置位的時(shí)候,表示USART_DR內(nèi)的數(shù)據(jù)已經(jīng)被發(fā)送完成了。如果設(shè)置了這個(gè)位的中斷,則會產(chǎn)生中斷。該位也有兩種清零方式:1)讀USART_SR,寫USART_DR。2)直接向該位寫0。 代碼如下:void uart_init(u32 pclk2,u32 bound){ float temp。 u16 mantissa。 u16 fraction。 temp=(float)(pclk2*1000000)/(bound*16)。//得到USARTDIV mantissa=temp。 //得到整數(shù)部分 fraction=(tempmantissa)*16。 //得到小數(shù)部分 mantissa=4。 mantissa+=fraction。 RCCAPB2ENR|=12。 //使能PORTA口時(shí)鐘 RCCAP
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1