【沁恒WCH CH32V307V-R1开发板读取板载温度实验】
【沁恒WCH CH32V307V-R1开发板读取板载温度实验】
- 1. 前言
- 2. 软件配置
- 2.1 安装MounRiver Studio
- 3. ADC项目测试
- 3.1 打开ADC工程
- 3.2 编译项目
- 4. 下载验证
- 4.1 接线
- 4.2 演示效果
- 5. 小结
1. 前言
- ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器,最高 14MHz 的输入时钟。支持 16 个
外部通道和 2 个内部信号源采样源。可完成通道的单次转换、连续转换,通道间自动扫描模式、间
断模式、外部触发模式、双重采样等功能。可以通过模拟看门狗功能监测通道电压是否在阈值范围
内,本次实验采用一路ADC间隔均值采样,然后打印输出采样值和温度值,熟悉STM32开发用易上手配置。✨✨✨- 比赛详情官网:https://www.wch.cn/RISC-V-MCU-competition/#/?indexFromSubmit=0
这是使用MounRiver Studio开发的项目,支持在RISC-V核心基础硬件CH32V307评估板上使用带有msh Shell的RTOS快速原型。
MCU:CH32V307VCT6,主频 144MHz,FLASH和RAM可配置
l 12 位分辨率
l 支持 16 个外部通道和 2 个内部信号源采样
l 多通道的多种采样转换方式:单次、连续、扫描、触发、间断等
l 数据对齐模式:左对齐、右对齐
l 采样时间可按通道分别编程
l 规则转换和注入转换均支持外部触发
l 模拟看门狗监测通道电压,自校准功能
l 双重模式
l ADC 通道输入范围:0≤VIN≤VDDA
l 输入增益可调,可实现小信号放大采样
首先,应安装 CH32V307 评估板的驱动程序,打开设备管理器查看USB 端口和外部接口已准备就绪。
2. 软件配置
2.1 安装MounRiver Studio
环境搭建教程:https://blog.csdn.net/VOR234/article/details/128932474
3. ADC项目测试
3.1 打开ADC工程
评估板说明及参考例程:https://www.wch.cn/downloads/CH32V307EVT_ZIP.html
进入EXAM目录,就有对应的外设教程
进入DInternal_Temperature
文件下,双击Internal_Temperature.wvproj
,
打开项目工程如下,main.c
在user
文件夹下
main.c
,参考电压是3.3V
/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.0.0
* Date : 2021/06/06
* Description : Main program body.
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************//**@NoteInternal temperature sensor routine:Through the ADC channel 16(PA2), the output voltage value and temperature value of the internaltemperature sensor are collected.*/#include "debug.h"/* Global Variable */
s16 Calibrattion_Val = 0;/********************************************************************** @fn ADC_Function_Init** @brief Initializes ADC collection.** @return none*/
void ADC_Function_Init(void)
{ADC_InitTypeDef ADC_InitStructure={0};GPIO_InitTypeDef GPIO_InitStructure={0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );RCC_ADCCLKConfig(RCC_PCLK2_Div8);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_DeInit(ADC1);ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode = DISABLE;ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &ADC_InitStructure);ADC_Cmd(ADC1, ENABLE);ADC_BufferCmd(ADC1, DISABLE); //disable bufferADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));Calibrattion_Val = Get_CalibrationValue(ADC1); ADC_BufferCmd(ADC1, ENABLE); //enable bufferADC_TempSensorVrefintCmd(ENABLE);
}/********************************************************************** @fn Get_ADC_Val** @brief Returns ADCx conversion result data.** @param ch - ADC channel.* ADC_Channel_0 - ADC Channel0 selected.* ADC_Channel_1 - ADC Channel1 selected.* ADC_Channel_2 - ADC Channel2 selected.* ADC_Channel_3 - ADC Channel3 selected.* ADC_Channel_4 - ADC Channel4 selected.* ADC_Channel_5 - ADC Channel5 selected.* ADC_Channel_6 - ADC Channel6 selected.* ADC_Channel_7 - ADC Channel7 selected.* ADC_Channel_8 - ADC Channel8 selected.* ADC_Channel_9 - ADC Channel9 selected.* ADC_Channel_10 - ADC Channel10 selected.* ADC_Channel_11 - ADC Channel11 selected.* ADC_Channel_12 - ADC Channel12 selected.* ADC_Channel_13 - ADC Channel13 selected.* ADC_Channel_14 - ADC Channel14 selected.* ADC_Channel_15 - ADC Channel15 selected.* ADC_Channel_16 - ADC Channel16 selected.* ADC_Channel_17 - ADC Channel17 selected.** @return none*/
u16 Get_ADC_Val(u8 ch)
{u16 val;ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );ADC_SoftwareStartConvCmd(ADC1, ENABLE);while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));val = ADC_GetConversionValue(ADC1);return val;
}/********************************************************************** @fn Get_ADC_Average** @brief Returns ADCx conversion result average data.** @param ch - ADC channel.* ADC_Channel_0 - ADC Channel0 selected.* ADC_Channel_1 - ADC Channel1 selected.* ADC_Channel_2 - ADC Channel2 selected.* ADC_Channel_3 - ADC Channel3 selected.* ADC_Channel_4 - ADC Channel4 selected.* ADC_Channel_5 - ADC Channel5 selected.* ADC_Channel_6 - ADC Channel6 selected.* ADC_Channel_7 - ADC Channel7 selected.* ADC_Channel_8 - ADC Channel8 selected.* ADC_Channel_9 - ADC Channel9 selected.* ADC_Channel_10 - ADC Channel10 selected.* ADC_Channel_11 - ADC Channel11 selected.* ADC_Channel_12 - ADC Channel12 selected.* ADC_Channel_13 - ADC Channel13 selected.* ADC_Channel_14 - ADC Channel14 selected.* ADC_Channel_15 - ADC Channel15 selected.* ADC_Channel_16 - ADC Channel16 selected.* ADC_Channel_17 - ADC Channel17 selected.** @return val - The Data conversion value.*/
u16 Get_ADC_Average(u8 ch,u8 times)
{u32 temp_val=0;u8 t;u16 val;for(t=0;t<times;t++){temp_val+=Get_ADC_Val(ch);Delay_Ms(5);}val = temp_val/times;return val;
}/********************************************************************** @fn Get_ConversionVal** @brief Get Conversion Value.** @param val - Sampling value** @return val+Calibrattion_Val - Conversion Value.*/
u16 Get_ConversionVal(s16 val)
{if((val+Calibrattion_Val)<0) return 0;if((Calibrattion_Val+val)>4095||val==4095) return 4095;return (val+Calibrattion_Val);
}/********************************************************************** @fn main** @brief Main program.** @return none*/
int main(void)
{u16 ADC_val;s32 val_mv;SystemCoreClockUpdate();Delay_Init();USART_Printf_Init(115200); printf("SystemClk:%d\r\n",SystemCoreClock);printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );ADC_Function_Init();printf("CalibrattionValue:%d\n", Calibrattion_Val); while(1){ADC_val = Get_ADC_Average( ADC_Channel_TempSensor, 10 );Delay_Ms(500);ADC_val = Get_ConversionVal(ADC_val);printf( "ADC-Val:%04d\r\n", ADC_val);val_mv = (ADC_val*3300/4096);printf("mv-T-%d,%0d\n",val_mv ,TempSensor_Volt_To_Temper(val_mv));Delay_Ms(2);}
}
3.2 编译项目
开发板数据线连接电脑就可以开始连接调试🛹🛹🛹,首先开始编译,编译成功如下
然后下载,下载成功如下
4. 下载验证
4.1 接线
根据程序设计调试,可以用手指触摸芯片,即可输出相关温度变化
4.2 演示效果
代码下载后验证,点击串口调试器,设置串口参数确认。
复位运行成功如下打印温度变化,从12度到15度
SystemClk:96000000
ChipID:30700518
CalibrattionValue:9ADC-Val:1786
mv-T-1438,12ADC-Val:1781
mv-T-1434,13ADC-Val:1777
mv-T-1431,13ADC-Val:1775
mv-T-1430,13ADC-Val:1773
mv-T-1428,14ADC-Val:1772
mv-T-1427,14ADC-Val:1771
mv-T-1426,14ADC-Val:1770
mv-T-1426,14ADC-Val:1768
mv-T-1424,15ADC-Val:1768
mv-T-1424,15ADC-Val:1769
mv-T-1425,15ADC-Val:1768
mv-T-1424,15ADC-Val:1767
mv-T-1423,15ADC-Val:1767
mv-T-1423,15ADC-Val:1767
5. 小结
🥳🥳🥳通过对这篇文章我们掌握了沁恒WCH CH32V307V-R1开发板读取板载温度实验,这样就可以设置适当工作环境防寒暑,确保设备正常接下来会有许多有趣的实验,尝试与Arduino通讯做更加好玩的实验,进而丰富我们的生活。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
参考文献:
- CH32V307数据手册:https://www.wch.cn/downloads/CH32V20x_30xDS0_PDF.html
- CH32V307参考手册:https://www.wch.cn/downloads/CH32FV2x_V3xRM_PDF.html
- 评估板说明及参考例程:https://www.wch.cn/downloads/CH32V307EVT_ZIP.html
- CH343SER.ZIP串口地址:https://www.wch.cn/downloads/CH343SER_ZIP.html
- MRS最新V1.51版本安装包:www.mounriver.com
- 环境搭建教程:https://blog.csdn.net/VOR234/article/details/128932474
- 【沁恒WCH CH32V307V-R1开发板两路ADC读取实验】:https://blog.csdn.net/VOR234/article/details/128941074
相关文章:

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】
【沁恒WCH CH32V307V-R1开发板读取板载温度实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器,最高 14MHz 的输入时…...

