0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CH32V103系列MCU的ADC采样设计

CHANBAEK 来源:CSDN-借过风景 作者:CSDN-借过风景 2023-01-31 14:21 次阅读

简介

CH32V103系列是以青稞V3A处理器为核心的32位通用RISC-V MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列具有1路USB2.0主机/设备接口、多通道12位ADC转换模块、多通道TouchKey、多组定时器、多路IIC/USART/SPI接口等丰富的外设资源。

本章教程使用CH32V103开发板的ADC1通道1对开发板的VCC引脚和GND引脚进行采样,并将采样结果通过串口调试助手打印显示。

1、ADC及相关函数介绍

CH32V103的ADC模块包含一个 12 位的逐次逼近型的模拟数字转换器,最高14MHz的输入时钟。支持16个外部通道和2个内部信号源采样源。可完成通道的单次转换、连续转换,通道间自动扫描模式、间断模式、外部触发模式等功能。可以通过模拟看门狗功能监测通道电压是否在阈值范围内。

关于ADC具体信息,可参考CH32V103应用手册。ADC标准库函数具体内容如下:

pYYBAGPYsp-AeiZbAAJBYCGU66k200.png

1.1、void ADC_DeInit(ADC_TypeDef* ADCx)

功 能:将ADCx外围寄存器初始化为其默认重置值。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.2、void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)

功 能:根据ADC_InitStruct中指定的参数初始化ADCx外围设备。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_InitStruct:指向包含指定ADC外围设备的配置信息的ADC_InitTypeDef结构的指针。

1.3、void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)

功 能:用默认值填充每个ADC_InitStruct成员。

输 入:ADC_InitStruct:指向包含指定ADC外围设备的配置信息的ADC_InitTypeDef结构的指针。

1.4、无效ADC_Cmd(ADC_TypeDef* ADCx,函数状态新状态)

功 能:启用或禁用指定的ADC外围设备。

输 入:ADCx:其中x可以是1以选择ADC外围设备; NewState:启用或禁用。

1.5、无效ADC_DMACmd(ADC_TypeDef* ADCx,功能状态新状态)

功 能:启用或禁用指定的ADC DMA请求。

输 入:ADCx:其中x可以是1以选择ADC外围设备; NewState:启用或禁用。

1.6、无效ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)

功 能:启用或禁用指定的ADC中断。

输 入:ADCx:其中x可以是1以选择ADC外围设备; ADC_IT:指定要启用或禁用的ADC中断源。 NewState:启用或禁用。

1.7、无效ADC_ResetCalibration(ADC_TypeDef* ADCx)

功 能:重置所选ADC校准寄存器。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.8、标志状态ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)

功 能:获取所选ADC重置校准寄存器状态。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.9、无效ADC_StartCalibration(ADC_TypeDef* ADCx)

功 能:启动所选ADC校准过程。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.10、标志状态ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)

功 能:获取所选ADC校准状态。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.11、无效ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx,函数状态新状态)

功 能:启用或禁用所选ADC软件启动转换。

输 入:ADCx:其中x可以是1以选择ADC外围设备; NewState:启用或禁用。

1.12、FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)

功 能:获取所选ADC软件开始转换状态。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.13、void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number)

功 能:为所选ADC常规组通道配置不连续模式。

输 入:ADCx:其中x可以是1以选择ADC外围设备;Number:指定不连续模式常规通道计数值。

1.14、void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)

功 能:为指定的ADC启用或禁用常规组通道上的不连续模式。

输 入:ADCx:其中x可以是1以选择ADC外围设备;NewState:启用或禁用。

1.15、void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)

功 能:为所选ADC常规通道配置其在序列器中的相应列组及其采样时间。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_Channel:要配置的ADC信道;Rank:常规组序列器中的等级;ADC_SampleTime:要为所选通道设置的采样时间值。

1.16、void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)

功 能:通过外部触发器启用或禁用ADCx转换。

输 入:ADCx:其中x可以是1以选择ADC外围设备;NewState:启用或禁用。

1.17、uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)

功 能:返回常规通道的最后一个ADCx转换结果数据。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.18、uint32_t ADC_GetDualModeConversionValue(void)

功 能:以双模式返回最后一个ADC1和ADC2转换结果数据。

输 入:无。

1.19、void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)

功 能:启用或禁用所选ADC在常规转换后自动注入组转换。

输 入:ADCx:其中x可以是1以选择ADC外围设备;NewState:启用或禁用。

1.20、void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)

功 能:为指定的ADC启用或禁用注入组通道的不连续模式。

输 入:ADCx:其中x可以是1以选择ADC外围设备;NewState:启用或禁用。

1.21、void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv)

功 能:为注入通道转换配置ADCx外部触发器。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_ExternalTrigInjecConv:指定开始注入转换的ADC触发器。

1.22、void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)

功 能:通过外部触发器启用或禁用ADCx注入通道转换。

输 入:ADCx:其中x可以是1以选择ADC外围设备;NewState:启用或禁用。

1.23、void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)

功 能:启用或禁用注入通道转换的所选ADC启动。

输 入:ADCx:其中x可以是1以选择ADC外围设备;NewState:启用或禁用。

1.24、FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx)

功 能:获取所选ADC软件开始注入转换状态。

输 入:ADCx:其中x可以是1以选择ADC外围设备。

1.25、void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)

功 能:为所选ADC注入通道配置其在序列器中的相应秩及其采样时间。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_Channel:要配置的ADC信道;Rank:注入组序列器中的秩;ADC_SampleTime:要为所选通道设置的采样时间值。

1.26、void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)

功 能:配置注入通道的序列器长度。

输 入:ADCx:其中x可以是1以选择ADC外围设备;Length:序列器的长度。

1.27、void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)

功 能:设置注入通道转换值偏移。

输 入:ADCx:其中x可以是1以选择ADC外围设备;Offset:所选ADC注入通道的偏移值。

1.28、uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel)

功 能:ADC返回注入通道的结果。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_InjectedChannel:转换后的ADC注入通道。

1.29、void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog)

功 能:启用或禁用单个/所有常规或注入通道上的模拟看门狗。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_AnalogWatchdog:ADC模拟看门狗配置。

1.30、void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold)

功 能:配置模拟看门狗的高阈值和低阈值。

输 入:ADCx:其中x可以是1以选择ADC外围设备;HighThreshold:ADC模拟看门狗高阈值;LowThreshold:ADC模拟看门狗低阈值。

1.31、void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel)

功 能:配置模拟看门狗保护的单通道。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_Channel:为模拟看门狗配置的ADC信道。

1.32、void ADC_TempSensorVrefintCmd(FunctionalState NewState)

功 能:启用或禁用温度传感器和Vrefint通道。

输 入:NewState:启用或禁用。

1.33、FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)

功 能:检查是否设置了指定的ADC标志。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_FLAG:指定要检查的标志。

1.34、void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)

功 能:清除ADCx的挂起标志。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_FLAG:指定要清除的标志。

1.35、ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT)

功 能:检查指定的ADC中断是否已发生。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_IT:指定要检查的ADC中断源。

1.36、void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT)

功 能:清除ADCx的中断挂起位。

输 入:ADCx:其中x可以是1以选择ADC外围设备;ADC_IT:指定要清除的ADC中断挂起位。

1.37、s32 TempSensor_Volt_To_Temper(s32 Value)

功 能:内部温度传感器电压与温度之间的关系。

输 入:Value:电压值。

以上函数均为库函数内部函数,在进行使用时只需在程序中进行调用即可。

2、硬件设计

本章教程通过ADC1通道1读取开发板VCC引脚和GND引脚ADC值,并通过串口调试助手打印显示出来。

3、软件设计

CH32V103C8T6的ADC_IN1在PC1和PA1引脚,本文使用PA1,通过PA1读取开发板VCC引脚ADC值和GND引脚ADC值,具体程序如下:

adc.h文件

poYBAGPYsp-AS7GDAAAiYDJgDuY260.png

adc.c文件

poYBAGPYsp-AIZ8DAAGU2QUTIy0169.png

main.c文件

pYYBAGPYsp-ALylAAABPmwu5f7U645.png

main.c文件主要进行相关函数的初始化以及打印输出通过ADC_IN1读取到的ADC值。

4、下载验证

将编译好的程序下载到开发板并复位,用杜邦线将PA1引脚分别与VCC引脚和GND引脚连接,读取ADC值。注意,此处VCC引脚连接3.3V。串口打印情况具体如下:

当连接GND引脚时:

pYYBAGPYsp-AOof4AACQezQnTZ0394.png

当连接VCC(3.3V)引脚时:

poYBAGPYsp-ARd7mAACYgCxi8sw513.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343578
  • adc
    adc
    +关注

    关注

    95

    文章

    5651

    浏览量

    539447
  • 采样
    +关注

    关注

    1

    文章

    109

    浏览量

    25371
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45044
  • CH32V103
    +关注

    关注

    1

    文章

    13

    浏览量

    966
  • ch32
    +关注

    关注

    0

    文章

    73

    浏览量

    508
