踩坑STM32F103
三勺最近在學(xué)習(xí)STM32F103的ADC功能,居然連最簡單的獨(dú)立模式的單通道的電壓采集都不能實(shí)現(xiàn),這就不能忍了,這是對智商的侮辱。
目標(biāo)一:實(shí)現(xiàn)單通道ADC讀取
根據(jù)技術(shù)手冊設(shè)置:
設(shè)置GPIO為模擬輸入模式。
設(shè)置ADC1->CR2、ADC->SMPR1、
ADC0->SQR1寄存器。
開啟KEIL的Debug調(diào)試功能:
現(xiàn)象1:ADC1寄存器沒有被配置。
原因和步驟:ADC1的RCC時鐘位未開啟。
現(xiàn)象2:ADC1->DATA數(shù)據(jù)寄存器全是0000
原因和步驟:
步驟1:燒野火例程源碼,功能正常。硬件正常。
步驟2:調(diào)試模式下打開ADC寄存器視圖,觀察我和野火區(qū)別。更改成相同寄存器配置后依然無法讀取ADC。
步驟3:再次回到數(shù)據(jù)手冊,仔細(xì)查看ADC描述。
破案了,我在程序中只有一次設(shè)置ADC位,即使和野火的例程寄存器配置完全相同,也無濟(jì)于事。
目標(biāo)二:實(shí)現(xiàn)多通道ADC+DMA
乘勝追擊,繼續(xù)配置
根據(jù)技術(shù)手冊設(shè)置:
現(xiàn)象:DMA的目的地址緩存數(shù)組只有第一個值有效,而且其他通道的值都和通道1相同。
步驟1:燒野火例程源碼,功能正常。硬件正常。
步驟2:調(diào)試模式下打開ADC寄存器視圖,觀察我和野火區(qū)別。更改成相同寄存器的配置后現(xiàn)象依舊。
步驟3:百度。
步驟4:瞎貓碰到死耗子,我把ADC1->CR1的掃描模式,放置在ADC1->CR2前,成功讀取所有通道的數(shù)值。
為什么?我查詢了一些資料,還不得而知,下圖是標(biāo)準(zhǔn)庫的配置順序。知道原因的朋友歡迎留言指教。
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120348 -
adc
+關(guān)注
關(guān)注
98文章
6498瀏覽量
544629 -
STM32F103
+關(guān)注
關(guān)注
33文章
477瀏覽量
63651 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52092
發(fā)布評論請先 登錄
相關(guān)推薦
評論