学习SpringCloudAlibaba(二)微服务的拆分与编写
目录 一、单体架构VS微服务架构 1.单体架构 (1).单体架构的优点 (2).单体架构的缺点 2.微服务架构 (1)微服务的特性 (2)微服务架构图 (3)微服务的优点 …...

通过对HashMap的源码分析解决部分关于HashMap的问题
HashMap第一次分配多大的空间我们查看resize()中的源码所以当我们没有传入默认容量的参数的时候,默认容量是16当传进一个20的初始参数时,数组的容量是多大所以当我们传入20的参数,这时创建的容量是32(2^5)对…...
【无标题】
Windeployqt 打包,缺少DLL 的原因分析,解决方法 很多同学使用工具windeployqt进行打包发布后,运行exe文件时,还是会出现下图所示的系统错误提示,这种情况就表示相关的DLL 库文件没有被正确打包。可是windeployqt明确显示运行正常啊,难道是QT自家的windeployqt这个工具有…...

渗透测试 -- 网站信息收集
数据来源 01 网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言(php、java、...)、数据库(Mysql、...)为什么要了解这些? 举个例子:发现了一…...

Windows 搭建ARM虚拟机 UOS系统
搭建环境安装虚拟机下载虚拟机QEMU,https://www.qemu.org/download/,目前最新版本是7.2.0。安装完成后,需要将qemu的安装路径设置到环境变量完成后运行cmd,测试环境变量配置完成。qemu-system-aarch64 --version如上截图所示&…...
day58每日温度_下一个更大元素1
力扣739.每日温度 题目链接:https://leetcode.cn/problems/daily-temperatures/ 思路 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了…...

