版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
ARM微控制器與嵌入式系統(tǒng)
定時器輸出PWM編程實(shí)驗(yàn)內(nèi)容定時器輸出PWM編程任務(wù)定時器輸出PWM編程要點(diǎn)編程實(shí)驗(yàn)定時器輸出PWM編程任務(wù)任務(wù)要求:使用定時器TIM3的四個通道輸出PWM信號四個通道的PWM信號頻率都是500Hz占空比分別為20%,40%,60%,80%,使用示波器顯示出來。其中第一個通道的占空比可以循環(huán)變化,當(dāng)接led燈時能夠從燈的亮滅觀察出占空比的變化。定時器生成PWM的編程要點(diǎn)1、開啟GPIO時鐘、定時器時鐘2、PWM輸出端口配置3、復(fù)用引腳功能映射4、定時器配置5、輸出通道配置6、PWM使能7、設(shè)置比較器值輸出PWMPWM輸出端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空模式GPIO_Init(GPIOB,&GPIO_InitStructure); 定時器配置TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Prescaler=84-1;//預(yù)分頻系數(shù)TIM_TimeBaseStructure.TIM_Period=2000-1;//定時器初值TIM_TimeBaseStructureTIM_CounterMode=TIM_CounterMode_Up;//計數(shù)模式TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//分頻因子TIM_RepetitionCounter=0; //重復(fù)計數(shù)TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);輸出通道配置、輸出使能TIM_OCInitTypeDefTIM_OCInitStructure;TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//配置為PWM模式1TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//輸出通道使能 TIM_OCInitStruct.TIM_Pulse=1000-1;//配置占空比為1000/2000=50%TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//計數(shù)小于CCR1為高電平TIM_OC1Init(TIM3,&TIM_OCInitStruct); //使能通道1TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能通道1重載TIM_Cmd(TIM3,ENABLE);
定時器輸出PWM編程實(shí)驗(yàn)小結(jié)定時器輸出PWM編程任務(wù)定時器輸出PWM編程要點(diǎn)編程實(shí)驗(yàn)ARM微控制器與嵌入式系統(tǒng)
定時器輸出PWM編程實(shí)例主講人:景妮琴北京電子科技職業(yè)學(xué)院PWM應(yīng)用數(shù)模轉(zhuǎn)換電機(jī)控制音調(diào)產(chǎn)生燈的亮度控制使用PWM進(jìn)行數(shù)模轉(zhuǎn)換使用PWM驅(qū)動揚(yáng)聲器使用PWM調(diào)節(jié)燈的亮度使用PWM控制電機(jī)內(nèi)容定時器輸出PWM編程實(shí)例通過PWM產(chǎn)生音調(diào)通過PWM產(chǎn)生一首樂曲定時器生成PWM的編程要點(diǎn)1、開啟GPIO時鐘、定時器時鐘2、PWM輸出端口配置3、復(fù)用引腳功能映射4、定時器配置5、輸出通道配置6、PWM使能7、設(shè)置比較器值輸出PWMPWM輸出端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空模式GPIO_Init(GPIOB,&GPIO_InitStructure); 定時器配置TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Prescaler=84-1;//預(yù)分頻系數(shù)TIM_TimeBaseStructure.TIM_Period=2000-1;//定時器初值TIM_TimeBaseStructureTIM_CounterMode=TIM_CounterMode_Up;//計數(shù)模式TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//分頻因子TIM_RepetitionCounter=0; //重復(fù)計數(shù)TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);輸出通道配置、輸出使能TIM_OCInitTypeDefTIM_OCInitStructure;TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//配置為PWM模式1TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//輸出通道使能 TIM_OCInitStruct.TIM_Pulse=1000-1;//配置占空比為1000/2000=50%TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//計數(shù)小于CCR1為高電平TIM_OC1Init(TIM3,&TIM_OCInitStruct); //使能通道1TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能通道1重載TIM_Cmd(TIM3,ENABLE);
定時器輸出PWM編程實(shí)例通過PWM產(chǎn)生音調(diào)定時器輸出PWM編程實(shí)例通過PWM產(chǎn)生一首樂曲小結(jié)定時器輸出PWM編程實(shí)例通過PWM產(chǎn)生音調(diào)通過PWM產(chǎn)生一首樂曲ARM微控制器與嵌入式系統(tǒng)
I2C協(xié)議主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容I2C串行總線概述I2C協(xié)議—物理層I2C協(xié)議—協(xié)議層I2C總線數(shù)據(jù)傳送的模擬I2C串行總線概述采用串行總線技術(shù)可以使系統(tǒng)的硬件設(shè)計大大簡化、系統(tǒng)的體積減小、可靠性提高。同時,系統(tǒng)的更改和擴(kuò)充極為容易。常用的串行擴(kuò)展總線有:I2C(InterICBUS)總線、單總線(1-WIREBUS)、SPI(SerialPeripheralInterface)總線及Microwire/PLUS等。I2C總線是PHLIPS公司推出的一種串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線裁決和高低速器件同步功能的高性能串行總線。I2C串行總線概述I2C串行總線概述I2C總線只有兩根雙向信號線。一根是數(shù)據(jù)線SDA,另一根是時鐘線SCL。I2C串行總線概述I2C總線通過上拉電阻接正電源。當(dāng)總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線“與”關(guān)系。I2C串行總線概述每個接到I2C總線上的器件都有唯一的地址。主機(jī)與器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到器件,這時主機(jī)即為發(fā)送器??偩€上接收數(shù)據(jù)的器件則為接收器。
在多主機(jī)系統(tǒng)中,可能同時有幾個主機(jī)企圖啟動總線傳送數(shù)據(jù)。為了避免混亂,I2C總線要通過總線仲裁,以決定由哪一臺主機(jī)控制總線。在單片機(jī)應(yīng)用系統(tǒng)的串行總線擴(kuò)展中,我們經(jīng)常遇到的是以單片機(jī)為主機(jī),其它接口器件為從機(jī)的單主機(jī)情況。I2C協(xié)議—物理層I2C協(xié)議簡介I2C通訊協(xié)議(Inter-IntegratedCircuit)是由Philips公司開發(fā)的,由于它引腳少,硬件實(shí)現(xiàn)簡單,可擴(kuò)展性強(qiáng),不需要USART、CAN等通訊協(xié)議的外部收發(fā)設(shè)備,現(xiàn)在被廣泛地使用在系統(tǒng)內(nèi)多個集成電路(IC)間的通訊。I2C協(xié)議—物理層它是一個支持多設(shè)備的總線?!翱偩€”指多個設(shè)備共用的信號線。一個I2C總線只使用兩條總線線路,串行數(shù)據(jù)線:SDA,用來表示數(shù)據(jù)串行時鐘線
:SCL,用于數(shù)據(jù)收發(fā)同步I2C協(xié)議—物理層每個連接到總線的設(shè)備都有一個獨(dú)立的地址,主機(jī)可以利用這個地址進(jìn)行不同設(shè)備之間的訪問??偩€通過上拉電阻接到電源。當(dāng)I2C設(shè)備空閑時,會輸出高阻態(tài),而當(dāng)所有設(shè)備都空閑,都輸出高阻態(tài)時,由上拉電阻把總線拉成高電平。7位地址最多連接128個設(shè)備10位地址最多連接1024個設(shè)備I2C協(xié)議—物理層具有三種傳輸模式:標(biāo)準(zhǔn)模式傳輸速率為100kbit/s快速模式為400kbit/s高速模式下可達(dá)3.4Mbit/s,但目前大多I2C設(shè)備尚不支持高速模式。連接到相同總線的IC數(shù)量受到總線的最大電容400pF限制
。I2C協(xié)議—協(xié)議層I2C的協(xié)議定義了:通訊的起始和停止信號數(shù)據(jù)有效性響應(yīng)仲裁時鐘同步地址廣播I2C協(xié)議—協(xié)議層起始和停止信號:SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示停止信號。起始和停止信號一般由主機(jī)產(chǎn)生。I2C協(xié)議—協(xié)議層數(shù)據(jù)位的有效性規(guī)定:I2C總線進(jìn)行數(shù)據(jù)傳送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。I2C協(xié)議—協(xié)議層地址及數(shù)據(jù)方向:I2C總線上的每個設(shè)備都有自己的獨(dú)立地址,主機(jī)發(fā)起通訊時,通過SDA信號線發(fā)送設(shè)備地址(SLAVE_ADDRESS)來查找從機(jī)。設(shè)備地址可以是7位或10位。緊跟設(shè)備地址的一個數(shù)據(jù)位R/W用來表示數(shù)據(jù)傳輸方向,數(shù)據(jù)方向位為“1”時表示主機(jī)由從機(jī)讀數(shù)據(jù),該位為“0”時表示主機(jī)向從機(jī)寫數(shù)據(jù)。I2C協(xié)議—協(xié)議層響應(yīng):I2C的數(shù)據(jù)和地址傳輸都帶響應(yīng)。響應(yīng)包括“應(yīng)答(ACK)”和“非應(yīng)答(NACK)”兩種信號。傳輸時主機(jī)產(chǎn)生時鐘,在第9個時鐘時,數(shù)據(jù)發(fā)送端會釋放SDA的控制權(quán),由數(shù)據(jù)接收端控制SDA,若SDA為高電平,表示非應(yīng)答信號(NACK),低電平表示應(yīng)答信號(ACK)。I2C協(xié)議—協(xié)議層數(shù)據(jù)傳輸?shù)臄?shù)據(jù)幀格式:
I2C總線上傳送的數(shù)據(jù)信號是廣義的,既包括地址信號,又包括真正的數(shù)據(jù)信號。在起始信號后必須傳送一個從機(jī)的地址(可以是7位),接下來(第8位)是數(shù)據(jù)的傳送方向位,用“0”表示主機(jī)發(fā)送數(shù)據(jù)(T),“1”表示主機(jī)接收數(shù)據(jù)(R)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號結(jié)束。若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可以不產(chǎn)生終止信號,馬上再次發(fā)出起始信號對另一從機(jī)進(jìn)行尋址。數(shù)據(jù)傳輸分為:主機(jī)寫數(shù)據(jù)到從機(jī)主機(jī)由從機(jī)中讀數(shù)據(jù)寫數(shù)據(jù)與讀數(shù)據(jù)的復(fù)合格式I2C協(xié)議—協(xié)議層主機(jī)寫數(shù)據(jù)到從機(jī):主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個傳送過程中不變。起始信號——從機(jī)地址——讀寫信號—應(yīng)答位—數(shù)據(jù)位——應(yīng)答位——……——停止位I2C協(xié)議—協(xié)議層主機(jī)由從機(jī)中讀數(shù)據(jù):主機(jī)在第一個字節(jié)后,立即從從機(jī)讀數(shù)據(jù)。起始信號——從機(jī)地址——讀寫信號—應(yīng)答位—數(shù)據(jù)位——應(yīng)答位——……——停止位陰影部分:數(shù)據(jù)由主機(jī)傳輸至從機(jī)無陰影部分:數(shù)據(jù)由從機(jī)傳輸至主機(jī)A表示應(yīng)答,A非表示非應(yīng)答(高電平)。S表示起始信號,P表示終止信號。R/W表示傳輸方向選擇位,1為讀,0為寫。I2C協(xié)議—協(xié)議層寫數(shù)據(jù)與讀數(shù)據(jù)的復(fù)合格式:在傳送過程中,當(dāng)需要改變傳送方向時,起始信號和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反相。。I2C總線數(shù)據(jù)傳送的模擬主機(jī)若是采用不帶I2C總線接口的單片機(jī),如80C51、AT89C2051等單片機(jī),就需要利用軟件實(shí)現(xiàn)I2C總線的數(shù)據(jù)傳送,即軟件與硬件結(jié)合的信號模擬。為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)的I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時序要求。I2C總線數(shù)據(jù)傳送的模擬I2C總線的起始信號、終止信號、發(fā)送“0”及發(fā)送“1”的模擬時序?yàn)椋篒2C總線數(shù)據(jù)傳送的模擬起始信號的模擬voidI2CStart(void){ SDA=1; SomeNop(); SCL=1; SomeNop(); SDA=0; SomeNop();}終止信號的模擬voidI2cStop(void){SDA=0;SomeNop();SCL=1;SomeNop();SDA=1;SomeNop();}小結(jié)IIC概述IIC協(xié)議—物理層IIC協(xié)議—協(xié)議層I2C總線數(shù)據(jù)傳送的模擬ARM微控制器與嵌入式系統(tǒng)
STM32-I2C主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容STM32的I2C特性及架構(gòu)STM32的I2C框圖STM32的I2C通信STM32的I2C特性I2C(內(nèi)部集成電路)總線接口用作微控制器和I2C串行總線之間的接口。它提供多主模式功能,可以控制所有I2C總線特定的序列、協(xié)議、仲裁和時序。它支持標(biāo)準(zhǔn)和快速模式。它還與SMBus2.0兼容。STM32的I2C特性并行總線/I2C協(xié)議轉(zhuǎn)換器多主模式功能:同一接口既可用作主模式也可用作從模式I2C主模式特性:時鐘生成起始位和停止位生成I2C從模式特性:可編程I2C地址檢測雙尋址模式,可對2個從地址應(yīng)答停止位檢測STM32的I2C特性7位/10位尋址以及廣播呼叫的生成和檢測支持不同的通信速度:標(biāo)準(zhǔn)速度(高達(dá)100kHz)快速速度(高達(dá)400kHz)狀態(tài)標(biāo)志:發(fā)送/接收模式標(biāo)志字節(jié)傳輸結(jié)束標(biāo)志I2C忙碌標(biāo)志STM32的I2C特性錯誤標(biāo)志:主模式下的仲裁丟失情況地址/數(shù)據(jù)傳輸完成后的應(yīng)答失敗檢測誤放的起始位和停止位禁止時鐘延長后出現(xiàn)的上溢/下溢2個中斷向量:一個中斷由成功的地址/數(shù)據(jù)字節(jié)傳輸事件觸發(fā)一個中斷由錯誤狀態(tài)觸發(fā)STM32的I2C特性及架構(gòu)軟件模擬協(xié)議:使用CPU直接控制通信引腳的電平,產(chǎn)生出符合通信協(xié)議標(biāo)準(zhǔn)的邏輯。硬件實(shí)現(xiàn)協(xié)議:由STM32的I2C片上外設(shè)專門負(fù)責(zé)實(shí)現(xiàn)I2C通信協(xié)議,只要配置好該外設(shè),它就會自動根據(jù)協(xié)議要求產(chǎn)生通信信號,收發(fā)數(shù)據(jù)并緩存起來,CPU只要檢測該外設(shè)的狀態(tài)和訪問數(shù)據(jù)寄存器,就能完成數(shù)據(jù)收發(fā)。這種由硬件外設(shè)處理I2C協(xié)議的方式減輕了CPU的工作,且使軟件設(shè)計更加簡單。STM32的I2C框圖通信引腳時鐘控制邏輯數(shù)據(jù)控制邏輯整體控制邏輯STM32的I2C框圖1.通信引腳STM32芯片有多個I2C外設(shè),它們的I2C通信信號引出到不同的GPIO引腳上,使用時必須配置到這些指定的引腳。引腳I2C編號I2C1I2C2I2C3SCLPB6/PB8PF1/PB10/PH4PA8/PH7SDAPB7/PB9PF0/PB11/PH5PC9/PH8STM32的I2C框圖2.時鐘控制邏輯SCL線的時鐘信號,由I2C接口根據(jù)時鐘控制寄存器(CCR)控制,控制的參數(shù)主要為時鐘頻率??蛇x擇I2C通信的“標(biāo)準(zhǔn)/快速”模式,這兩個模式分別I2C對應(yīng)100K/400Kbit/s的通信速率。在快速模式下可選擇SCL時鐘的占空比,可選Tlow/Thigh=2或Tlow/Thigh=16/9模式。CCR寄存器中12位的配置因子CCR,它與I2C外設(shè)的輸入時鐘源共同作用,產(chǎn)生SCL時鐘。STM32的I2C外設(shè)輸入時鐘源為PCLK1。STM32的I2C框圖2.時鐘控制邏輯計算時鐘頻率:標(biāo)準(zhǔn)模式: Thigh=CCR*TPCKL1Tlow
=CCR*TPCLK1快速模式中Tlow/Thigh=2時: Thigh=CCR*TPCKL1Tlow
=2*CCR*TPCKL1快速模式中Tlow/Thigh=16/9時: Thigh=9*CCR*TPCKL1
Tlow=16*CCR*TPCKL1STM32的I2C框圖2.時鐘控制邏輯計算時鐘頻率:例如,我們的PCLK1=42MHz,想要配置400Kbit/s的速率,計算方式如下: PCLK時鐘周期: TPCLK1=1/42000000
目標(biāo)SCL時鐘周期: TSCL=1/400000 SCL時鐘周期內(nèi)的高電平時間: THIGH=TSCL/3 SCL時鐘周期內(nèi)的低電平時間: TLOW=2*TSCL/3
計算CCR的值: CCR=THIGH/TPCLK1=35
該結(jié)果剛好為整數(shù),所以我們可直接把CCR取值為35,這樣I2C的SCL實(shí)際頻率即為400KHz。STM32的I2C框圖3.數(shù)據(jù)控制邏輯I2C的SDA信號主要連接到數(shù)據(jù)移位寄存器上,數(shù)據(jù)移位寄存器的數(shù)據(jù)來源及目標(biāo)是數(shù)據(jù)寄存器(DR)、地址寄存器(OAR)、PEC寄存器以及SDA數(shù)據(jù)線。當(dāng)向外發(fā)送數(shù)據(jù)的時候,數(shù)據(jù)移位寄存器以“數(shù)據(jù)寄存器”為數(shù)據(jù)源,把數(shù)據(jù)一位一位地通過SDA信號線發(fā)送出去;當(dāng)從外部接收數(shù)據(jù)的時候,數(shù)據(jù)移位寄存器把SDA信號線采樣到的數(shù)據(jù)一位一位地存儲到“數(shù)據(jù)寄存器”中。STM32的I2C框圖4.整體控制邏輯整體控制邏輯負(fù)責(zé)協(xié)調(diào)整個I2C外設(shè),控制邏輯的工作模式根據(jù)我們配置的“控制寄存器(CR1/CR2)”的參數(shù)而改變。在外設(shè)工作時,控制邏輯會根據(jù)外設(shè)的工作狀態(tài)修改“狀態(tài)寄存器(SR1和SR2)”,只要讀取這些寄存器相關(guān)的寄存器位,就可以了解I2C的工作狀態(tài)。STM32的I2C通信使用I2C外設(shè)通信時,在通信的不同階段它會對“狀態(tài)寄存器(SR1及SR2)”的不同數(shù)據(jù)位寫入?yún)?shù),通過讀取這些寄存器標(biāo)志來了解通信狀態(tài)。STM32的I2C通信分為:主發(fā)送器的通信過程主接收器的通信過程STM32的I2C通信1.主發(fā)送器的通信過程控制產(chǎn)生起始信號(S),當(dāng)發(fā)生起始信號后,它產(chǎn)生事件‘,并會對SR1寄存器的“SB”位置1,表示起始信號已經(jīng)發(fā)送;發(fā)送設(shè)備地址并等待應(yīng)答信號,若有從機(jī)應(yīng)答,則產(chǎn)生事件“EV6”及“EV8”,這時SR1寄存器的“ADDR”位及“TXE”位被置1,ADDR為1表示地址已經(jīng)發(fā)送,TXE為1表示發(fā)送數(shù)據(jù)寄存器為空;STM32的I2C通信1.主發(fā)送器的通信過程往I2C的“數(shù)據(jù)寄存器DR”寫入要發(fā)送的數(shù)據(jù),這時TXE位會被重置0,表示數(shù)據(jù)寄存器非空,I2C外設(shè)通過SDA信號線一位位把數(shù)據(jù)發(fā)送出去后,又會產(chǎn)生“EV8”事件,即TXE位被置1,重復(fù)這個過程,可以發(fā)送多個字節(jié)數(shù)據(jù);發(fā)送數(shù)據(jù)完成后,控制I2C設(shè)備產(chǎn)生一個停止信號(P),這個時候會產(chǎn)生EV8_2事件,SR1的TXE位及BTF位都被置1,表示通信結(jié)束。STM32的I2C通信2.主接收器的通信過程起始信號(S)是由主機(jī)端產(chǎn)生的,控制發(fā)生起始信號后,它產(chǎn)生事件“EV5”,并會對SR1寄存器的“SB”位置1,表示起始信號已經(jīng)發(fā)送;發(fā)送設(shè)備地址并等待應(yīng)答信號,若有從機(jī)應(yīng)答,則產(chǎn)生事件“EV6”這時SR1寄存器的“ADDR”位被置1,表示地址已經(jīng)發(fā)送。STM32的I2C通信2.主接收器的通信過程從機(jī)端接收到地址后,開始向主機(jī)端發(fā)送數(shù)據(jù)。當(dāng)主機(jī)接收到這些數(shù)據(jù)后,會產(chǎn)生“EV7”事件,SR1寄存器的RXNE被置1,表示接收數(shù)據(jù)寄存器非空,讀取該寄存器后,可對數(shù)據(jù)寄存器清空,以便接收下一次數(shù)據(jù)。此時可以控制I2C發(fā)送應(yīng)答信號(ACK)或非應(yīng)答信號(NACK),若應(yīng)答,則重復(fù)以上步驟接收數(shù)據(jù),若非應(yīng)答,則停止傳輸;發(fā)送非應(yīng)答信號后,產(chǎn)生停止信號(P),結(jié)束傳輸。小結(jié)STM32的I2C特性及架構(gòu)STM32的I2C框圖STM32的I2C通信ARM微控制器與嵌入式系統(tǒng)
BH1750光照度傳感器主講人:景妮琴北京電子科技職業(yè)學(xué)院BH1750概述1BH1750FVI是一款數(shù)字型光強(qiáng)度傳感器集成芯片。BH1750FVI是一種用于兩線式串行總線接口的數(shù)字型光強(qiáng)度傳感器集成電路。這種集成電路可以根據(jù)收集的光線強(qiáng)度數(shù)據(jù)來調(diào)整液晶或者鍵盤背景燈的亮度。利用它的高分辨率可以探測較大范圍的光強(qiáng)度變化。(1lx-65535lx,照度:單位被照面積上接收到的光通量,用E表示,單位是勒克斯(lx)1.支持I2CBUS接口(f/sModeSupport)。(使用過)2.接近視覺靈敏度的光譜靈敏度特性(峰值靈敏度波長典型值:560nm)。3.輸出對應(yīng)亮度的數(shù)字值,
對應(yīng)廣泛的輸入光范圍(相當(dāng)于1-65535lx)。4.支持1.8V邏輯輸入接口。5.光源依賴性弱(白熾燈,熒光燈,鹵素?zé)?,白光LED,日光燈)。6.有兩種可選的I2Cslave地址。7.可調(diào)的測量結(jié)果,影響較大的因素為光入口大小。8.使用這種功能能計算1.1lx到100000lx/分鐘的范圍。9.最小誤差變動在±20%。10.受紅外線影響很小。BH1750概述1BH1750的內(nèi)部由光敏二極管、運(yùn)算放大器、ADC采集、晶振等組成。?PD,接近人眼反應(yīng)的光敏二極管。(Photodiodewithapproximatelyhumaneyeresponse.)?AMP,集成運(yùn)算放大器:將PD電流轉(zhuǎn)換為PD電壓。?ADC,模數(shù)轉(zhuǎn)換獲取16位數(shù)字?jǐn)?shù)據(jù)。?Logic+ICInterface(邏輯+IC界面),光強(qiáng)度計算和I2C總線接口,包括下列寄存器:數(shù)據(jù)寄存器→光強(qiáng)度數(shù)據(jù)寄存。初始值是:“0000_0000_0000_0000”。測量時間寄存器→時間測量數(shù)據(jù)寄存。初始值是:“0100_0101”。?OSC,內(nèi)部振蕩器(時鐘頻率典型值:320kHz)。該時鐘為內(nèi)部邏輯。BH1750概述1引腳說明BH1750概述1引腳說明BH1750概述1BH1750的內(nèi)部由光敏二極管、運(yùn)算放大器、ADC采集、晶振等組成。引腳號名稱說明1VCC供電電壓源正極(3.3V)2SCLIIC時鐘線,時鐘輸入引腳,由MCU輸出時鐘3SDAIIC數(shù)據(jù)線,雙向IO口,用來傳輸數(shù)據(jù)4ADDRIIC地址線,接GND時器件地址為0100011,接VCC時器件地址為10111005GND供電電壓源負(fù)極BH1750概述1BH1750FVI電氣參數(shù)。BH1750概述1BH1750FVI電氣參數(shù)。BH1750概述1BH1750BH1750概述1指令集合結(jié)構(gòu)指令功能代碼注釋斷電0000_0000無激活狀態(tài)。通電0000_0001等待測量指令。重置0000_0111重置數(shù)字寄存器值,重置指令在斷電模式下不起作用。連續(xù)H分辨率模式0001_0000在1lx分辨率下開始測量。測量時間一般為120ms。連續(xù)H分辨率模式20001_0001在0.5lx分辨率下開始測量。測量時間一般為120ms。連續(xù)L分辨率模式0001_0011在41lx分辨率下開始測量。測量時間一般為16ms。一次H分辨率模式0010_0000在1lx分辨率下開始測量。測量時間一般為120ms。測量后自動設(shè)置為斷電模式。一次H分辨率模式20010_0001在0.5lx分辨率下開始測量。測量時間一般為120ms。測量后自動設(shè)置為斷電模式。一次L分辨率模式0010_0011在41lx分辨率下開始測量。測量時間一般為16ms。測量后自動設(shè)置為斷電模式。改變測量時間(高位)01000_MT[7,6,5]改變測量時間※請參考“根據(jù)光學(xué)扇窗的影響調(diào)整測量結(jié)果?!备淖儨y量時間(低位)011_MT[4,3,2,1,0]改變測量時間※請參考“根據(jù)光學(xué)扇窗的影響調(diào)整測量結(jié)果?!盉H1750概述1測量模式說明測量模式測量時間.分辨率H-分辨率模式2典型時間:120ms0.5lxH-分辨率模式典型時間:120ms.1lx.L-分辨率模式典型時間:16ms.4lx建議使用H分辨率模式。H分辨率模式下足夠長的測量時間(積)能抑制一些噪聲包括(50Hz/60Hz)。同時,H分辨率模式的分辨率在1lx下,適用于黑暗場合(少10lx)。H分辨率模式2同樣適用于黑暗場合下的檢測。BH1750概述1從“寫指示”到“讀出測量結(jié)果”的測量時序?qū)嵗龑?shí)例:(ADDR='L')BH1750概述1I2C通信時序BH1750概述1I2C通信時序BH1750概述1I2C通信時序2一根是數(shù)據(jù)線SDA一根是時鐘線SCLI2C總線只有兩根雙向信號線。I2C協(xié)議—物理層2I2C總線通過上拉電阻接正電源。當(dāng)總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線“與”關(guān)系。I2C協(xié)議—物理層2I2C協(xié)議—物理層連接到相同總線的IC數(shù)量受到總線的最大電容400pF限制。標(biāo)準(zhǔn)模式傳輸速率為100kbit/s快速模式為400kbit/s具有三種傳輸模式:高速模式下可達(dá)3.4Mbit/s,但目前大多I2C設(shè)備尚不支持高速模式。2I2C協(xié)議—協(xié)議層通信的起始和停止信號數(shù)據(jù)有效性響應(yīng)仲裁時鐘同步地址廣播I2C的協(xié)議規(guī)定了:2I2C協(xié)議—協(xié)議層起始和停止信號:SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示停止信號。起始和停止信號一般由主機(jī)產(chǎn)生。2I2C協(xié)議—協(xié)議層I2C總線進(jìn)行數(shù)據(jù)傳送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。數(shù)據(jù)的有效性:2I2C協(xié)議—協(xié)議層地址及數(shù)據(jù)方向:I2C總線上的每個設(shè)備都有自己的獨(dú)立地址,主機(jī)發(fā)起通信時,通過SDA信號線發(fā)送設(shè)備地址(SLAVE_ADDRESS)來查找從機(jī)。設(shè)備地址可以是7位或10位。1緊跟設(shè)備地址的一個數(shù)據(jù)位R/W用來表示數(shù)據(jù)傳輸方向,數(shù)據(jù)方向位為“1”時表示主機(jī)由從機(jī)讀數(shù)據(jù),該位為“0”時表示主機(jī)向從機(jī)寫數(shù)據(jù)。22I2C協(xié)議—協(xié)議層響應(yīng)I2C的數(shù)據(jù)和地址傳輸都帶響應(yīng)。響應(yīng)包括“應(yīng)答(ACK)”和“非應(yīng)答(NACK)”兩種信號。01傳輸時主機(jī)產(chǎn)生時鐘,在第9個時鐘時,數(shù)據(jù)發(fā)送端會釋放SDA的控制權(quán),由數(shù)據(jù)接收端控制SDA,若SDA為高電平,表示非應(yīng)答信號(NACK),低電平表示應(yīng)答信號(ACK)。022I2C協(xié)議—協(xié)議層地址及數(shù)據(jù)方向:
I2C總線上傳送的數(shù)據(jù)信號是廣義的,既包括地址信號,又包括真正的數(shù)據(jù)信號。01在起始信號后必須傳送一個從機(jī)的地址(可以是7位),接下來(第8位)是數(shù)據(jù)的傳送方向位,用“0”表示主機(jī)發(fā)送數(shù)據(jù)(T),“1”表示主機(jī)接收數(shù)據(jù)(R)。02每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號結(jié)束。03若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可以不產(chǎn)生終止信號,馬上再次發(fā)出起始信號對另一從機(jī)進(jìn)行尋址。04數(shù)據(jù)傳輸分為:主機(jī)寫數(shù)據(jù)到從機(jī)主機(jī)由從機(jī)中讀數(shù)據(jù)寫數(shù)據(jù)與讀數(shù)據(jù)的復(fù)合格式2I2C協(xié)議—協(xié)議層主機(jī)寫數(shù)據(jù)到從機(jī):主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個傳送過程中不變。起始信號——從機(jī)地址——讀寫信號—應(yīng)答位—數(shù)據(jù)位——應(yīng)答位——……——停止位2I2C協(xié)議—協(xié)議層主機(jī)由從機(jī)中讀數(shù)據(jù):主機(jī)在第一個字節(jié)后,立即從從機(jī)讀數(shù)據(jù)。起始信號——從機(jī)地址——讀寫信號—應(yīng)答位—數(shù)據(jù)位——應(yīng)答位——……——停止位2I2C協(xié)議—協(xié)議層在傳送過程中,當(dāng)需要改變傳送方向時,起始信號和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反相。寫數(shù)據(jù)與讀數(shù)據(jù)的復(fù)合格式:引腳I2C編號I2C1I2C2I2C3SCLPB6/PB8PF1/PB10/PH4PA8/PH7SDAPB7/PB9PF0/PB11/PH5PC9/PH8引腳定義VCC:3.3VGND:接地SCL:串行時鐘SDA:串行數(shù)據(jù)PB6PB7ADDR:從屬地址,接地3編程要點(diǎn):硬件連接主機(jī)寫數(shù)據(jù)到從機(jī)010203根據(jù)I2C器件完成主設(shè)備發(fā)送數(shù)據(jù)到從設(shè)備,并接收從設(shè)備數(shù)據(jù)。04開啟時鐘外設(shè)(GPIO,I2C);初始化對應(yīng)的GPIO引腳,在這里要注意的是一般I2c都配置成開漏輸出就可以了;配置I2C結(jié)構(gòu)體參數(shù),初始化I2C,使能I2C。使能或者失能指定I2C的應(yīng)答功能;3編程要點(diǎn):軟件設(shè)計主機(jī)由從機(jī)讀數(shù)據(jù)編程要點(diǎn):軟件設(shè)計3打開GPIO時鐘配置GPIO的結(jié)構(gòu)體注意:Mode為AF,OType為OD配置復(fù)用GPIO為I2C1GPIO初始化打開I2C2的時鐘配置I2C的結(jié)構(gòu)體,初始化結(jié)構(gòu)體使能I2CI2C初始化寫數(shù)據(jù)BH1750的函數(shù)讀數(shù)據(jù)編程要點(diǎn):軟件設(shè)計3打開GPIO時鐘GPIO初始化RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOB,&GPIO_InitStructure);配置復(fù)用GPIO為I2C1配置GPIO的結(jié)構(gòu)體
注意:Mode為AF,OType為ODGPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_I2C1);GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_I2C1);編程要點(diǎn):軟件設(shè)計3打開I2C1的時鐘I2C初始化使能I2C1配置I2C的結(jié)構(gòu)體,初始化結(jié)構(gòu)體RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);I2C_InitTypeDefI2C_InitStruct;//定義結(jié)構(gòu)體I2C_InitStruct.I2C_ClockSpeed=400000;//I2C的速率位400kHzI2C_InitStruct.I2C_Mode=I2C_Mode_I2C;//模式為I2CI2C_InitStruct.I2C_DutyCycle=I2C_DutyCycle_2;//占空比為2:1I2C_InitStruct.I2C_OwnAddress1=0x00;//主機(jī)自己的地址,這個可以隨意設(shè)置,因?yàn)橹挥幸粋€主機(jī)I2C_InitStruct.I2C_Ack=I2C_Ack_Enable;//使能ACKI2C_InitStruct.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;//地址為7為I2C_Init(I2C1,&I2C_InitStruct);//初始化結(jié)構(gòu)體I2CI2C_Cmd(I2C1,ENABLE);//使能I2C1使能I2C的應(yīng)答功能I2C_AcknowledgeConfig(I2C1,ENABLE);//使能I2C1的ACK編程要點(diǎn):軟件設(shè)計3寫數(shù)據(jù)BH1750的函數(shù)讀數(shù)據(jù)編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主發(fā)送器的通信過程主接收器的通信過程STM32的I2C通信分為:使用I2C外設(shè)通信時,在通信的不同階段它會對“狀態(tài)寄存器(SR1及SR2)”的不同數(shù)據(jù)位寫入?yún)?shù),通過讀取這些寄存器標(biāo)志來了解通信狀態(tài)。3主發(fā)送器的通信過程控制產(chǎn)生起始信號(S)當(dāng)發(fā)生起始信號后,它產(chǎn)生事件“EV5”并會對SR1寄存器的“SB”位置1,表示起始信號已經(jīng)發(fā)送;01編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主發(fā)送器的通信過程發(fā)送設(shè)備地址并等待應(yīng)答信號若有從機(jī)應(yīng)答,則產(chǎn)生事件“EV6”及“EV8”這時SR1寄存器的“ADDR”位及“TXE”位被置1,ADDR為1表示地址已經(jīng)發(fā)送,TXE為1表示發(fā)送數(shù)據(jù)寄存器為空;02編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主發(fā)送器的通信過程03往I2C的“數(shù)據(jù)寄存器DR”寫入要發(fā)送的數(shù)據(jù)這時TXE位會被重置0,表示數(shù)據(jù)寄存器非空,I2C外設(shè)通過SDA信號線一位位把數(shù)據(jù)發(fā)送出去后又會產(chǎn)生“EV8”事件,即TXE位被置1,重復(fù)這個過程,可以發(fā)送多個字節(jié)數(shù)據(jù);編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主發(fā)送器的通信過程04發(fā)送數(shù)據(jù)完成后,控制I2C設(shè)備產(chǎn)生一個停止信號(P),這個時候會產(chǎn)生EV8_2事件,SR1的TXE位及BTF位都被置1,表示通信結(jié)束。編程要點(diǎn):軟件設(shè)計-STM32的I2C通信編程要點(diǎn):軟件設(shè)計3寫數(shù)據(jù)BH1750的函數(shù)模仿OLED的寫數(shù)據(jù)函數(shù)編程要點(diǎn):軟件設(shè)計3寫數(shù)據(jù)BH1750的函數(shù)3主接收器的通信過程起始信號(S)是由主機(jī)端產(chǎn)生的,控制發(fā)生起始信號后,它產(chǎn)生事件“EV5”,并會對SR1寄存器的“SB”位置1,表示起始信號已經(jīng)發(fā)送;01編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主接收器的通信過程發(fā)送設(shè)備地址并等待應(yīng)答信號,若有從機(jī)應(yīng)答,則產(chǎn)生事件“EV6”這時SR1寄存器的“ADDR”位被置1,表示地址已經(jīng)發(fā)送。02編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主接收器的通信過程從機(jī)端接收到地址后,開始向主機(jī)端發(fā)送數(shù)據(jù)。當(dāng)主機(jī)接收到這些數(shù)據(jù)后,會產(chǎn)生“EV7”事件SR1寄存器的RXNE被置1,表示接收數(shù)據(jù)寄存器非空,讀取該寄存器后,可對數(shù)據(jù)寄存器清空,以便接收下一次數(shù)據(jù)。此時可以控制I2C發(fā)送應(yīng)答信號(ACK)或非應(yīng)答信號(NACK)03編程要點(diǎn):軟件設(shè)計-STM32的I2C通信3主接收器的通信過程若應(yīng)答,則重復(fù)以上步驟接收數(shù)據(jù),若非應(yīng)答,則停止傳輸;發(fā)送非應(yīng)答信號后,產(chǎn)生停止信號(P),結(jié)束傳輸。04編程要點(diǎn):軟件設(shè)計-STM32的I2C通信編程要點(diǎn):軟件設(shè)計3讀數(shù)據(jù)BH1750的函數(shù)(1)判忙(2)發(fā)送起始信號(3)等待EV5事件發(fā)生(4)發(fā)送讀地址(5)等待EV6事件發(fā)生(6)等待EV7事件發(fā)生(ACK)(7)讀取一個字節(jié)(8)等待EV7事件發(fā)生(ACK)(9)再讀取一個字節(jié)(10)等待EV7_2事件發(fā)生(NACK)(11)發(fā)送停止信號while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)!=RESET);I2C_GenerateSTART(I2C1,ENABLE);while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));I2C_Send7bitAddress(I2C1,0x47,I2C_Direction_Receiver);while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));BUF[0]=I2C_ReceiveData(I2C1);while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));BUF[1]=I2C_ReceiveData(I2C1);while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));I2C_GenerateSTOP(I2C1,ENABLE);編程要點(diǎn):軟件設(shè)計3處理數(shù)據(jù)BH1750的函數(shù)BH1750編程實(shí)驗(yàn)BH1750.c:配置函數(shù)/*ADDR接GND,即ADDR接‘L’,則地址為‘0100011’;若ADDR接‘H’,則地址為1011100*/BH1750編程實(shí)驗(yàn)BH1750.c:配置函數(shù)BH1750編程實(shí)驗(yàn)BH1750.c:寫數(shù)據(jù)函數(shù)BH1750編程實(shí)驗(yàn)BH1750.c:讀數(shù)據(jù)函數(shù)BH1750編程實(shí)驗(yàn)BH1750.c:獲取光照度/**一次完整的數(shù)據(jù)傳輸為16位,高位先出,
數(shù)據(jù)/1.2就是光照度的值*//**顯示函數(shù)*/BH1750編程實(shí)驗(yàn)BH1750.h:庫函數(shù)BH1750編程實(shí)驗(yàn)main.c:主函數(shù)主講教師:景妮琴本節(jié)結(jié)束!ARM微控制器與嵌入式系統(tǒng)
ADC采集主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容ADC概述如何實(shí)現(xiàn)AD轉(zhuǎn)換ADC轉(zhuǎn)換原理ADC的基本概念STM32的ADCADC框圖ADC概述微控制器數(shù)字信號實(shí)際生活中模擬信號ADC:AnalogtoDigitalConverter模擬量到數(shù)字量的轉(zhuǎn)換器DAC:DigitaltoAnalogConverter數(shù)字量到模擬量的轉(zhuǎn)換器微控制器:自動控制如何實(shí)現(xiàn)AD轉(zhuǎn)換?1位數(shù)據(jù)的輸出Uin>UrefUout:1Uin<UrefUout:0這個圖重新幫我做一個如何實(shí)現(xiàn)AD轉(zhuǎn)換?2位數(shù)據(jù)的輸出Uin<Uref1,Uout1:0,Uout2:0,Uout3:0Uin>Uref1,Uin<Uref2,Uout1:1,Uout2:0,Uout3:0Uin>Uref2,Uin<Uref3Uout1:1,Uout2:1,Uout3:0Uin>Uref3Uout1:1,Uout2:1,Uout3:1這兩個圖重新幫我做一個如何實(shí)現(xiàn)AD轉(zhuǎn)換?2位數(shù)據(jù)的輸出除了比較器還需要編碼電路,把生成的編碼對應(yīng)二位的數(shù)字信號10位ADC:1023個比較器,2^10-1最快的ADC這個圖重新幫我做一個逐次逼近式ADC的轉(zhuǎn)換原理1000000011000000這個圖重新幫我做一個ADC的基本概念分辨率ADC的分辨率是指使輸出數(shù)字量變化一個相鄰數(shù)碼所需輸入模擬電壓的變化量。常用二進(jìn)制的位數(shù)表示。例如12位ADC的分辨率就是12位,或者說分辨率為滿刻度FS的1/4096。一個10V滿刻度的12位ADC能分辨輸入電壓變化最小值是10V×1/4096=2.4mV。ADC的基本概念輸出電壓范圍超過ADC的范圍怎么辦?搭建模擬電路ADC可以測量:-10V~10V根據(jù)基爾霍夫定律(KCL),節(jié)點(diǎn)流入的電流等于流出的電流(Vint–Vout)/R2+(3V3-Vout)/R1=Vout/R3Vout=(Vint+10)/6這個圖重新幫我做一個ADC的基本概念基準(zhǔn)參考電壓:VREF輸入電壓:VREF-≤VIN≤VREF+決定輸入電壓的引腳:VREF-、VREF+、VDDA、VSSAVSSA和VREF-接地,把VREF+和VDDA接3V3,得到ADC的輸入電壓范圍為:0~3.3V。STM32的ADCADC:12位逐次趨近型模數(shù)轉(zhuǎn)換器。三個獨(dú)立的ADC1/2/3可配置12位、10位、8位或6位分辨率每個ADC具有18個通道,其中外部通道16個在轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束以及發(fā)生模擬看門狗或溢出事件時產(chǎn)生中斷可獨(dú)立配置各通道采樣時間不連續(xù)采樣模式1-電壓輸入范圍2-輸入通道3-轉(zhuǎn)換順序4-觸發(fā)源5-轉(zhuǎn)換時間7-中斷8-電壓轉(zhuǎn)換ADC功能框圖6-數(shù)據(jù)寄存器ADC功能框圖1-電壓輸入范圍ADC功能框圖2-輸入通道每個ADC具有18個通道,其中外部通道16個。ADC功能框圖3-轉(zhuǎn)換順序規(guī)則通道組:相當(dāng)于正常運(yùn)行的程序,最多16個通道。注入通道組:相當(dāng)于中斷,最多4個通道。規(guī)則通道和注入通道的關(guān)系示意圖:規(guī)則通道1規(guī)則通道2規(guī)則通道N注入通道1注入通道1規(guī)則通道1規(guī)則通道2規(guī)則通道N注入通道NADC功能框圖4-觸發(fā)源ADC功能框圖5-轉(zhuǎn)換時間--轉(zhuǎn)換模式單次轉(zhuǎn)換模式:在單次轉(zhuǎn)換模式下,ADC執(zhí)行一次轉(zhuǎn)換。連續(xù)轉(zhuǎn)換模式:在連續(xù)轉(zhuǎn)換模式下,ADC結(jié)束一個轉(zhuǎn)換后立即啟動一個新的轉(zhuǎn)換。掃描模式:此模式用于掃描一組模擬通道。每次轉(zhuǎn)換結(jié)束后,會自動轉(zhuǎn)換該組中的下一個通道。ADC功能框圖5-轉(zhuǎn)換時間ADC_CLKMax:36MHzADC功能框圖5-轉(zhuǎn)換時間ADC_CLK=APB2_CLK/ADC_PrescalerADC_CLKMax:36MHzAPB2_CLKMax:84MHz
ADC_PrescalerMin:4ADC_CLKMax=21MHzADC功能框圖5-轉(zhuǎn)換時間轉(zhuǎn)換時間:Tconv=采樣時間+12個周期(12位)采樣時間:ADC需要若干個ADC_CLK周期完成對輸入的模擬量進(jìn)行采樣,每個通道可以分別用不同的時間采樣。其中采樣周期最小是3個,即如果我們要達(dá)到最快的采樣,那么應(yīng)該設(shè)置采樣周期為3個周期,這里說的周期就是1/ADC_CLK。Tconv=3+12=15周期=15/21us=0.71usADC功能框圖5-轉(zhuǎn)換時間采樣率,決定了ADC能采集多大頻率的信號ADC功能框圖6-數(shù)據(jù)寄存器ADC轉(zhuǎn)換后的數(shù)據(jù)根據(jù)轉(zhuǎn)換組的不同,規(guī)則組的數(shù)據(jù)放在ADC_DR
寄存器,注入組的數(shù)據(jù)放在JDRx。如果是使用雙重或者三重模式那規(guī)矩組的數(shù)據(jù)是存放在通用規(guī)則寄存器ADC_CDR
內(nèi)的ADC功能框圖7-中斷ADC功能框圖8-電壓轉(zhuǎn)換:怎么根據(jù)數(shù)據(jù)量算出模擬量電壓輸入范圍為:0~3.3V分辨率為12位最小精度為:3.3/2^12設(shè)數(shù)字量為X,則有模擬量
Y=(3.3/2^12)*X小結(jié)ADC概述如何實(shí)現(xiàn)AD轉(zhuǎn)換ADC轉(zhuǎn)換原理ADC的基本概念STM32的ADCADC框圖ARM微控制器與嵌入式系統(tǒng)
STM32-ADC編程要點(diǎn)主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容ADC硬件設(shè)計STM32-ADC編程要點(diǎn)ADC結(jié)構(gòu)體ADC庫函數(shù)ADC中斷主函數(shù)計算電壓值A(chǔ)DC硬件設(shè)計使用一個滑動變阻器,將中間端子接到ADC通道的GPIO(從表中任選)通道號ADC1ADC2ADC3通道0PA0PA0PA0通道1PA1PA1PA1通道2PA2PA2PA2通道3PA3PA3PA3通道4PA4PA4PF6通道5PA5PA5PF7通道6PA6PA6PF8通道7PA7PA7PF9通道8PB0PB0PF10通道9PB1PB1PF3通道10PC0PC0PC0通道11PC1PC1PC1通道12PC2PC2PC2通道13PC13PC13PC13通道14PC4PC4PF4通道15PC5PC5PF5編程要點(diǎn)獨(dú)立模式-單通道-中斷(不使用DMA)1-打開GPIO時鐘,ADC時鐘2-ADC通道端口配置3-配置ADC4-配置通道的轉(zhuǎn)換順序、配置中斷、打開ADC、觸發(fā)ADC開始轉(zhuǎn)換5-編寫main函數(shù),中斷服務(wù)函數(shù),獲取ADC轉(zhuǎn)換結(jié)果編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)1、開啟GPIO時鐘、ADC時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)2、ADC通道端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;//模擬模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空輸入GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化配置ADC_InitTypeDef初始化結(jié)構(gòu)體ADC_Resolution:配置ADC的分辨率,可選的分辨率有12位、10位、8位和6位。ADC_Resolution_12b,ADC_Resolution_10b,ADC_Resolution_8b,ADC_Resolution_6bADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;//ADC分辨率ADC_InitTypeDef初始化結(jié)構(gòu)體ScanConvMode:配置是否使用掃描??蛇x參數(shù)為ENABLE和DISABLE。如果是單通道AD轉(zhuǎn)換使用DISABLE,如果是多通道AD轉(zhuǎn)換使用ENABLE。ADC_InitStructure.ADC_ScanConvMode=DISABLE;//單通道不掃描ADC_InitTypeDef初始化結(jié)構(gòu)體ADC_ContinuousConvMode:配置是啟動自動連續(xù)轉(zhuǎn)換還是單次轉(zhuǎn)換可選參數(shù)為ENABLE和DISABLE使用ENABLE配置為使能自動連續(xù)轉(zhuǎn)換;使用DISABLE配置為單次轉(zhuǎn)換,轉(zhuǎn)換一次后停止需要手動控制才重新啟動轉(zhuǎn)換。ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//連續(xù)轉(zhuǎn)換ADC_InitTypeDef初始化結(jié)構(gòu)體ADC_ExternalTrigConvEdge:外部觸發(fā)極性選擇如果使用外部觸發(fā),可以選擇觸發(fā)的極性,可選有禁止觸發(fā)檢測、上升沿觸發(fā)檢測、下降沿觸發(fā)檢測以及上升沿和下降沿均可觸發(fā)檢測。
ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;//禁止外部邊沿觸發(fā)ADC_InitTypeDef初始化結(jié)構(gòu)體ADC_ExternalTrigConv:外部觸發(fā)選擇實(shí)際上,我們一般使用軟件自動觸發(fā)。ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_Ext_IT11;//使用軟件觸發(fā),此值隨便賦值即可ADC_InitTypeDef初始化結(jié)構(gòu)體ADC_DataAlign:轉(zhuǎn)換結(jié)果數(shù)據(jù)對齊模式可選右對齊ADC_DataAlign_Right,左對齊ADC_DataAlign_Left。一般我們選擇右對齊模式。ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
//數(shù)據(jù)右對齊 ADC_InitTypeDef初始化結(jié)構(gòu)體ADC_NbrOfChannel:AD轉(zhuǎn)換通道數(shù)目。Thisparametermustrangefrom1to16.ADC_InitStructure.ADC_NbrOfConversion=1;//轉(zhuǎn)換通道1個ADC_CommonInitTypeDef通用初始化結(jié)構(gòu)體ADC_Mode:ADC工作模式選擇,有獨(dú)立模式、雙重模式以及三重模式ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent;//獨(dú)立ADC模式ADC_CommonInitTypeDef通用初始化結(jié)構(gòu)體ADC_Prescaler:ADC時鐘分頻系數(shù)選擇ADC時鐘是由PCLK2分頻而來,分頻系數(shù)決定ADC時鐘頻率,可選的分頻系數(shù)為2、4、6和8。ADC最大時鐘配置為36MHz。
ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div4;//時鐘為fpclkx分頻ADC_CommonInitTypeDef通用初始化結(jié)構(gòu)體ADC_DMAAccessMode:DMA模式設(shè)置,只有在雙重或者三重模式才需要設(shè)置,可以設(shè)置三種模式
ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;//禁止DMA直接訪問模式ADC_CommonInitTypeDef通用初始化結(jié)構(gòu)體ADC_TwoSamplingDelay:2個采樣階段之前的延遲,僅適用于雙重或三重交錯模式。ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_20Cycles;//采樣時間間隔 ADC庫函數(shù)ConfiguresADC1Channel2as:firstconvertedchannelwithan7.5cyclessampletimeADC_RegularChannelConfig(ADC1,ADC_Channel_2,1,ADC_SampleTime_7Cycles5);ADC庫函數(shù)ConfiguresADC1Channel8as:secondconvertedchannelwithan1.5cyclessampletimeADC_RegularChannelConfig(ADC1,ADC_Channel_8,2,ADC_SampleTime_1Cycles5);編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)3、ADC配置編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)4、配置通道的轉(zhuǎn)換順序、配置中斷、打開ADC、觸發(fā)ADC開始轉(zhuǎn)換ADC中斷主函數(shù)計算電壓值5、編寫main函數(shù),中斷服務(wù)函數(shù),獲取ADC轉(zhuǎn)換結(jié)果獲取ADC轉(zhuǎn)換結(jié)果uint16_tADC_Get_Value(ADC_TypeDef*adcx,uint16_tchx,uint8_tRauk){ //為選定的ADC常規(guī)通道配置相應(yīng)的*排序器和采樣時間 ADC_RegularChannelConfig(adcx,chx,Rauk,ADC_SampleTime_480Cycles); //軟件啟動ADC ADC_SoftwareStartConv(adcx); while(!ADC_GetFlagStatus(adcx,ADC_FLAG_EOC)); ADC_ClearFlag(adcx,ADC_FLAG_EOC); returnADC_GetConversionValue(adcx);}小結(jié)ADC硬件設(shè)計STM32-ADC編程要點(diǎn)ADC結(jié)構(gòu)體ADC庫函數(shù)ADC中斷主函數(shù)計算電壓值A(chǔ)RM微控制器與嵌入式系統(tǒng)
STM32-ADC編程實(shí)驗(yàn)主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容ADC硬件設(shè)計STM32-ADC編程要點(diǎn)ADC中斷主函數(shù)計算電壓值A(chǔ)DC硬件設(shè)計使用一個滑動變阻器,將中間端子接到ADC通道的GPIO(從表中任選)通道號ADC1ADC2ADC3通道0PA0PA0PA0通道1PA1PA1PA1通道2PA2PA2PA2通道3PA3PA3PA3通道4PA4PA4PF6通道5PA5PA5PF7通道6PA6PA6PF8通道7PA7PA7PF9通道8PB0PB0PF10通道9PB1PB1PF3通道10PC0PC0PC0通道11PC1PC1PC1通道12PC2PC2PC2通道13PC13PC13PC13通道14PC4PC4PF4通道15PC5PC5PF5編程要點(diǎn)獨(dú)立模式-單通道-中斷(不使用DMA)1-打開GPIO時鐘,ADC時鐘2-ADC通道端口配置3-配置ADC4-配置通道的轉(zhuǎn)換順序、配置中斷、打開ADC、觸發(fā)ADC開始轉(zhuǎn)換5-編寫main函數(shù),中斷服務(wù)函數(shù),獲取ADC轉(zhuǎn)換結(jié)果編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)1、開啟GPIO時鐘、ADC時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)2、ADC通道端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;//模擬模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空輸入GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化配置編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)3、ADC配置編程要點(diǎn):獨(dú)立模式-單通道-中斷(不使用DMA)4、配置通道的轉(zhuǎn)換順序、配置中斷、打開ADC、觸發(fā)ADC開始轉(zhuǎn)換ADC中斷主函數(shù)計算電壓值5、編寫main函數(shù),中斷服務(wù)函數(shù),獲取ADC轉(zhuǎn)換結(jié)果小結(jié)ADC硬件設(shè)計STM32-ADC編程要點(diǎn)ADC中斷主函數(shù)計算電壓值STM32嵌入式操作系統(tǒng)介紹主講教師:吳友蘭常見的操作系統(tǒng)1操作系統(tǒng)的基本結(jié)構(gòu)2UserApplicattionOperatingSystemHardware是一種為應(yīng)用程序提供服務(wù)的系統(tǒng)軟件。操作系統(tǒng)從層次上看,操作系統(tǒng)位于計算機(jī)硬件之上,軟件之下。嵌入式系統(tǒng)介紹3是嵌入式系統(tǒng)的三個基本要素“嵌入性”“專用性”“計算機(jī)系統(tǒng)”嵌入式系統(tǒng)概念以應(yīng)用為中心以計算機(jī)技術(shù)為基礎(chǔ)軟硬件可裁剪適用于對功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計算機(jī)系統(tǒng)01020304廣義定義:任何一個非計算機(jī)的計算系統(tǒng)嵌入式系統(tǒng)中常見的兩種編程方式4前后臺系統(tǒng)嵌入式操作系統(tǒng)前后臺模式應(yīng)用程序5前后臺模式的特點(diǎn)應(yīng)用程序通常是一個無限的循環(huán),在循環(huán)中,通過調(diào)用相應(yīng)的處理函數(shù)完成相應(yīng)的操作,這部分可以看作為后臺行為。中斷服務(wù)程序接收異步中斷,來通知后臺,后臺收到中斷請求后進(jìn)行處理。嵌入式實(shí)時操作系統(tǒng)的特點(diǎn)61與硬件相關(guān)的底層驅(qū)動軟件2系統(tǒng)內(nèi)核3設(shè)備驅(qū)動接口4通信協(xié)議5圖形界面嵌入式操作系統(tǒng)是一種用途廣泛的系統(tǒng)軟件6……負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬件資源的分配、任務(wù)調(diào)度、控制、協(xié)調(diào)并發(fā)活動。嵌入式實(shí)時操作系統(tǒng)的特點(diǎn)6FreeRTOS
uC/OS-II
RT-thread
WindowCEVxworks目前嵌入式領(lǐng)域廣泛使用的操作系統(tǒng)有兩種開發(fā)模式對比7兩種開發(fā)模式選擇8前后臺模式嵌入式操作系統(tǒng)產(chǎn)品功能簡單01開發(fā)成員不多02不需要復(fù)雜的外設(shè)(如USB/網(wǎng)絡(luò)/FS等…)03成本要求非??量?4產(chǎn)品功能復(fù)雜01團(tuán)隊(duì)協(xié)作開發(fā)02需要使用復(fù)雜的外設(shè)和功能(如USB/網(wǎng)絡(luò)/FS等…)03硬件成本允許增加OS的資源04兩種開發(fā)模式選擇8基于STM32平臺且滿足實(shí)時控制要求操作系統(tǒng),有以下5種可供移植選擇分別為:μClinuxμC/OSeCosFreeRTOSrt-thread0102030405μClinux操作系統(tǒng)901μClinux是一種優(yōu)秀的嵌入式Linux版本μClinux結(jié)構(gòu)復(fù)雜移植相對困難內(nèi)核也較大實(shí)時也差一些若開發(fā)的嵌入式產(chǎn)品注重文件
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版?zhèn)€人住房貸款擔(dān)保合同匯編2篇
- 二零二五年度高效節(jié)水灌溉與機(jī)耕一體化服務(wù)合同3篇
- 醫(yī)療器械2025年度信息安全與隱私保護(hù)合同3篇
- 二零二五年度車輛抵押擔(dān)保擔(dān)保公司服務(wù)合同范本3篇
- 基于二零二五年度的智能家居技術(shù)服務(wù)合同2篇
- 二零二五版EPS線條工程節(jié)能評估與認(rèn)證合同3篇
- 二零二五版桉樹種植撫育及產(chǎn)品回收合同3篇
- 二零二五年度特色餐廳股權(quán)置換合同協(xié)議書3篇
- 二零二五年度航空貨運(yùn)服務(wù)保障合同3篇
- 二零二五版鍋爐安全檢查與安裝服務(wù)合同范本3篇
- 2023年信息處理技術(shù)員教程
- 稽核管理培訓(xùn)
- 電梯曳引機(jī)生銹處理方案
- 電力電纜故障分析報告
- 中國電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計》課件
- 倉庫管理基礎(chǔ)知識培訓(xùn)課件1
- 藥品的收貨與驗(yàn)收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語人教版必修第一二冊語境記單詞清單
評論
0/150
提交評論