9. 利用PY32Studio+HAL库开发ADC模拟采用功能
一、功能通过PY32Studio可视化配置实现芯片内部温度传感器Temperature、内部参考电压Vrefint、1/3的VCC的单次ADC采样无需外接任何硬件电路最后通过串口printf实时打印芯片内部结温、内部参考电压、1/3的VCC。本练习采用单次转换模式非扫描、非DMA配置简单、代码轻量化适合新手学习。二、硬件通过USB转TTL模块连接PC与Startkit板, Startkit板与USB转TTL模块的连线方式如下通过串口将信息发送到串口助手。Startkit 开发板USB转TTL模块Tx(PA0)RxRx(PA1)TxGNDGND三、PY32Studio配置3.1 创建一个新工程首先用PY32Studio创建一个F032_ADC1的新工程。3.2 配置时钟在芯片视图中点击时钟视图在时钟视图中选择HSI为时钟源配置PLL_MULx9SYS_SELPLL系统时钟为72MHz.3.3 配置UART1配置UART1的参数激活UART1配置UART1的参数波特率115200停止位1数据长度8位奇偶校验无。3.4 配置ADC的参数第一步配置ADC的内部通道第二步配置ADC的参数Scan Conversion ModeDisable关闭扫描模式单次单通道采样Continuous Conversion ModeDisable关闭连续转换单次触发单次采样Discontinuous Conversion ModeDisable第三步配置ADC的转换参数第四步配置ADC的转换时间转换时间长一点避免采样波动第五步点击生成工程四、理解HAL库函数4.1 py32f032_hal_adc.cPY32 HAL 库中与ADC相关的核心函数主要分为初始化配置、ADC转换、中断控制、回调函数等几类。以下为核心函数详解及使用示例一、 初始化与配置函数1.使能ADC外设前提必须在RCC层配置ADC时钟。两项时钟配置是强制的ADC内核时钟也可作为转换时钟示例在 HAL_ADC_MspInit()推荐位置或者其他外设时钟配置代码中__HAL_RCC_ADC_CLK_ENABLE();(必须调用)ADC时钟源与分频系数在ADC初始化阶段通过HAL_ADC_Init()的 ClockPrescaler 参数配置。2. ADC引脚配置使能ADC所用GPIO的时钟使用宏__HAL_RCC_GPIOx_CLK_ENABLE()将ADC引脚配置为模拟模式使用函数HAL_GPIO_Init()3. 可选ADC使用中断场景配置ADC的NVIC中断使用HAL_NVIC_EnableIRQ(ADCx_IRQn)在对应的中断向量服务函数内调用HAL_ADC_IRQHandler()4. 可选ADC使用DMA场景配置DMADMA通道、Normal/Circular模式等使用HAL_DMA_Init()配置DMA的NVIC中断使用HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)在DMA中断向量函数内调用HAL_ADC_IRQHandler()二、ADC、规则组、通道参数配置1. 配置ADC基础参数分辨率、数据对齐等和规则组参数转换触发源、序列器等HAL_ADC_Init()2. 配置规则组通道参数(通道号、在序列中的Rank序号等)HAL_ADC_ConfigChannel()3. 可选配置模拟看门狗监控通道、高低阈值HAL_ADC_AnalogWDGConfig()三、ADC转换1. 可选执行ADC自动校准提升转换精度使用HAL_ADCEx_Calibration_Start()2. ADC驱动支持3种工作模式查询轮询、中断、DMA传输轮询模式Polling启动ADC并开始转换HAL_ADC_Start()等待转换完成HAL_ADC_PollForConversion()读取转换结果HAL_ADC_GetValue()停止转换关闭ADCHAL_ADC_Stop()中断模式IT启动ADC并开始转换HAL_ADC_Start_IT()转换完成触发回调HAL_ADC_ConvCpltCallback()该函数需要用户自行重写读取转换结果HAL_ADC_GetValue()停止ADCHAL_ADC_Stop_IT()DMA模式启动ADCDMAHAL_ADC_Start_DMA()转换完成回调HAL_ADC_ConvCpltCallback()或DMA半传输回调HAL_ADC_ConvHalfBlockCpltCallback()回调由用户实现DMA自动把采样结果搬运到目标内存CPU无需手动读取DR寄存器停止ADCDMAHAL_ADC_Stop_DMA()四、回调函数如果启用中断用户必须重写的回调函数HAL_ADC_ErrorCallback()ADC错误回调HAL_ADC_LevelOutOfWindowCallback()模拟看门狗超限回调HAL_ADC_ConvCpltCallback()转换完成回调HAL_ADC_ConvHalfBlockCpltCallbackDMA半满回调五、编写应用代码5.1 应用代码在PY32Studio生成的代码的基础上添加以下代码首先定义几个全局变量要把变量放在Private Variables下面的USER CODE段内;在uart.c文件中加入以下代码包括“stdio.h”文件/* USER CODE BEGIN Includes */ #include stdio.h /* USER CODE END Includes */重写fputc函数/* USER CODE BEGIN ExternalFunctions */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 1000); //阻塞式发送超时时间设为10001s return ch; } /* USER CODE END ExternalFunctions */在main()函数中在USER CODE BEGIN 1中加入ADC通道配置的结构体变量。在while1循环中加入以下代码配置ADC转换通道配置ADC转换通道的转换序号配置ADC转换时间ADC启动ADC转换等待ADC转换完成读取ADC转换结果停止ADC转换将转换的结果转化为温度值VrefintVCCA/3打印转换结果。int main(void) { /* USER CODE BEGIN 1 */ ADC_ChannelConfTypeDef sConfig {0}; //定义ADC通道配置的结构体 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ Studio_RCC_Init(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ Studio_GPIO_Init(); Studio_UART1_Init(); Studio_ADC1_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while(1) { sConfig.Channel ADC_CHANNEL_TEMPSENSOR; //配置ADC转换的通道 sConfig.Rank ADC_REGULAR_RANK_1; //配置ADC转换的序号 sConfig.SamplingTime ADC_SAMPLETIME_247CYCLES_5; //配置ADC转换的时间 if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK) //配置ADC的通道参数 { Error_Handler(); } HAL_ADC_Start(hadc1); //启动ADC转换 HAL_ADC_PollForConversion(hadc1,10); //等待转换完成 adcValue HAL_ADC_GetValue(hadc1); //读取转换结果 HAL_ADC_Stop(hadc1); //停止转换 dTemperature __HAL_ADC_CALC_TEMPERATURE(TEMPSENSOR_CAL_VREFANALOG, adcValue, ADC_RESOLUTION_12B); //通过测量的电压计算温度 printf(Temperature is %d C.\r\n,(int)dTemperature); HAL_Delay(2000); sConfig.Channel ADC_CHANNEL_VREFINT; //配置ADC转换的通道 sConfig.Rank ADC_REGULAR_RANK_1; //配置ADC转换的序号 sConfig.SamplingTime ADC_SAMPLETIME_247CYCLES_5; //配置ADC转换的时间 if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK) //配置ADC的通道参数 { Error_Handler(); } HAL_ADC_Start(hadc1); //启动ADC转换 HAL_ADC_PollForConversion(hadc1,10); //等待转换完成 adcValue HAL_ADC_GetValue(hadc1); //读取转换结果 HAL_ADC_Stop(hadc1); //停止转换 Vrefint adcValue * 0.0008; //计算Vrefint的电压值 adcValue * VCCA/4096 printf(Vrefint is %.3f V \r\n,Vrefint); HAL_Delay(2000); sConfig.Channel ADC_CHANNEL_1_3VCCA; //配置ADC转换的通道 sConfig.Rank ADC_REGULAR_RANK_1; //配置ADC转换的序号 sConfig.SamplingTime ADC_SAMPLETIME_247CYCLES_5; //配置ADC转换的时间 if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK) //配置ADC的通道参数 { Error_Handler(); } HAL_ADC_Start(hadc1); //启动ADC转换 HAL_ADC_PollForConversion(hadc1,10); //等待转换完成 adcValue HAL_ADC_GetValue(hadc1); //读取转换结果 HAL_ADC_Stop(hadc1); //停止转换 VCCA3 adcValue*0.0008; //计算VVCA/3的电压值 adcValue * VCCA/4096 printf(VCCA/3 is %.3f V. \r\n,VCCA3); HAL_Delay(2000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }5.2 设置在选项卡中选择安装的编译器版本和Debug类型。5.3 编译下载点击编译图标开始编译程序编译成功后开始下载程序下载成功后开始调试程序5.4调试点击调试图标进入调试界面运行程序把adcValue、VCCA3、Vrefint、dTemperature四个变量加到Watch1窗口中。在View菜单中选择Periodic Window Update命令全速运行代码观察这几个变量的值。打开串口助手选择正确的端口名波特率数据位校验位和停止位打开串口开始接收数据。右面的窗口可以显示出从MCU发送过来的数据。Vrefint和VCCA的值都是基于VCCA3.3V计算得出的。实际测量VCCA的电压为3.36V。六、总结本章内容我们采用单次采样的查询方式对ADC1内部的3个通道进行轮流采样计算相应的电压值或温度值并轮流打印计算结果。整个过程主要步骤如下通过PY32Studio配置时钟UART1, ADC1模块在uart.c文件中包括stdio.h头文件重写fputc函数在main.c文件中定义全局变量并且初始化: adcValue、VCCA3、Vrefint、dTemperature在while(1)循环中调用以下几个函数HAL_ADC_ConfigChannel(hadc1, sConfig)//配置ADC转换参数HAL_ADC_Start(hadc1);//启动ADC转换HAL_ADC_PollForConversion(hadc1,10);//等待转换完成adcValue HAL_ADC_GetValue(hadc1);//读取转换结果HAL_ADC_Stop(hadc1);计算温度值或电压值打印温度值或者电压值printf(VCCA/3 is %.3f V. \r\n,VCCA3)调试代码在串口助手中观察打印出的变量的值。