超清遥感影像语义分割处理
分割出城市中的垃圾堆场,遂寻找到了 UrbanAtlas 2012 database 这个数据集和对应的 baseline baseline IoU for class 1: 0.5667 IoU for class 2: 0.3504 IoU for class 3: 0.0001 IoU for class 4: 0.0002 IoU for class 5: 0.4121 IoU for class 6: 0.0204 IoU for cla…...

RabbitMQ安装及配置
目录1.下载和安装1.1 下载1.2. 安装1.3 测试1.4 卸载管理界面2.1 添加用户2.2 创建Virtual Hosts2.3. 设置权限1.下载和安装 1.1 下载 1.下载Erlang的rpm包 RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ…...

网络协议(四):网络互联模型、物理层、数据链路层
网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络互联模型、物理层、数据链路层 目录一、网…...
请问有没有关于数据预测的方法?
利用数据对未来进行预测分析,虽然不能百分百的准确预测,但是有数据理论支撑的趋势预测是客观可靠的。当数据分析的目的涉及未来决策时,就可以大胆使用预测的思路和方法,如企业明年的战略计划、销售计划等,这对企业而言…...
[CVPR 2021] Your “Flamingo“ is My “Bird“: Fine-Grained, or Not
Contents Your "Flamingo" is My "Bird"MethodCooperation or Confrontation?Disentanglement and ReinforcementExperimentDiscussionsReferencesYour “Flamingo” is My “Bird” 对于如下图片,FGVC 的目标是让模型识别出 “flamingo”,但对于大部分…...
clickHouse笔记
1、介绍 clickHouse将数据进行分成多个partition,多个CUP进行进行单条的Query,不适合qps特别高的查询场景;适应场景:处理过的,字段特别大的宽表,进行统计,查询,聚合等数据分析场景 …...

