簡介
CH32V103系列是以青稞V3A處理器為核心的32位通用RISC-V MCU,該處理器是基于RISC-V開源指令集設(shè)計。片上集成了時鐘安全機制、多級電源管理、通用DMA控制器。此系列具有1路USB2.0主機/設(shè)備接口、多通道12位ADC轉(zhuǎn)換模塊、多通道TouchKey、多組定時器、多路IIC/USART/SPI接口等豐富的外設(shè)資源。
本章教程使用CH32V103開發(fā)板的ADC1通道1對開發(fā)板的VCC引腳和GND引腳進行采樣,并將采樣結(jié)果通過串口調(diào)試助手打印顯示。
1、ADC及相關(guān)函數(shù)介紹
CH32V103的ADC模塊包含一個 12 位的逐次逼近型的模擬數(shù)字轉(zhuǎn)換器,最高14MHz的輸入時鐘。支持16個外部通道和2個內(nèi)部信號源采樣源??赏瓿赏ǖ赖膯未无D(zhuǎn)換、連續(xù)轉(zhuǎn)換,通道間自動掃描模式、間斷模式、外部觸發(fā)模式等功能??梢酝ㄟ^模擬看門狗功能監(jiān)測通道電壓是否在閾值范圍內(nèi)。
關(guān)于ADC具體信息,可參考CH32V103應(yīng)用手冊。ADC標準庫函數(shù)具體內(nèi)容如下:

1.1、void ADC_DeInit(ADC_TypeDef* ADCx)
功 能:將ADCx外圍寄存器初始化為其默認重置值。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.2、void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
功 能:根據(jù)ADC_InitStruct中指定的參數(shù)初始化ADCx外圍設(shè)備。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_InitStruct:指向包含指定ADC外圍設(shè)備的配置信息的ADC_InitTypeDef結(jié)構(gòu)的指針。
1.3、void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)
功 能:用默認值填充每個ADC_InitStruct成員。
輸 入:ADC_InitStruct:指向包含指定ADC外圍設(shè)備的配置信息的ADC_InitTypeDef結(jié)構(gòu)的指針。
1.4、無效ADC_Cmd(ADC_TypeDef* ADCx,函數(shù)狀態(tài)新狀態(tài))
功 能:啟用或禁用指定的ADC外圍設(shè)備。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; NewState:啟用或禁用。
1.5、無效ADC_DMACmd(ADC_TypeDef* ADCx,功能狀態(tài)新狀態(tài))
功 能:啟用或禁用指定的ADC DMA請求。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; NewState:啟用或禁用。
1.6、無效ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)
功 能:啟用或禁用指定的ADC中斷。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; ADC_IT:指定要啟用或禁用的ADC中斷源。 NewState:啟用或禁用。
1.7、無效ADC_ResetCalibration(ADC_TypeDef* ADCx)
功 能:重置所選ADC校準寄存器。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.8、標志狀態(tài)ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
功 能:獲取所選ADC重置校準寄存器狀態(tài)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.9、無效ADC_StartCalibration(ADC_TypeDef* ADCx)
功 能:啟動所選ADC校準過程。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.10、標志狀態(tài)ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
功 能:獲取所選ADC校準狀態(tài)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.11、無效ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx,函數(shù)狀態(tài)新狀態(tài))
功 能:啟用或禁用所選ADC軟件啟動轉(zhuǎn)換。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; NewState:啟用或禁用。
1.12、FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)
功 能:獲取所選ADC軟件開始轉(zhuǎn)換狀態(tài)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.13、void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number)
功 能:為所選ADC常規(guī)組通道配置不連續(xù)模式。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;Number:指定不連續(xù)模式常規(guī)通道計數(shù)值。
1.14、void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:為指定的ADC啟用或禁用常規(guī)組通道上的不連續(xù)模式。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.15、void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
功 能:為所選ADC常規(guī)通道配置其在序列器中的相應(yīng)列組及其采樣時間。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_Channel:要配置的ADC信道;Rank:常規(guī)組序列器中的等級;ADC_SampleTime:要為所選通道設(shè)置的采樣時間值。
1.16、void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:通過外部觸發(fā)器啟用或禁用ADCx轉(zhuǎn)換。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.17、uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
功 能:返回常規(guī)通道的最后一個ADCx轉(zhuǎn)換結(jié)果數(shù)據(jù)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.18、uint32_t ADC_GetDualModeConversionValue(void)
功 能:以雙模式返回最后一個ADC1和ADC2轉(zhuǎn)換結(jié)果數(shù)據(jù)。
輸 入:無。
1.19、void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:啟用或禁用所選ADC在常規(guī)轉(zhuǎn)換后自動注入組轉(zhuǎn)換。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.20、void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:為指定的ADC啟用或禁用注入組通道的不連續(xù)模式。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.21、void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv)
功 能:為注入通道轉(zhuǎn)換配置ADCx外部觸發(fā)器。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_ExternalTrigInjecConv:指定開始注入轉(zhuǎn)換的ADC觸發(fā)器。
1.22、void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:通過外部觸發(fā)器啟用或禁用ADCx注入通道轉(zhuǎn)換。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.23、void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:啟用或禁用注入通道轉(zhuǎn)換的所選ADC啟動。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.24、FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx)
功 能:獲取所選ADC軟件開始注入轉(zhuǎn)換狀態(tài)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.25、void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
功 能:為所選ADC注入通道配置其在序列器中的相應(yīng)秩及其采樣時間。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_Channel:要配置的ADC信道;Rank:注入組序列器中的秩;ADC_SampleTime:要為所選通道設(shè)置的采樣時間值。
1.26、void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)
功 能:配置注入通道的序列器長度。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;Length:序列器的長度。
1.27、void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)
功 能:設(shè)置注入通道轉(zhuǎn)換值偏移。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;Offset:所選ADC注入通道的偏移值。
1.28、uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel)
功 能:ADC返回注入通道的結(jié)果。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_InjectedChannel:轉(zhuǎn)換后的ADC注入通道。
1.29、void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog)
功 能:啟用或禁用單個/所有常規(guī)或注入通道上的模擬看門狗。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_AnalogWatchdog:ADC模擬看門狗配置。
1.30、void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold)
功 能:配置模擬看門狗的高閾值和低閾值。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;HighThreshold:ADC模擬看門狗高閾值;LowThreshold:ADC模擬看門狗低閾值。
1.31、void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel)
功 能:配置模擬看門狗保護的單通道。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_Channel:為模擬看門狗配置的ADC信道。
1.32、void ADC_TempSensorVrefintCmd(FunctionalState NewState)
功 能:啟用或禁用溫度傳感器和Vrefint通道。
輸 入:NewState:啟用或禁用。
1.33、FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
功 能:檢查是否設(shè)置了指定的ADC標志。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_FLAG:指定要檢查的標志。
1.34、void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
功 能:清除ADCx的掛起標志。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_FLAG:指定要清除的標志。
1.35、ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT)
功 能:檢查指定的ADC中斷是否已發(fā)生。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_IT:指定要檢查的ADC中斷源。
1.36、void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT)
功 能:清除ADCx的中斷掛起位。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_IT:指定要清除的ADC中斷掛起位。
1.37、s32 TempSensor_Volt_To_Temper(s32 Value)
功 能:內(nèi)部溫度傳感器電壓與溫度之間的關(guān)系。
輸 入:Value:電壓值。
以上函數(shù)均為庫函數(shù)內(nèi)部函數(shù),在進行使用時只需在程序中進行調(diào)用即可。
2、硬件設(shè)計
本章教程通過ADC1通道1讀取開發(fā)板VCC引腳和GND引腳ADC值,并通過串口調(diào)試助手打印顯示出來。
3、軟件設(shè)計
CH32V103C8T6的ADC_IN1在PC1和PA1引腳,本文使用PA1,通過PA1讀取開發(fā)板VCC引腳ADC值和GND引腳ADC值,具體程序如下:
adc.h文件