相关新闻

自从用了AI报价软件系统,才发现报价真的可以如此轻松准确。

自从用了AI报价软件系统,才发现报价真的可以如此轻松准确。

自从用了AI报价软件系统,才发现报价真的可以如此轻松准确 干非标机加工这行的朋友应该都有同感:报价这事儿,真不是算算材料费、乘个系数那么简单。一张图纸拿到手里,先要看懂结构,再琢磨工艺,脑子里还得飞快…

2026/10/3 19:51:35 阅读更多 →
GitComet 0.1.15 Windows x64 下载:Git 图形客户端便携 ZIP

GitComet 0.1.15 Windows x64 下载:Git 图形客户端便携 ZIP

GitComet 0.1.15 Windows x64 便携 ZIP 下载入口 本文提供 GitComet 0.1.15 的 Windows x64 便携压缩包,文件名为 gitcomet-v0.1.15-windows-x86_64-portable.zip,夸克分享列表显示 17.5M。需要用图形界面查看 Git 仓库、历史与文件差异,并保…

2026/10/3 19:51:35 阅读更多 →
一文看懂 HoloCubic_AIO Flash分区设计:no-ota 分区表设计原理详解

一文看懂 HoloCubic_AIO Flash分区设计:no-ota 分区表设计原理详解

一文看懂 HoloCubic_AIO Flash分区设计:no-ota 分区表设计原理详解 【免费下载链接】HoloCubic_AIO HoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等 项目地址: https://gitcode.com/GitHub_Trending/…

