在STM32F103ZET6核心板進行STM32應(yīng)用開發(fā),完成以下功能:
①將ADC_IN0設(shè)置為12位ADC,右對齊,啟用中斷。
②分別用查詢和中斷兩種方式,每個0.5S采樣一個ADC數(shù)據(jù)。
③將每次讀取到的ADC采樣值轉(zhuǎn)換為對應(yīng)的電壓值,發(fā)送到上位機。
④LED1作為采樣指示燈,在ADC轉(zhuǎn)換過程中亮,其余時間滅。
初接觸編程的小白,兩年電子生涯給我積累了雄厚的硬件基礎(chǔ),接觸編程到今年三月整整一年,51單片機到STM32,當然肯定不是精通,51只是達到會用的程度,主要是通過51熟悉底層編程的思路,因為到了32接觸底層的機會越來越少原因是太復(fù)雜有難度,現(xiàn)階段比賽需要沒有太多時間詳細的去學(xué)習(xí),所以沒接觸過32寄存器,普通的庫函數(shù)開發(fā)也沒接觸過直接上的HAL庫,想要在這個行業(yè)有點成績,忙完了比賽肯定是欠下的都需要補回來的,說實話一開始的時候挺絕望的,但是通過學(xué)習(xí)發(fā)現(xiàn)也不是個學(xué)不會的事,追夢人共同加油!
ADC這個學(xué)過模電的應(yīng)該都對他特別熟悉,他真的是無處不在,嗯,關(guān)于什么是ADC,幾個重要的技術(shù)指標,我就不介紹硬件方面的知識了,這個是屬于常識性的東西必須得掌握的,不知道的度娘補課了,從STM32的資源說起。
我用的是STM32F103ZET6主控,它里面一共有3個12位逐次逼近型的ADC,ADC1 ADC2 ADC3,有18個測量通道,16+2,可測量16個外部個2個內(nèi)部信號(內(nèi)部溫度 內(nèi)部電壓),這個2只能接ADC1,然后AD轉(zhuǎn)換可以以單次,連續(xù),掃描和間接形式執(zhí)行,按照組織來分又分為注入組和規(guī)則組,結(jié)果存儲形式有左對齊和右對齊(建議),這些基本的東西反正我是記住,因為我用的這個主控所以我記得比較明白,其他的我沒用過的我也不知道但是每學(xué)習(xí)一個都需要對你這個主控進行把握正所謂知己知彼百戰(zhàn)百勝,不具體展開說反正我感覺東西不少,多用就逐漸記住了。
直接說STM32CubeMX關(guān)于ADC對配置,因為底層的東西坦白講我說不明白,現(xiàn)在只是達到對外設(shè)會用的程度,我們進行AD轉(zhuǎn)換肯定是要得到一個結(jié)果,HAL庫中進行AD轉(zhuǎn)換結(jié)果讀取的方式有3種,我先介紹2種坦白講第三種DMA多線程同時采集的我還沒會,等會了再補上。
1堵塞式AD轉(zhuǎn)換(查詢)
uint16_t ADC_Value = 0;
HAL_ADC_Start(&hadc);//啟動哪一個AD轉(zhuǎn)換,通過這個函數(shù)告訴它
if(HAL_OK == HAL_ADC_PollForConversion(&handc,10))//轉(zhuǎn)換過程函數(shù)&handc轉(zhuǎn)換的AD,10為轉(zhuǎn)換超時時間
{
ADC0_Value = HAL_ADC_GetValue(&handc);//轉(zhuǎn)換成功后就讀取這個AD結(jié)果
}
2非阻塞式A/D轉(zhuǎn)換(中斷)
uint16_t ADC_Value = 0;
HAL_ADC_Start_IT(&hadc);//通過帶有中斷的函數(shù)啟動AD轉(zhuǎn)換
void HAL_ADC_ConvCPltCallback(ADC_HandleTypeDef* hadc1);//進入中斷回調(diào)函數(shù),讀取AD轉(zhuǎn)換值
{
ADC_Value = HAL_ADC_GetValue(&handc);
}
然后就可以來做開頭那個小題目了,開頭那個小題目還用到串口,這部分在這不介紹不會的先度娘吧有時間我在出一個串口的。
HAL庫配置使用CubeMX這個軟件具體配置我想偷個懶不想粘圖就是找到ADC1>INT0然后啟用NVIC開啟中斷,找到UART1->異步通訊->波特率9600也可以115200(和上位機同步)再打開LED的GPIO配置為OUT,初始電平H因為我硬件的原因,開啟外部時鐘,配置時鐘樹,生成代碼,然后在KEIL中進行個性化開發(fā)。
然后核心代碼已經(jīng)貼出。
|