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