2026/10/3 19:51:35 阅读更多 →

最新新闻

网络协议面试高频八问:TCP三次握手、HTTP状态码与HTTPS原理

网络协议面试高频八问:TCP三次握手、HTTP状态码与HTTPS原理

最近帮几个准备大厂面试的朋友做了几轮模拟面试,发现一个特别有意思的现象:很多人聊分布式、聊数据库能讲十分钟,但一被问到网络协议的底层细节,立刻开始背概念。TCP三次握手背得滚瓜烂熟,被追问“为什么不能是两次”就…

2026/10/3 20:53:56 阅读更多 →
SpringBoot+Vue停车场管理系统毕设全解析:从架构设计到部署实战

SpringBoot+Vue停车场管理系统毕设全解析:从架构设计到部署实战

做毕设选“SpringBootVue停车场管理系统”这个题目的人,这两年是真的多。原因也很实在:技术栈主流、业务场景清晰、前后端分离的架构踩中当下企业开发的主流范式,答辩时既能讲业务又能讲技术,怎么都有话说。不过题目选得容易&…

2026/10/3 20:52:55 阅读更多 →
SSM+Vue教工公寓管理系统毕业设计:从项目搭建到论文答辩全指南

SSM+Vue教工公寓管理系统毕业设计:从项目搭建到论文答辩全指南

每年到这个时间点,就会有一批计算机专业的大四学生开始为毕业设计头疼。2026届的学弟学妹们,如果你正在纠结选题,或者已经选了“基于SSM的教工公寓管理系统”这类题目却不知道从何下手,这篇内容就是写给你看的。这套题目可以说是经…

2026/10/3 20:51:54 阅读更多 →
基于ZooKeeper的在线状态漂移检测与选主实现

基于ZooKeeper的在线状态漂移检测与选主实现

1. 先聊清楚:微信个人号多设备场景下的“在线状态漂移”是什么 1.1 多个实例同时工作,为什么会产生状态分歧 如果你搭过微信个人号相关的中台服务,一定遇过这种奇怪现象:后台明明显示账号在线,消息流水也正常&#xf…

2026/10/3 20:51:54 阅读更多 →
专科生AI辅助开题报告:9个实用工具、完整流程与学术诚信红线

专科生AI辅助开题报告:9个实用工具、完整流程与学术诚信红线

先说一个前提:这篇文章只聊合法合规的AI写作辅助,用来帮你把开题报告、文献综述这种东西从“憋不出来”变成“改得出来”。最终交上去的文档必须是你自己一个字一个字改过、认过、能讲清楚的,否则别往下看。 2026届专科生现在应该刚好要开题…

2026/10/3 20:51:52 阅读更多 →
路标检测数据集:1000张实拍图+YOLO/VOC/COCO三格式标签

路标检测数据集:1000张实拍图+YOLO/VOC/COCO三格式标签

简介:本资源是面向计算机视觉初学者与YOLO目标检测实践者的路标识别专项数据集及配套训练工具包,解决真实场景下交通标志检测模型训练缺乏高质量标注数据与完整流程支持的问题。压缩包共2000个文件,含1000张实拍路标图像、990个YOLO格式标签&…

2026/10/3 20:49:51 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →