簡(jiǎn)介
CH32V103系列是以青稞V3A處理器為核心的32位通用RISC-V MCU,該處理器是基于RISC-V開源指令集設(shè)計(jì)。片上集成了時(shí)鐘安全機(jī)制、多級(jí)電源管理、通用DMA控制器。此系列具有1路USB2.0主機(jī)/設(shè)備接口、多通道12位ADC轉(zhuǎn)換模塊、多通道TouchKey、多組定時(shí)器、多路IIC/USART/SPI接口等豐富的外設(shè)資源。
本章教程使用CH32V103開發(fā)板的ADC1通道1對(duì)開發(fā)板的VCC引腳和GND引腳進(jìn)行采樣,并將采樣結(jié)果通過(guò)串口調(diào)試助手打印顯示。
1、ADC及相關(guān)函數(shù)介紹
CH32V103的ADC模塊包含一個(gè) 12 位的逐次逼近型的模擬數(shù)字轉(zhuǎn)換器,最高14MHz的輸入時(shí)鐘。支持16個(gè)外部通道和2個(gè)內(nèi)部信號(hào)源采樣源??赏瓿赏ǖ赖膯未无D(zhuǎn)換、連續(xù)轉(zhuǎn)換,通道間自動(dòng)掃描模式、間斷模式、外部觸發(fā)模式等功能??梢酝ㄟ^(guò)模擬看門狗功能監(jiān)測(cè)通道電壓是否在閾值范圍內(nèi)。
關(guān)于ADC具體信息,可參考CH32V103應(yīng)用手冊(cè)。ADC標(biāo)準(zhǔn)庫(kù)函數(shù)具體內(nèi)容如下:
1.1、void ADC_DeInit(ADC_TypeDef* ADCx)
功 能:將ADCx外圍寄存器初始化為其默認(rèn)重置值。
輸 入: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)
功 能:用默認(rèn)值填充每個(gè)ADC_InitStruct成員。
輸 入:ADC_InitStruct:指向包含指定ADC外圍設(shè)備的配置信息的ADC_InitTypeDef結(jié)構(gòu)的指針。
1.4、無(wú)效ADC_Cmd(ADC_TypeDef* ADCx,函數(shù)狀態(tài)新狀態(tài))
功 能:?jiǎn)⒂没蚪弥付ǖ腁DC外圍設(shè)備。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; NewState:啟用或禁用。
1.5、無(wú)效ADC_DMACmd(ADC_TypeDef* ADCx,功能狀態(tài)新狀態(tài))
功 能:?jiǎn)⒂没蚪弥付ǖ腁DC DMA請(qǐng)求。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; NewState:啟用或禁用。
1.6、無(wú)效ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)
功 能:?jiǎn)⒂没蚪弥付ǖ腁DC中斷。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備; ADC_IT:指定要啟用或禁用的ADC中斷源。 NewState:啟用或禁用。
1.7、無(wú)效ADC_ResetCalibration(ADC_TypeDef* ADCx)
功 能:重置所選ADC校準(zhǔn)寄存器。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.8、標(biāo)志狀態(tài)ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
功 能:獲取所選ADC重置校準(zhǔn)寄存器狀態(tài)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.9、無(wú)效ADC_StartCalibration(ADC_TypeDef* ADCx)
功 能:?jiǎn)?dòng)所選ADC校準(zhǔn)過(guò)程。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.10、標(biāo)志狀態(tài)ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
功 能:獲取所選ADC校準(zhǔn)狀態(tài)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.11、無(wú)效ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx,函數(shù)狀態(tài)新狀態(tài))
功 能:?jiǎn)⒂没蚪盟xADC軟件啟動(dòng)轉(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ī)通道計(jì)數(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)列組及其采樣時(shí)間。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_Channel:要配置的ADC信道;Rank:常規(guī)組序列器中的等級(jí);ADC_SampleTime:要為所選通道設(shè)置的采樣時(shí)間值。
1.16、void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:通過(guò)外部觸發(fā)器啟用或禁用ADCx轉(zhuǎn)換。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.17、uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
功 能:返回常規(guī)通道的最后一個(gè)ADCx轉(zhuǎn)換結(jié)果數(shù)據(jù)。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備。
1.18、uint32_t ADC_GetDualModeConversionValue(void)
功 能:以雙模式返回最后一個(gè)ADC1和ADC2轉(zhuǎn)換結(jié)果數(shù)據(jù)。
輸 入:無(wú)。
1.19、void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:?jiǎn)⒂没蚪盟xADC在常規(guī)轉(zhuǎn)換后自動(dòng)注入組轉(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)
功 能:通過(guò)外部觸發(fā)器啟用或禁用ADCx注入通道轉(zhuǎn)換。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;NewState:啟用或禁用。
1.23、void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
功 能:?jiǎn)⒂没蚪米⑷胪ǖ擂D(zhuǎn)換的所選ADC啟動(dòng)。
輸 入: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)秩及其采樣時(shí)間。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_Channel:要配置的ADC信道;Rank:注入組序列器中的秩;ADC_SampleTime:要為所選通道設(shè)置的采樣時(shí)間值。
1.26、void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)
功 能:配置注入通道的序列器長(zhǎng)度。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;Length:序列器的長(zhǎng)度。
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)
功 能:?jiǎn)⒂没蚪脝蝹€(gè)/所有常規(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)
功 能:配置模擬看門狗保護(hù)的單通道。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_Channel:為模擬看門狗配置的ADC信道。
1.32、void ADC_TempSensorVrefintCmd(FunctionalState NewState)
功 能:?jiǎn)⒂没蚪?a href="http://www.brongaenegriffin.com/tags/溫度傳感器/" target="_blank">溫度傳感器和Vrefint通道。
輸 入:NewState:啟用或禁用。
1.33、FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
功 能:檢查是否設(shè)置了指定的ADC標(biāo)志。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_FLAG:指定要檢查的標(biāo)志。
1.34、void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
功 能:清除ADCx的掛起標(biāo)志。
輸 入:ADCx:其中x可以是1以選擇ADC外圍設(shè)備;ADC_FLAG:指定要清除的標(biāo)志。
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ù)均為庫(kù)函數(shù)內(nèi)部函數(shù),在進(jìn)行使用時(shí)只需在程序中進(jìn)行調(diào)用即可。
2、硬件設(shè)計(jì)
本章教程通過(guò)ADC1通道1讀取開發(fā)板VCC引腳和GND引腳ADC值,并通過(guò)串口調(diào)試助手打印顯示出來(lái)。
3、軟件設(shè)計(jì)
CH32V103C8T6的ADC_IN1在PC1和PA1引腳,本文使用PA1,通過(guò)PA1讀取開發(fā)板VCC引腳ADC值和GND引腳ADC值,具體程序如下:
adc.h文件
adc.c文件
main.c文件
main.c文件主要進(jìn)行相關(guān)函數(shù)的初始化以及打印輸出通過(guò)ADC_IN1讀取到的ADC值。
4、下載驗(yàn)證
將編譯好的程序下載到開發(fā)板并復(fù)位,用杜邦線將PA1引腳分別與VCC引腳和GND引腳連接,讀取ADC值。注意,此處VCC引腳連接3.3V。串口打印情況具體如下:
當(dāng)連接GND引腳時(shí):
當(dāng)連接VCC(3.3V)引腳時(shí):
-
mcu
+關(guān)注
關(guān)注
147文章
18387瀏覽量
378930 -
adc
+關(guān)注
關(guān)注
100文章
6812瀏覽量
552093 -
采樣
+關(guān)注
關(guān)注
1文章
128瀏覽量
26291 -
RISC-V
+關(guān)注
關(guān)注
47文章
2698瀏覽量
50851 -
CH32V103
+關(guān)注
關(guān)注
1文章
13瀏覽量
1335 -
ch32
+關(guān)注
關(guān)注
0文章
74瀏覽量
1048
發(fā)布評(píng)論請(qǐng)先 登錄
沁恒CH592F開發(fā)中遇到的ADC采樣不準(zhǔn)及解決方案
定時(shí)器觸發(fā)3路ADC同時(shí)采樣指定次數(shù)
高性能射頻采樣ADC:ADC32RF5x系列技術(shù)解析

Texas Instruments ADC3669EVM ADC評(píng)估模塊 (EVM)數(shù)據(jù)手冊(cè)

Cortex-M MCU應(yīng)用程序移植到RV32 MCU中的問(wèn)題解析

酒店智能化都用到哪些芯片之高速互聯(lián)型MCU CH32V317
CH32V303/305/307/317工業(yè)級(jí)通用微控制器數(shù)據(jù)手冊(cè)

沁恒微藍(lán)牙轉(zhuǎn)接芯片系列解析:CH9140/CH9141/CH9142/CH9143

想使用2片ADS54Jxx系列ADC實(shí)現(xiàn)2G采用,照交錯(cuò)采樣原理,ADS54JXX系列可以實(shí)現(xiàn)嗎?
基于ADS131m04和STM32F103搭建了一個(gè)簡(jiǎn)單的采樣電路,如何獲得比較高的通道間采樣一致性?
高速ADC設(shè)計(jì)中采樣時(shí)鐘影響的考量

評(píng)論