收藏 人收藏

    评论

    相关推荐

    中断-CH32V103如何关闭全局中断

    文章来源:https://www.cnblogs.com/wchmcu/p/17717350.html CH32V103相较于其他RISCV芯片,无法关闭全局中断。目前EVT源码工程中只预留了关闭
    发表于 09-26 11:13

    ch32v103与stm32f103的区别

    ch32v103与stm32f103的区别  Ch32v103与STM32f103是两种不同的芯片,虽然它们都是基于ARM Cortex-M3内核的32位微控制器,但它们在硬件配置、功
    的头像 发表于 08-22 15:49 1384次阅读

    ch32v103和stm32的区别

    和stm32。虽然它们共同作为微处理器的代表,但是它们之间还是有很多不同的。下面就详细地对这两种芯片进行比较和解析。 1、基本介绍 CH32V103是一款以ARM结构为基础,具有射频控制功能,能提供所有常规的数字接口的单片机芯片。其中包含有多种与ARM控制器及AC55XX系列
    的头像 发表于 08-22 15:48 831次阅读

    ch32v103应用教程 ch32v103c8t6兼容 ch32v103c8t6烧录器

    ch32v103应用教程 ch32v103c8t6兼容 ch32v103c8t6烧录器 ch32v103c8t6编程器 CH32V103应用
    的头像 发表于 08-22 15:19 1003次阅读

    CH32V103基础教程98-RTC-脉冲

    。 1、RTC简介关于RTC,在前面章节已经进行过介绍,在此不再赘述。关于RTC工具介绍,可参考前面章节及CH32V103应用手册。 2、硬件设计本章教学主要使用PC13引脚产生脉冲,同时使用传送
    发表于 05-12 16:34

    CH32V103基础教程96-SysTick中断

    本章教程主要进行SysTick中断简单的应用。 1、SysTick简介CH32V103为RISC-V3A内核,与Cortex-M3内核不同,RISC-V3A内核自带了一个64位自增型计数器
    发表于 05-12 16:31

    CH32V103基础教程95-PWM驱动蜂鸣器

    CH32V103应用手册。 2、硬件设计本章教程使用PWM播放音乐,可直接与蜂鸣器连接。CH32V103开发板与蜂鸣器的连接方式如下:· CH32V103开发板的GND引脚与喇叭的GND引脚连接·
    发表于 05-11 16:15

    CH32V103基础教程91-MPU6050应用

    本章教程主要使用CH32V103进行MPU6050传感器实验。程序中涉及到IIC和MPU6050的数据处理。 1、IIC简介及相关函数介绍关于IIC,在前面章节已经进行过介绍,在此不再赘述。本章
    发表于 05-11 16:06

    CH32V103基础教程90-ADC-DMA-TIM3触发ADC转换

    的配置决定规则组和注册组的外部事件源。本章教学主要通过定时器3的TRGO事件触发启动ADC转换。关于ADC介绍,在前面章节已经介绍,在此不再赘述。关于ADC实体信息,可参考CH32V103
    发表于 05-10 16:21

    CH32V103基础教程89-FLASH编程

    本章主要使用CH32V103进行FLASH的擦/读/写,以及快速编程。 1、FLASH简介及相关函数介绍关于CH2V103的FLSAH,其支持2种编程/擦除方式,具体如下: 标准编程:此方式是默认
    发表于 05-10 16:20

    CH32V103基础教程85-USB Host

    本章教学主要使用CH32V103 USB工作主机模式,程序仅供参考。 1、USB简介及相关函数介绍CH32V103芯片内嵌USB主机从控制器及接收器,支持USB Host主机功能和USB
    发表于 05-09 17:02

    CH32V103基础教程82-USB模拟CDC

    本章教程主要使用CH32V103 USB模拟CDC设备(串口)与电脑上位机(串口调试助手)进行通信,实现数据收发。 1、USB简介及相关函数介绍CH32V103芯片内嵌 USB 主从控制器及收发器
    发表于 05-09 16:53

    CH32V103基础教程78-USART-空闲中断

    ,在此不再赘述。 2、硬件设计由于CH32V103系列MCU的串口1在debug文件中被用于调试打印,因此本次教程使用串口2进行收发验证。由CH32V103数据手册可知,串口2对应引脚
    发表于 05-08 15:57

    CH32V103基础教程77-USART-指令控制LED灯

    ,在此不再赘述。 2、硬件设计由CH32V103系列MCU的串口1在调试文件中被用于调试打印,因此本次教程使用串口2进行收发验证。由CH32V103数据手册可知,串口2对应引脚为PA2
    发表于 05-08 15:55

    CH32V103基础教程60-TIM-DMA

    本章教程主要使用DMA通过TIM1_CH1(PA8)引脚输出PWM。 1、TIM简介及相关函数介绍关于定时器(PWM输出)以及DMA工具信息,在前面章节已经介绍,在此不再赘述。关于CH32V103 TIM具体信息,可参考CH32V103
    发表于 04-27 17:02