adc.c文件

main.c文件

main.c文件主要進行相關(guān)函數(shù)的初始化以及打印輸出通過ADC_IN1讀取到的ADC值。
4、下載驗證
將編譯好的程序下載到開發(fā)板并復(fù)位,用杜邦線將PA1引腳分別與VCC引腳和GND引腳連接,讀取ADC值。注意,此處VCC引腳連接3.3V。串口打印情況具體如下:
當連接GND引腳時:

當連接VCC(3.3V)引腳時:

-
mcu
+關(guān)注
關(guān)注
147文章
18593瀏覽量
386048 -
adc
+關(guān)注
關(guān)注
100文章
7332瀏覽量
553624 -
采樣
+關(guān)注
關(guān)注
1文章
128瀏覽量
26381 -
RISC-V
+關(guān)注
關(guān)注
48文章
2781瀏覽量
51812 -
CH32V103
+關(guān)注
關(guān)注
1文章
13瀏覽量
1378 -
ch32
+關(guān)注
關(guān)注
0文章
74瀏覽量
1145
發(fā)布評論請先 登錄
MCU微控制器CH32L103高速電吹風(fēng)方案
CW32的ADC視線,DMA擴展采樣思路
ADC12DJ4000RF RF采樣12位ADC技術(shù)手冊
ADC08DJ5200RF RF采樣8位ADC技術(shù)手冊
ADC3662 技術(shù)文檔總結(jié)
ADC3661 技術(shù)文檔總結(jié)
?ADC364x系列14位雙通道模數(shù)轉(zhuǎn)換器技術(shù)文檔總結(jié)
ADC3648/ADC3649 ADC 產(chǎn)品文檔總結(jié)
沁恒CH592F開發(fā)中遇到的ADC采樣不準及解決方案
定時器觸發(fā)3路ADC同時采樣指定次數(shù)
高性能射頻采樣ADC:ADC32RF5x系列技術(shù)解析
酒店智能化都用到哪些芯片之高速互聯(lián)型MCU CH32V317
CH32V303/305/307/317工業(yè)級通用微控制器數(shù)據(jù)手冊

基于CH32V103系列MCU的ADC采樣設(shè)計
評論