日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32----重温ADC测量电压值

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32----重温ADC测量电压值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ADC測量電壓值

實現目標使用兩個按鍵控制串口的輸出和ADC的轉換。使用DMA將ADC數據存放在內存中,然后計算對應的電壓值。然后由串口1發送至上位機。
主要講一下對于按鍵和串口的配置與之前都一樣只是在按鍵的中斷函數中添加了控制的內容,控制ADC的轉換開始和關閉,控制DMA的開啟和關閉,通過標志flag來控制串口打印的內容。

void EXTI1_IRQHandler(void) {if(EXTI_GetITStatus(EXTI_Line1) == SET){GPIO_ResetBits(GPIOA,GPIO_Pin_8);EXTI_ClearITPendingBit(EXTI_Line1);ADC_SoftwareStartConvCmd(ADC1,ENABLE);DMA_Cmd(DMA1_Channel1,ENABLE);flag = 1;} }void EXTI15_10_IRQHandler(void) {if(EXTI_GetITStatus(EXTI_Line13) == SET){GPIO_SetBits(GPIOA,GPIO_Pin_8);EXTI_ClearITPendingBit(EXTI_Line13);ADC_SoftwareStartConvCmd(ADC1,DISABLE);DMA_Cmd(DMA1_Channel1,DISABLE);flag = 0;} }

ADC使用DMA的DMA配置

DMA的配置與之前大同小異,首先搞清楚ADC1使用的DMA1的哪一個通道,查閱資料通道1。接下來就是開啟時鐘,初始化DMADMA_DeInit(DMA1_Channel1);配置外設的地址(u32)&ADC1->DR
對于傳輸的大小,注意是半字,不是一個字節。具體的配置如下:

void DMA1_Channel1_Config(void) {DMA_InitTypeDef dma_s;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);DMA_DeInit(DMA1_Channel1);dma_s.DMA_BufferSize = 10;dma_s.DMA_DIR = DMA_DIR_PeripheralSRC;dma_s.DMA_M2M = DMA_M2M_Disable;dma_s.DMA_MemoryBaseAddr = (u32)&ADC_Value;dma_s.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;dma_s.DMA_MemoryInc = DMA_MemoryInc_Enable;dma_s.DMA_Mode = DMA_Mode_Circular;dma_s.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;dma_s.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;dma_s.DMA_PeripheralInc = DMA_PeripheralInc_Disable;dma_s.DMA_Priority = DMA_Priority_Medium;DMA_Init(DMA1_Channel1,&dma_s);DMA_Cmd(DMA1_Channel1,ENABLE); }

測量電壓ADC的配置

ADC的配置中涉及到ADC_InitTypeDef的結構體,結構的每一個成員就是ADC要配置的內容。

  • ADC_ContinuousConvMode:ADC是否連續轉換
  • ADC_DataAlign:數據的對齊方式左對齊或者右對齊
  • ADC_ExternalTrigConv:adc轉換是否外部觸發
  • ADC_Mode:adc的模式一般為獨立模式
  • ADC_NbrOfChannel:adc轉換的通道數目
  • ADC_ScanConvMode:adc是否開啟掃描模式,當多通道掃描時開啟
    配置完成以后,需要對adc的時鐘進行相應的配置。adc的時鐘頻率越高轉換速度越快,但adc時鐘有上限值,不能超過14MHz。adc的時鐘圖如下:


    adc轉換的時間不僅與時鐘有關,還與采樣周期有關。每個不同的adc通過都可以設置不同的采樣周期。利用庫函數ADC_RegularChannelConfig()來進行配置。函數中四個參數例:
ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_55Cycles5);

第三個參數表示掃描的順序。例如,通過1,2,3的參數分別為3,2,1的話,掃描順序為通道3、通道2、通道1.最后一個參數配置本通道的采樣周期。adc采樣時間計算公式為:T=采樣周期+12.5周期。12.5個周期為固定數值。通道的轉換時間t=T*1/時鐘。

最后就是ADC的自校準:

ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1))ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));

因為ADC模式設置為軟件觸發方式,所以可以在任何地方通過函數ADC_SoftwareStartConvCmd(ADC1,ENABLE);來觸發adc開始轉換。

總結

以上是生活随笔為你收集整理的STM32----重温ADC测量电压值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。