版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模塊7ADC模塊項(xiàng)目11STM32芯片溫度檢測(cè)項(xiàng)目12光照監(jiān)測(cè)主要內(nèi)容和學(xué)習(xí)重點(diǎn)項(xiàng)目11:STM32芯片溫度檢測(cè)知識(shí)準(zhǔn)備認(rèn)識(shí)STM32的ADC模塊AD轉(zhuǎn)換通道和映射引腳ADC供電和ADC時(shí)鐘——重點(diǎn)規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換——重點(diǎn)ADC單次轉(zhuǎn)換模式——重點(diǎn)輪詢(xún)方式HAL庫(kù)函數(shù)項(xiàng)目實(shí)施:ADC內(nèi)部通道采集與轉(zhuǎn)換習(xí)題項(xiàng)目探究ADC結(jié)構(gòu)體——重點(diǎn)和函數(shù)用法——重點(diǎn)ADC校準(zhǔn)和溫度計(jì)算數(shù)據(jù)對(duì)齊——重點(diǎn)知識(shí)拓展輪詢(xún)方式規(guī)則轉(zhuǎn)換函數(shù)詳解輪詢(xún)方式注入轉(zhuǎn)換函數(shù)詳解連續(xù)模式與自動(dòng)注入項(xiàng)目12:光照監(jiān)測(cè)知識(shí)準(zhǔn)備ADC外部觸發(fā)——重點(diǎn)中斷方式HAL庫(kù)函數(shù)項(xiàng)目實(shí)施:光照監(jiān)測(cè)習(xí)題項(xiàng)目探究外部通道復(fù)用引腳——重點(diǎn)ADC初始化中斷方式HAL庫(kù)函數(shù)用法——重點(diǎn)TIMTRGO事件觸發(fā)ADC轉(zhuǎn)換知識(shí)拓展中斷方式規(guī)則、注入轉(zhuǎn)換函數(shù)詳解ADC掃描模式、間斷模式、雙ADC模式模塊小結(jié)制作者或logo日
錄2項(xiàng)目11知識(shí)準(zhǔn)備:認(rèn)識(shí)STM32的ADC模塊制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)3ADC——模數(shù)轉(zhuǎn)換器F103閃存大容量MCU精度12位轉(zhuǎn)換結(jié)果存儲(chǔ)在16位數(shù)據(jù)寄存器中:左對(duì)齊或右對(duì)齊↑摘自數(shù)據(jù)手冊(cè)F1小容量MCU↓注:TFBGA64封裝的MCU只有15個(gè)通道↙摘自參考手冊(cè)↖摘自參考手冊(cè)11.3.3通道選擇AD轉(zhuǎn)換通道最多16個(gè)外部通道和最多2個(gè)內(nèi)部通道AD轉(zhuǎn)換模式單次、連續(xù)、掃描、間斷ADC時(shí)鐘知識(shí)準(zhǔn)備:ADC通道STM32F103VE:3個(gè)ADCSTM32F103R6只有ADC1和ADC2制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)4↖摘自參考手冊(cè)11.3.3通道選擇ADC1ADC2ADC3摘自STM32CUBEMX↓→知識(shí)準(zhǔn)備:ADC模塊的供電要求及其他引腳ADC供電要求及相關(guān)引腳2.4V~3.6VVDDAVSSAVref+Vref-ADC輸入要求Vref-<=Vin<=Vref+制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)5摘自數(shù)據(jù)手冊(cè)圖1↓↖摘自M3主控模塊電路圖↙摘自中文參考手冊(cè)11.3節(jié)表62知識(shí)準(zhǔn)備:STM32的ADC時(shí)鐘STM32為外設(shè)時(shí)鐘都單獨(dú)設(shè)置開(kāi)關(guān),使用前需要開(kāi)啟ADC_CLK由PCLK2(APB2)經(jīng)過(guò)分頻產(chǎn)生,分頻系數(shù)可以是2/4/6/8STM32F103的ADC輸入時(shí)鐘ADC_CLK不能超過(guò)14MHz當(dāng)SYSCLK=8MHz,ADC最大時(shí)鐘頻率是多少?制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)6↙摘自中文參考手冊(cè)摘自STM32CUBEMX↗①①①②②摘自中文參考手冊(cè)6.2節(jié)圖8時(shí)鐘樹(shù)知識(shí)準(zhǔn)備:采樣時(shí)間和轉(zhuǎn)換時(shí)間采樣時(shí)間可選采樣后的轉(zhuǎn)換時(shí)間12.5個(gè)ADC的時(shí)鐘周期制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)7摘自中文參考手冊(cè)摘自中文參考手冊(cè)摘自STM32CUBEMXADC_SMPR2知識(shí)準(zhǔn)備:ADC通道選擇–規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換AD轉(zhuǎn)換模式:?jiǎn)未?、連續(xù)、掃描、間斷→AD轉(zhuǎn)換通道:最多16個(gè)外部通道和最多2個(gè)內(nèi)部通道規(guī)則組(最多16路)和注入組(最多4路)注入組可以打斷規(guī)則組如果某個(gè)轉(zhuǎn)換需要優(yōu)先進(jìn)行,可以把這個(gè)AD轉(zhuǎn)換設(shè)置為注入組制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)8↙摘自參考手冊(cè)摘自STM32CUBEMX摘自STM32CUBEMX↓知識(shí)準(zhǔn)備:?jiǎn)未无D(zhuǎn)換模式規(guī)則轉(zhuǎn)換的結(jié)果保存在ADC_DR寄存器中,且只有一個(gè),因而多通道規(guī)則轉(zhuǎn)換時(shí)應(yīng)注意及時(shí)將轉(zhuǎn)換結(jié)果取走。制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)9摘自STM32CUBEMX摘自中文參考手冊(cè)↘如果中斷使能,則發(fā)生中斷摘自英文參考手冊(cè)11.3.4節(jié)→單通道知識(shí)準(zhǔn)備:STM32ADC模塊的HAL函數(shù)輪詢(xún)方式(項(xiàng)目十一)中斷方式(項(xiàng)目十二)DMA方式多ADC方式規(guī)則組注入組開(kāi)啟和停止ADC:HAL_ADC_Start()和HAL_ADC_Stop()等待轉(zhuǎn)換完成:HAL_ADC_PollForConversion()獲取結(jié)果:HAL_ADC_GetValue()開(kāi)啟和停止ADC:
HAL_ADCEx_InjectedStart()和HAL_ADCEx_InjectedStop()等待轉(zhuǎn)換完成:HAL_ADCEx_InjectedPollForConversion()獲取結(jié)果:HAL_ADCEx_InjectedGetValue()制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)10摘自F1xxHAL庫(kù)驅(qū)動(dòng)手冊(cè)7.2.2節(jié)↓單次轉(zhuǎn)換模式每次轉(zhuǎn)換完成將自動(dòng)停止ADC工作項(xiàng)目實(shí)施:基于M3主控模塊
項(xiàng)目11:STM32芯片溫度檢測(cè)使用ADC的輪詢(xún)方式,每隔2.01s采集一次STM32內(nèi)部溫度、每隔2s采集一次內(nèi)部參考電壓,并將轉(zhuǎn)換結(jié)果顯示在PC機(jī)的串口助手中內(nèi)部溫度在規(guī)則組實(shí)現(xiàn)轉(zhuǎn)換內(nèi)部參考電壓在注入組實(shí)現(xiàn)轉(zhuǎn)換不使用ADC中斷請(qǐng)使用TIM定時(shí)器中斷來(lái)至少控制其中一個(gè)通道的ADC工作間隔時(shí)間制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)11項(xiàng)目實(shí)施:STM32CUBEMX的設(shè)置MCU選型、RCC和SYS,時(shí)鐘ClockConfiguration(除ADC時(shí)鐘外)和項(xiàng)目ProjectManager定時(shí)器的配置ADC的配置-↓三張圖制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)12↙按照項(xiàng)目1的設(shè)置←按照項(xiàng)目8和9的設(shè)置,注意定時(shí)時(shí)長(zhǎng)要求與項(xiàng)目8/9不一致,注意開(kāi)啟TIM中斷↑ADC時(shí)鐘的配置UART1的配置ADC_CLK↑按照項(xiàng)目5的設(shè)置項(xiàng)目實(shí)施:代碼編寫(xiě)(一)在主循環(huán)while(1)之前添加“開(kāi)啟定時(shí)器中斷及定時(shí)器外設(shè)”的代碼請(qǐng)參考模塊6的任務(wù)代碼自行添加在主循環(huán)while(1)之前添加以下“校準(zhǔn)ADC1”的代碼①溫度傳感器內(nèi)部通道的采集、轉(zhuǎn)換與獲?。赫?qǐng)參考以下代碼②,注意別漏掉頭文件包含指令制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)13①②//sprintf()用法參考鏈接:/cprogramming/c-function-sprintf.html//memset()用法參考鏈接:/cprogramming/c-function-memset.html項(xiàng)目實(shí)施:代碼編寫(xiě)(二)溫度傳感器內(nèi)部通道的采集、轉(zhuǎn)換與獲取-續(xù)別忘了temp_value和uart_string聲明參考電壓內(nèi)部通道的采集、轉(zhuǎn)換與獲?。赫?qǐng)參考以下代碼③別忘了ref_vol聲明定時(shí)器回調(diào)函數(shù)的代碼請(qǐng)自行添加注意思考參考代碼②和③應(yīng)添加在哪制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)14charuart_string[50];floattemp_value=0;intref_vol=0;③項(xiàng)目實(shí)施:請(qǐng)將代碼添加到正確的位置/*Privatevariables-----------------------------------*//*USERCODEBEGINPV*//*USERCODEENDPV*/…略…intmain(void){HAL_Init();SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init(); MX_TIM2_Init();//數(shù)字取決于你使用哪個(gè)TIM MX_USART1_UART_Init(); MX_ADC1_Init();
/*USERCODEBEGIN2*/
/*USERCODEEND2*/
/*Infiniteloop*/
/*USERCODEBEGINWHILE*/while(1){
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/}
/*USERCODEEND3*/}/*注main()到此結(jié)束*/…略…/*USERCODEBEGIN4*//*USERCODEEND4*/制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)15①②注意:HAL_ADCEx_Calibration_Start()函數(shù)必須在ADC初始化之后調(diào)用;并在HAL_ADC_Start()和HAL_ADCEx_InjectedStart()之前調(diào)用項(xiàng)目實(shí)施:結(jié)果驗(yàn)證串口發(fā)送也可以使用重定義printf函數(shù)的方法可以調(diào)用printf函數(shù)來(lái)實(shí)現(xiàn)浮點(diǎn)數(shù)據(jù)的格式發(fā)送在STM32中使用printf函數(shù)和sprintf函數(shù)進(jìn)行浮點(diǎn)數(shù)據(jù)的格式輸出時(shí),有可能遇到“浮點(diǎn)數(shù)據(jù)8字節(jié)對(duì)齊”的問(wèn)題將%f改為其他非浮點(diǎn)數(shù)據(jù)類(lèi)型,參考本任務(wù)中內(nèi)部參考電壓值的表示方法制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)16項(xiàng)目實(shí)施:基于proteus仿真
項(xiàng)目11:STM32內(nèi)部參考電壓檢測(cè)使用ADC的輪詢(xún)方式,每隔2s采集一次內(nèi)部參考電壓,并將轉(zhuǎn)換結(jié)果顯示在虛擬終端內(nèi)部參考電壓在規(guī)則組實(shí)現(xiàn)轉(zhuǎn)換不使用ADC中斷制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)17項(xiàng)目實(shí)施:STM32CUBEMX的設(shè)置MCU選型、RCC和SYS,時(shí)鐘ClockConfiguration(除ADC時(shí)鐘外)和項(xiàng)目ProjectManagerUART1的配置ADC的配置-↓兩張圖制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)18↖按照項(xiàng)目1設(shè)置↓ADC時(shí)鐘的配置ADC_CLK←按照項(xiàng)目5的設(shè)置項(xiàng)目實(shí)施:代碼編寫(xiě)在主循環(huán)while(1)之前添加以下“校準(zhǔn)ADC1”的代碼①參考電壓內(nèi)部通道的采集、轉(zhuǎn)換與獲?。赫?qǐng)參考以下代碼②,注意別漏掉頭文件包含指令制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)19①②項(xiàng)目實(shí)施:請(qǐng)將代碼添加到正確的位置/*Privatevariables-----------------------------------*//*USERCODEBEGINPV*//*USERCODEENDPV*/…略…intmain(void){HAL_Init();SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init(); MX_TIM2_Init();//數(shù)字取決于你使用哪個(gè)TIM MX_USART1_UART_Init(); MX_ADC1_Init();
/*USERCODEBEGIN2*/
/*USERCODEEND2*/
/*Infiniteloop*/
/*USERCODEBEGINWHILE*/while(1){
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/}
/*USERCODEEND3*/}/*注main()到此結(jié)束*/…略…/*USERCODEBEGIN4*//*USERCODEEND4*/制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)20①②注意:HAL_ADCEx_Calibration_Start()函數(shù)必須在ADC初始化之后調(diào)用;并在HAL_ADC_Start()和HAL_ADCEx_InjectedStart()之前調(diào)用項(xiàng)目實(shí)施:結(jié)果驗(yàn)證串口發(fā)送也可以使用重定義printf函數(shù)的方法可以調(diào)用printf函數(shù)來(lái)實(shí)現(xiàn)浮點(diǎn)數(shù)據(jù)的格式發(fā)送Proteus對(duì)浮點(diǎn)數(shù)據(jù)格式輸出的支持不好,不建議在printf或sprintf中使用%f。Proteus對(duì)注入組的支持不好,如果進(jìn)行注入轉(zhuǎn)換可以使用KEILMDK內(nèi)部仿真器驗(yàn)證結(jié)果制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)21KEILMDK內(nèi)部仿真器的用法請(qǐng)參考項(xiàng)目10知識(shí)拓展習(xí)題習(xí)題操作題啟用連續(xù)模式和自動(dòng)注入來(lái)進(jìn)行內(nèi)部參考電壓(規(guī)則組)和內(nèi)部溫度(注入組)的采集;每采集5000次,使LED亮滅狀態(tài)翻轉(zhuǎn)1次;按下按鍵后停止轉(zhuǎn)換。提示:不傳送數(shù)據(jù)到串口。制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)22連續(xù)轉(zhuǎn)換更常用的方法是結(jié)合ADC中斷或DMA來(lái)使用。注入組的連續(xù)轉(zhuǎn)換可通過(guò)設(shè)置自動(dòng)注入來(lái)實(shí)現(xiàn)→此時(shí)必須同時(shí)存在規(guī)則與注入轉(zhuǎn)換摘自STM32CUBEMX?摘自中文參考手冊(cè)←摘自中文參考手冊(cè)11.3.9節(jié)注入轉(zhuǎn)換項(xiàng)目探究:有關(guān)ADC的結(jié)構(gòu)體ADC_HandleTypeDef①結(jié)構(gòu)體的第1個(gè)成員類(lèi)型為ADC_TypeDef②結(jié)構(gòu)體;第2個(gè)成員類(lèi)型為ADC_InitTypeDef③結(jié)構(gòu)體;使制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)23摘自HAL驅(qū)動(dòng)文檔STM32F1_HAL_LL_Drivers.pdf①③②①②②使hadc1.Instance獲取到ADC1寄存器的內(nèi)存映射首地址注意:中間還有其他與ADC相關(guān)的結(jié)構(gòu)體③項(xiàng)目探究:ADC初始化之1項(xiàng)目十一的任務(wù)沒(méi)有使用外部通道和ADC中斷制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)24①①intmain(void){HAL_Init();SystemClock_Config();
MX_ADC1_Init();while(1){}}摘自F1xxHAL庫(kù)驅(qū)動(dòng)手冊(cè)鐘項(xiàng)目探究:ADC初始化之2制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)25③②②摘自F1xxHAL庫(kù)驅(qū)動(dòng)手冊(cè)7.2.2節(jié)項(xiàng)目探究:有關(guān)ADC輪詢(xún)方式HAL函數(shù)用法1HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef*hadc);//啟HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef*hadc);//停HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout);uint32_tHAL_ADC_GetValue(ADC_HandleTypeDef*hadc);HAL_StatusTypeDefHAL_ADCEx_InjectedStart(ADC_HandleTypeDef*hadc);//啟HAL_StatusTypeDefHAL_ADCEx_InjectedStop(ADC_HandleTypeDef*hadc);//停HAL_StatusTypeDefHAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout);uint32_tHAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef*hadc,uint32_tInjectedRank);制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)26↑超時(shí)超時(shí)↖取結(jié)果取結(jié)果↗等待完成↗等待完成↗項(xiàng)目探究:有關(guān)ADC輪詢(xún)方式HAL函數(shù)用法2HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_RANK_1);本項(xiàng)目的任務(wù)中調(diào)用HAL_ADCEx_InjectedGetValue()函數(shù)之前已先調(diào)用過(guò)HAL_ADCEx_InjectedPollForConversion(&hadc1,100)不必?fù)?dān)心JEOS標(biāo)志清0的問(wèn)題制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)27項(xiàng)目探究:數(shù)據(jù)左對(duì)齊與右對(duì)齊M3主控模塊電路VREF+引腳連接到VDDA引腳(第6頁(yè))對(duì)于沒(méi)有Vref+/Vref-引腳的型號(hào),Vref+內(nèi)部連接到VDDA,Vref-內(nèi)部連接到VSSA
↓制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)28ADC_DR↑
ADC_DR↑
ADC_JDRx↑ADC_JDRx↑
摘自F1xx數(shù)據(jù)手冊(cè)-小容量5.3.8節(jié)表46的標(biāo)注3摘自中文參考手冊(cè)⑴⑵⑴↓⑵⑵↓②注入組結(jié)果有可能為負(fù)—符號(hào)位VREF+=VDDA=3.3V①②②↙摘自STM32CUBEMX項(xiàng)目探究:ADC校準(zhǔn)HAL_ADCEx_Calibration_Start()應(yīng)該在HAL_ADC_Start()和HAL_ADCEx_InjectedStart()之前制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)29HAL_ADC_Start()和HAL_ADCEx_InjectedStart()都會(huì)對(duì)ADON置位摘自中文參考手冊(cè)項(xiàng)目探究:STM32F1系列MCU的溫度傳感器制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)30↙摘自中文參考手冊(cè)思考:為什么任務(wù)11-1的溫度采樣周期選擇239.5周期而任務(wù)11-3的溫度采樣周期選擇71.5周期?↙摘自F1xx數(shù)據(jù)手冊(cè)-大容量中間略去部分內(nèi)容17.1us(1/12MHz)>71.517.1us(1/4MHz)<71.5項(xiàng)目探究:STM32F1系列內(nèi)部參考電壓制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)31↙摘自F1xx數(shù)據(jù)手冊(cè)-大容量知識(shí)拓展:HAL_ADC_Start()解讀之1喚醒ADC外設(shè)開(kāi)啟ADC轉(zhuǎn)換制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)32①②③←摘自中文參考手冊(cè)置1代碼被折疊知識(shí)拓展:HAL_ADC_Start()解讀之2對(duì)ADON的設(shè)置分兩種情況原值為0時(shí):?jiǎn)拘言禐?時(shí):?jiǎn)?dòng)轉(zhuǎn)換制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)33③摘自中文參考手冊(cè)知識(shí)拓展:HAL_ADC_Start()解讀之3項(xiàng)目十一的任務(wù)使用軟件觸發(fā)制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)34①②③←摘自中文參考手冊(cè)11.12.3節(jié)↓ADC_CR2寄存器
設(shè)置狀態(tài)代碼被折疊代碼被折疊和其他情況知識(shí)拓展:HAL_ADC_PollForConversion()解讀通過(guò)判斷EOC標(biāo)志或等待最大用時(shí)來(lái)獲得轉(zhuǎn)換結(jié)束的結(jié)論本函數(shù)用于DMA模式將返回HAL錯(cuò)誤狀態(tài)制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)35①②③返回HAL_ERRORADC_CR2寄存器
多通道:通過(guò)等待最大轉(zhuǎn)換用時(shí)來(lái)獲得轉(zhuǎn)換已完成的結(jié)論↓摘自中文參考手冊(cè)11.12.3節(jié)代碼被折疊知識(shí)拓展:HAL_ADC_GetValue()解讀制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)36↓摘自STM32CUBEMX摘自中文參考手冊(cè)↑摘自中文參考手冊(cè)11.12.1節(jié)知識(shí)拓展:HAL_ADCEx_InjectedStart()解讀之1制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)37①②③④喚醒ADCHAL_ADC_Start()已分析過(guò)此函數(shù)代碼結(jié)構(gòu)與HAL_ADC_Start()類(lèi)似代碼被折疊知識(shí)拓展:HAL_ADCEx_InjectedStart()解讀之2制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)38②③④清除JEOC標(biāo)志位ADC_CR2寄存器ADC_CR2寄存器
?摘自中文參考手冊(cè)11.12.3節(jié)和其他情況或作為主ADC代碼被折疊設(shè)置狀態(tài)知識(shí)拓展:HAL_ADCEx_InjectedPollForConversion()解讀之1制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)39①②③←下頁(yè)有大圖→代碼被折疊知識(shí)拓展:HAL_ADCEx_InjectedPollForConversion()解讀之2通過(guò)判斷JEOC標(biāo)志或等待最大用時(shí)來(lái)獲得轉(zhuǎn)換結(jié)束的結(jié)論清除標(biāo)志位設(shè)置狀態(tài),并將ADC狀態(tài)恢復(fù)為READY制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)40①③②多通道:通過(guò)等待最大轉(zhuǎn)換用時(shí)來(lái)獲得轉(zhuǎn)換已完成的結(jié)論單通道的情況如果是軟件觸發(fā)知識(shí)拓展:HAL_ADCEx_InjectedPollForConversion()解讀之3HAL_ADC_PollForConversion()函數(shù)處理超時(shí)的方法與上圖相同這里使用滴答定時(shí)器來(lái)測(cè)算時(shí)間HAL_GetTick()返回滴答定時(shí)器計(jì)數(shù)器的毫秒級(jí)數(shù)值制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)41②被折疊的代碼是通過(guò)等待最大轉(zhuǎn)換用時(shí)來(lái)獲得轉(zhuǎn)換已完成的結(jié)論知識(shí)拓展:HAL_ADCEx_InjectedGetValue()解讀制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)42使用此函數(shù)應(yīng)注意JEOC標(biāo)志位的清除摘自中文參考手冊(cè)↑摘自中文參考手冊(cè)11.12.1節(jié)知識(shí)拓展:ADC規(guī)則轉(zhuǎn)換的連續(xù)模式制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)43摘自中文參考手冊(cè)摘自中文參考手冊(cè)摘自STM32CUBEMX調(diào)用HAL_ADC_Start()函數(shù)開(kāi)啟連續(xù)規(guī)則轉(zhuǎn)換調(diào)用HAL_ADC_Stop()函數(shù)停止連續(xù)轉(zhuǎn)換①知識(shí)拓展:HAL_ADC_Stop()解讀制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)44①②③摘自中文參考手冊(cè)11.12.3節(jié)↑③代碼被折疊知識(shí)拓展:ADC注入轉(zhuǎn)換的自動(dòng)注入設(shè)置自動(dòng)注入后無(wú)需調(diào)用函數(shù)進(jìn)行軟件觸發(fā)單次模式時(shí)轉(zhuǎn)換后停止當(dāng)設(shè)置自動(dòng)注入+連續(xù)轉(zhuǎn)換模式調(diào)用HAL_ADC_Start()函數(shù)開(kāi)啟連續(xù)轉(zhuǎn)換調(diào)用HAL_ADC_Stop()函數(shù)停止連續(xù)轉(zhuǎn)換制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)45↙摘自中文參考手冊(cè)11.12.2節(jié)摘自STM32CUBEMX使用此方式必須同時(shí)存在規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換摘自中文參考手冊(cè)HAL_ADCEx_InjectedStart()知識(shí)拓展:HAL_ADCEx_InjectedStop()解讀如果開(kāi)啟“自動(dòng)注入”,需要使用HAL_ADC_Stop()來(lái)關(guān)閉與HAL_ADC_Stop()一樣,也是通過(guò)調(diào)用ADC_ConversionStop_Disable()來(lái)實(shí)現(xiàn)關(guān)閉ADC外設(shè),最終通過(guò)調(diào)用__HAL_ADC_DISABLE()宏來(lái)對(duì)ADON位清0,從而關(guān)閉ADC外設(shè)制作者或logo項(xiàng)目11:STM32芯片溫度檢測(cè)46①②①項(xiàng)目12知識(shí)準(zhǔn)備:STM32ADC中斷EOC可軟件或DR值讀取后硬件清0
JEOC只能軟件清0制作者或logo項(xiàng)目12光照監(jiān)測(cè)47↙摘自中文參考手冊(cè)↓摘自STM32CUBEMX知識(shí)準(zhǔn)備:STM32ADC中斷HAL函數(shù)制作者或logo項(xiàng)目12光照監(jiān)測(cè)48注入轉(zhuǎn)換HAL_ADCEx_InjectedStart_IT()//啟動(dòng)HAL_ADCEx_InjectedStop_IT()//停止↑規(guī)則轉(zhuǎn)換回調(diào)函數(shù)注入轉(zhuǎn)換回調(diào)函數(shù)→↑摘自F1xxHAL庫(kù)驅(qū)動(dòng)手冊(cè)7.2.2知識(shí)準(zhǔn)備:外部觸發(fā)ADC轉(zhuǎn)換之1制作者或logo項(xiàng)目12光照監(jiān)測(cè)49摘自中文參考手冊(cè)11.3節(jié)STM32ADC框圖←項(xiàng)目十一使用的觸發(fā)方式摘自中文參考手冊(cè)摘自中文參考手冊(cè)11.12.3節(jié)↑使用EXTI時(shí)需要特別注意知識(shí)準(zhǔn)備:外部觸發(fā)ADC轉(zhuǎn)換之2ADC3的規(guī)則通道的外部觸發(fā)請(qǐng)參考表66↓ADC3的注入通道的外部觸發(fā)請(qǐng)參考表67制作者或logo項(xiàng)目12光照監(jiān)測(cè)50摘自中文參考手冊(cè)11.3節(jié)STM32ADC框圖摘自中文參考手冊(cè)11.7節(jié)摘自中文參考手冊(cè)11.12.3節(jié)知識(shí)準(zhǔn)備:外部觸發(fā)ADC轉(zhuǎn)換之3何為軟件觸發(fā)(軟件控制)ADC轉(zhuǎn)換通過(guò)對(duì)ADC_CR2寄存器的SWSTART置1來(lái)開(kāi)啟規(guī)則轉(zhuǎn)換通過(guò)對(duì)ADC_CR2寄存器的JSWSTART置1來(lái)開(kāi)啟規(guī)則轉(zhuǎn)換項(xiàng)目十一使用的就是以上軟件觸發(fā)方式項(xiàng)目十二將使用定時(shí)器TRGO觸發(fā)制作者或logo項(xiàng)目12光照監(jiān)測(cè)51摘自中文參考手冊(cè)11.12.3節(jié)↑摘自HAL_ADC_Start()函數(shù)↓摘自HAL_ADCEx_InjectedStart()函數(shù)EXTSEL是設(shè)置規(guī)則轉(zhuǎn)換外部觸發(fā)方式的寄存器位→JEXTSEL是設(shè)置注入轉(zhuǎn)換外部觸發(fā)方式的寄存器位→項(xiàng)目實(shí)施:基于M3主控模塊
項(xiàng)目12:
光照監(jiān)測(cè)使用ADC1的中斷方式實(shí)現(xiàn):每隔1.15s由定時(shí)器TRGO事件觸發(fā)一次光敏傳感器電壓值的轉(zhuǎn)換,每隔2s由定時(shí)器TRGO事件觸發(fā)一次內(nèi)部參考電壓,并將轉(zhuǎn)換結(jié)果顯示在PC機(jī)的串口助手中氣體傳感器在規(guī)則組IN0實(shí)現(xiàn)轉(zhuǎn)換,請(qǐng)使用TIM3的TRGO事件觸發(fā)內(nèi)部參考電壓在注入組實(shí)現(xiàn)轉(zhuǎn)換,請(qǐng)使用TIM2的TRGO事件觸發(fā)使用ADC中斷設(shè)備連接圖參考“任務(wù)實(shí)施:結(jié)果驗(yàn)證”制作者或logo項(xiàng)目12光照監(jiān)測(cè)52項(xiàng)目實(shí)施:
STM32CUBEMX的設(shè)置MCU選型、RCC和SYS,時(shí)鐘ClockConfiguration和項(xiàng)目ProjectManagerUART1的配置定時(shí)器的配置①②ADC的配置-↓三張圖③④⑤制作者或logo項(xiàng)目12光照監(jiān)測(cè)53↑按照任務(wù)11-1的設(shè)置←按照任務(wù)5-1的設(shè)置①②③④⑤定時(shí)器不必開(kāi)中斷項(xiàng)目實(shí)施:代碼編寫(xiě)(一)按順序在主循環(huán)while(1)之前、ADC初始化之后添加以下代碼“校準(zhǔn)ADC1”的代碼——自行添加“開(kāi)啟TIM外設(shè)”的代碼(不需要使能TIM中斷)自行添加添加參考代碼①重定義EOC中斷回調(diào)函數(shù)以獲取氣體傳感器電壓值轉(zhuǎn)換結(jié)果并上傳到串口:請(qǐng)參考以下代碼②
如果使用sprintf()和memset()別忘了添加頭文件包含指令——參考項(xiàng)目11制作者或logo項(xiàng)目12光照監(jiān)測(cè)54①②voidHAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc){if(hadc->Instance==ADC1){ illu_vol=(int)(()*3.3*1000)>>12;//參考項(xiàng)目11,補(bǔ)全獲取規(guī)則轉(zhuǎn)換結(jié)果的代碼 if(illu_vol)
{//參考項(xiàng)目11,自行添加數(shù)據(jù)處理與串UART發(fā)送代碼}}}↖別忘了illu_vol的聲明intillu_vol=0;項(xiàng)目實(shí)施:代碼編寫(xiě)(二)重定義JEOC中斷回調(diào)函數(shù)以獲取內(nèi)部參考電壓:請(qǐng)參考以下代碼③別忘了ref_vol聲明制作者或logo項(xiàng)目12光照監(jiān)測(cè)55intref_vol=0;③項(xiàng)目實(shí)施:請(qǐng)將代碼添加到正確的位置/*Privatevariables-----------------------------------*//*USERCODEBEGINPV*//*USERCODEENDPV*/…略…intmain(void){HAL_Init();SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init(); MX_TIM2_Init();//數(shù)字取決于你使用哪個(gè)TIM MX_USART1_UART_Init(); MX_ADC1_Init();
/*USERCODEBEGIN2*/
/*USERCODEEND2*/
/*Infiniteloop*/
/*USERCODEBEGINWHILE*/while(1){
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/}
/*USERCODEEND3*/}/*注main()到此結(jié)束*/…略…/*USERCODEBEGIN4*//*USERCODEEND4*/制作者或logo項(xiàng)目12光照監(jiān)測(cè)56①②注意:HAL_ADCEx_Calibration_Start()函數(shù)必須在ADC初始化之后調(diào)用;并在HAL_ADC_Start()和HAL_ADCEx_InjectedStart()之前調(diào)用項(xiàng)目實(shí)施:結(jié)果驗(yàn)證←如果使用光敏傳感小模塊↙如果使用其他傳感模塊(以氣體傳感器為例)如果兩塊設(shè)備未放在同一個(gè)NEWLAB上,需要連通兩塊設(shè)備的GND——共地具體電壓值根據(jù)你的實(shí)際情況制作者或logo項(xiàng)目12光照監(jiān)測(cè)57項(xiàng)目實(shí)施:基于proteus仿真
項(xiàng)目12:
光照監(jiān)測(cè)使用ADC1的中斷方式實(shí)現(xiàn):每隔1.15s以軟件方式開(kāi)啟光敏電阻電壓值的轉(zhuǎn)換,并將轉(zhuǎn)換后的電壓值發(fā)送到虛擬終端光照傳感器在規(guī)則組IN0實(shí)現(xiàn)轉(zhuǎn)換使用ADC中斷使用定時(shí)器控制間隔時(shí)間制作者或logo項(xiàng)目12光照監(jiān)測(cè)58項(xiàng)目實(shí)施:STM32CUBEMX的設(shè)置MCU選型、RCC和SYS,時(shí)鐘ClockConfiguration和項(xiàng)目ProjectManagerUART1的配置定時(shí)器的配置ADC的配置-①②兩張圖②是ADC中斷制作者或logo項(xiàng)目12光照監(jiān)測(cè)59←參照項(xiàng)目5的設(shè)置↖參照項(xiàng)目1的設(shè)置①←②別忘了開(kāi)啟定時(shí)器中斷←參照項(xiàng)目8/9的設(shè)置,注意定時(shí)時(shí)長(zhǎng)與項(xiàng)目8/9不同項(xiàng)目實(shí)施:代碼編寫(xiě)(一)按順序在主循環(huán)while(1)之前、ADC初始化之后添加以下代碼“校準(zhǔn)ADC1”的代碼——自行添加“開(kāi)啟TIM外設(shè)和TIM中斷”的代碼自行添加添加參考代碼①重定義EOC中斷回調(diào)函數(shù)以獲取氣體傳感器電壓值轉(zhuǎn)換結(jié)果并上傳到串口:請(qǐng)參考以下代碼②
制作者或logo項(xiàng)目12光照監(jiān)測(cè)60①②//memset()用法參考鏈接:/cprogramming/c-function-memset.html//sprintf()用法參考鏈接:/cprogramming/c-function-sprintf.html↖別忘了illu_vol和數(shù)組uart_string的聲明intillu_vol=0;charuart_string[50];項(xiàng)目實(shí)施:代碼編寫(xiě)(二)重定義TIM中斷回調(diào)函數(shù),軟件方式開(kāi)啟規(guī)則轉(zhuǎn)換③制作者或logo項(xiàng)目12光照監(jiān)測(cè)61③項(xiàng)目實(shí)施:請(qǐng)將代碼添加到正確的位置/*Privatevariables-----------------------------------*//*USERCODEBEGINPV*//*USERCODEENDPV*/…略…intmain(void){HAL_Init();SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init(); MX_TIM2_Init();//數(shù)字取決于你使用哪個(gè)TIM MX_USART1_UART_Init(); MX_ADC1_Init();
/*USERCODEBEGIN2*/
/*USERCODEEND2*/
/*Infiniteloop*/
/*USERCODEBEGINWHILE*/while(1){
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/}
/*USERCODEEND3*/}/*注main()到此結(jié)束*/…略…/*USERCODEBEGIN4*//*USERCODEEND4*/制作者或logo項(xiàng)目12光照監(jiān)測(cè)62①②注意:HAL_ADCEx_Calibration_Start()函數(shù)必須在ADC初始化之后調(diào)用;并在HAL_ADC_Start()和HAL_ADCEx_InjectedStart()之前調(diào)用項(xiàng)目實(shí)施:結(jié)果驗(yàn)證TIM定期調(diào)用HAL_ADC_Start_IT()以開(kāi)啟ADC中斷和ADC外設(shè)制作者或logo項(xiàng)目12光照監(jiān)測(cè)63任務(wù)實(shí)施:結(jié)果驗(yàn)證制作者或logo項(xiàng)目12光照監(jiān)測(cè)64如果按照“基于M3主控模塊”的外部觸發(fā)來(lái)實(shí)現(xiàn)光照監(jiān)測(cè)的定時(shí)控制,無(wú)法在Proteus驗(yàn)證結(jié)果可以使用KEILMDK內(nèi)部仿真器查看寄存器值的方式驗(yàn)證結(jié)果——如圖①和②KEILMDK內(nèi)部仿真器的用法見(jiàn)項(xiàng)目10①②習(xí)題習(xí)題操作題:基于M3主控模塊每次按下并放開(kāi)按鍵,ADC2以輪詢(xún)方式采集光照傳感電壓值(連接到IN0)操作題:基于proteus仿真電路每次按下并放開(kāi)按鍵,ADC1以輪詢(xún)方式采集光照傳感電壓值(連接到IN4)提示:修改proteus電路圖制作者或logo項(xiàng)目12光照監(jiān)測(cè)65項(xiàng)目探究:ADC外部通道的復(fù)用引腳ADC外部通道使用哪些復(fù)用引腳其余通道請(qǐng)參考項(xiàng)目十一的項(xiàng)目基礎(chǔ)ADC復(fù)用引腳的GPIO工作模式↓制作者或logo項(xiàng)目12光照監(jiān)測(cè)66↙摘自中文參考手冊(cè)8.1.11節(jié)←摘自數(shù)據(jù)手冊(cè)的表5摘自STM32CUBEMX項(xiàng)目探究:ADC外部通道的復(fù)用引腳制作者或logo項(xiàng)目12光照監(jiān)測(cè)67↖摘自數(shù)據(jù)手冊(cè)的表5←左圖僅適用STM32F103系列中引腳144的MCUSTM32F103VE3個(gè)ADC相同3個(gè)ADC相同項(xiàng)目探究:ADC初始化-使用中斷
制作者或logo項(xiàng)目12光照監(jiān)測(cè)68①摘自F1xxHAL庫(kù)驅(qū)動(dòng)手冊(cè)項(xiàng)目十二使用外部通道和中斷以規(guī)則轉(zhuǎn)換為例使用事件觸發(fā)無(wú)需開(kāi)啟TIM中斷,也無(wú)需重定義TIMBASE回調(diào)函數(shù)——占用CPU資源少了項(xiàng)目探究:ADC的事件觸發(fā)制作者或logo項(xiàng)目12光照監(jiān)測(cè)69摘自STM32CUBEMX摘自STM32CUBEMX↙的ADC設(shè)置↙摘自中文參考手冊(cè)11.7節(jié)←KEILMDK內(nèi)部仿真器查看到的寄存器值TIM設(shè)置ADC設(shè)置項(xiàng)目探究:STM32ADC中斷方式HAL函數(shù)用法HAL_StatusTypeDefHAL_ADC_Start_IT(ADC_HandleTypeDef*hadc);//啟HAL_StatusTypeDefHAL_ADC_Stop_IT(ADC_HandleTypeDef*hadc);//停voidHAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc);//回調(diào)函數(shù)的定義中調(diào)用以下函數(shù)uint32_tHAL_ADC_GetValue(ADC_HandleTypeDef*hadc);//獲取結(jié)果HAL_StatusTypeDefHAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef*hadc);//啟HAL_StatusTypeDefHAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef*hadc);//停voidHAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef*hadc);//回調(diào)函數(shù)的定義中調(diào)用uint32_tHAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef*hadc,uint32_tInjectedRank);//獲取結(jié)果制作者或logo項(xiàng)目12光照監(jiān)測(cè)70規(guī)則轉(zhuǎn)換注入轉(zhuǎn)換項(xiàng)目探究:STM32ADC中斷處理函數(shù)本項(xiàng)目的任務(wù)未禁用EOC/JEOC中斷制作者或logo項(xiàng)目12光照監(jiān)測(cè)71①②⑴⑴當(dāng)EOC標(biāo)志位為1⑵⑵被折疊的代碼中包含被折疊的代碼中包含代碼被折疊→代碼被折疊→代碼↘被折疊代碼被折疊→知識(shí)拓展:HAL_ADC_Stop_IT()解讀HAL_ADC_Stop_IT()比HAL_ADC_Stop()多了__HAL_ADC_DISABLE_IT(hadc,ADC_IT_EOC);用于禁用EOC中斷,使EOCIE位清0制作者或logo項(xiàng)目12光照監(jiān)測(cè)72摘自中文參考手冊(cè)11.12.2節(jié)↑清0①①①②②②知識(shí)拓展:HAL_ADC_Start_IT()解讀HAL_ADC_Start_IT()比HAL_ADC_Start()多了__HAL_ADC_ENABLE_IT(hadc,ADC_IT_EOC);用于使能EOC中斷,使EOCIE位的值置1制作者或logo項(xiàng)目12光照監(jiān)測(cè)73摘自中文參考手冊(cè)11.12.2節(jié)→①②知識(shí)拓展:HAL_ADCEx_InjectedStart_IT()詳解比HAL_ADCEx_InjectedStart()多了制作者或logo項(xiàng)目12光照監(jiān)測(cè)74摘自中文參考手冊(cè)11.12.2節(jié)↓①②__HAL_ADC_ENABLE_IT(hadc,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山東第一醫(yī)科大學(xué)附屬腫瘤醫(yī)院第二批招聘?jìng)淇碱}庫(kù)及答案詳解(奪冠系列)
- 初一昌平考試期末題目及答案
- 策劃師考試試卷及答案
- 醫(yī)院藥師培訓(xùn)試題及答案
- 2025-2026人教版初中七年級(jí)語(yǔ)文卷
- 2025-2026七年級(jí)上道德與法治期末測(cè)試
- 《高寒退化坡草地客土噴播修復(fù)規(guī)程》征求意見(jiàn)稿編制說(shuō)明
- 公共衛(wèi)生許可證管理制度
- 衛(wèi)生室組織管理制度
- 社區(qū)服務(wù)站衛(wèi)生監(jiān)督制度
- 新疆環(huán)保行業(yè)前景分析報(bào)告
- 2025~2026學(xué)年福建省泉州五中七年級(jí)上學(xué)期期中測(cè)試英語(yǔ)試卷
- 聯(lián)合辦公合同范本
- 2025年生物多樣性保護(hù)與生態(tài)修復(fù)項(xiàng)目可行性研究報(bào)告
- 2025年黑龍江省檢察院公益訴訟業(yè)務(wù)競(jìng)賽測(cè)試題及答案解析
- 一氧化碳中毒救治課件
- 廣東事業(yè)單位歷年考試真題及答案
- 《會(huì)計(jì)信息化工作規(guī)范》解讀(楊楊)
- 工程機(jī)械設(shè)備租賃服務(wù)方案投標(biāo)文件(技術(shù)方案)
- 高海拔地區(qū)GNSS大壩監(jiān)測(cè)技術(shù)研究
- 實(shí)施指南(2025)《DL-T 1630-2016氣體絕緣金屬封閉開(kāi)關(guān)設(shè)備局部放電特高頻檢測(cè)技術(shù)規(guī)范》
評(píng)論
0/150
提交評(píng)論