10.jQuery中请求预处理 $.ajaxPrefilter()
在使用jQuery发起请求的时候($.get(),$.post().$ajax()都可以)会默认在请求前调用$.ajaxPrefilter()这个函数,我们可以利用这个来做一些事情 目录 1 定义API根路径 2 添加请求头 3 添加请求结束的回调函数 1 定义API根路径 这样后面每次请求就不用再写根路…...
【黄啊码】浅谈PHP入门|如何学习PHP
大家好,我是黄啊码,很多小白问我,怎么入门PHP,甚至连PHP能干嘛都不知道,今天啊码就具体来讲讲。 什么是PHP PHP是一种开源的通用脚本语言,用于创建动态网页和应用程序。它可以运行在服务器端,…...

人大金仓数据库的归档日志
归档日志 归档日志是非活动的WAL日志备份。通过使用归档日志,可以保留所有WAL日志的历史记录,当数据库处于ARCHIVELOG模式并进行日志切换时,后台进程archiver process会将WAL日志的内容保存到归档日志中,当数据库出现介质失败时&…...

C++:类和对象(上)
文章目录1 面向过程与面向对象的初步认识2 类的引入3 类的定义4 类的访问限定符及封装4.1 访问限定符4.2 封装5 类的实例化6 类对象模型6.1 如何计算类的大小6.2 类对象的存储方式猜测7 this指针7.1 this指针的引出7.2 this指针的特性8 C语言和C栈(Stack)…...

数据库 与 数据仓库的本质区别是什么?
当用计算机来处理数据的时候, 数据就需要存储和管理了。早期的数据, 就是用一个文件来实现的, 即是文件系统。随着处理的数据量增大, 发展到用数据库来管理和存储数据了。 数据库包括多媒体数据库、对象关系数据库和关系数据库。关系数据库管理系统,已经成为了事实上通用的数据…...

数据库实践LAB大纲 05 JDBC 连接
概述 Java DataBase Connectivity,Java 数据库连接 执行SQL的Java API 为多种关系型数据提供统一访问 FUNCTION 建立与数据库的连接向数据库发送 SQL 语句处理从数据库返回的结果 四种常见JDBC驱动程序 JDBC-ODBC Bridge drivernative-API, partly Java driver…...
Linux部署nuxt3
最近写了一个项目,需要打包部署,过程还是比较繁琐的,因为需要先配置运行环境。准备采用 pm2 管理项目运行,需要在服务器安装 pm2,而安装 pm2 的话用 npm 命令最方便,所以还要下载 node 环境。那么ÿ…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...