PY32F003F18之ADC问题

2023-09-19 09:39:20

普然单片机PY32F003F18的内部有一个LDO,其电压固定为1.2V。我在用官方程序测试时,若接上USB转串口的RX导线,向PC发送数据,读内部参考电压比较正确,但是,当接上USB转串口的TX导线时,发现读到内部电压变成了3.3V。见下图:

 断开USB转串口的TX导线,数据又恢复正常了。用万用表测试该导线电压,为5V。我连接上去,用万用表测试单片机电源引脚,电源引脚电压还是3.3V。但是用另外的3.3V的电压加到单片机引脚,不会对ADC转换产生影响。

难道这个芯片的ADC有问题吗?

测试程序:

/**
  ******************************************************************************
  * @file    main.c
  * @author  MCU Application Team
  * @Version V1.0.0
  * @Date    2020-10-19
  * @brief   main function
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc;
uint8_t adcValueflag;
uint32_t adc_value[6];
float  T_VCC;
/* Private function prototypes -----------------------------------------------*/
/* Private user code ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void Error_Handler(void);
void ADC_Config(void);
/********************************************************************************************************
**函数信息 :void main(void)
**功能描述 :执行函数
**输入参数 :
**输出参数 :
**    备注 :
********************************************************************************************************/
int main(void)
{
//    uint8_t i;
  //初始化所有外设,flash接口,systick

  HAL_Init();                                 //初始化systick
  ADC_Config();                               //初始化ADC
  DEBUG_USART_Config();                       //UART初始化
  printf("test start..\r\n");
  while (1)
  {
		HAL_Delay(1000);
    HAL_ADC_Start(&hadc);                     //启动ADC
    HAL_ADC_PollForConversion(&hadc, 1000000); //等待ADC转换完成
    adc_value[0] = HAL_ADC_GetValue(&hadc);   //获取ADC值
    T_VCC = (4095 * 1.2) / adc_value[0];      //计算VCC电压
    printf("adc_value[0]=0x%04X V\r\n", adc_value[0]);
		printf("vcc:%f V\r\n", T_VCC);
  }
}
/********************************************************************************************************
**函数信息 :void ADCConfig(void)
**功能描述 :ADC初始化
**输入参数 :
**输出参数 :
**    备注 :
********************************************************************************************************/
void ADC_Config(void)
{

  ADC_ChannelConfTypeDef sConfig = {0};
  /*ADC校准*/
	__HAL_RCC_ADC_FORCE_RESET();
  __HAL_RCC_ADC_RELEASE_RESET();
	__HAL_RCC_ADC_CLK_ENABLE();

  /*ADC校准*/
  hadc.Instance = ADC1;

  if (HAL_ADCEx_Calibration_Start(&hadc) != HAL_OK)                  //AD校准
  {
    Error_Handler();
  }    
  //=============
  //ADC配置
  //=============
  hadc.Instance = ADC1;
  hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;              //设置ADC时钟
  hadc.Init.Resolution = ADC_RESOLUTION_12B;                        //设置ADC采样位数
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;                        //设置ADC转换结构右对齐
  hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;              //设置ADC转换方向, 向上或者向下
  hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;                     //ADC_EOC_SINGLE_CONV:单次采样 ; ADC_EOC_SEQ_CONV:序列采样
  hadc.Init.LowPowerAutoWait = ENABLE;                              //ENABLE=读取ADC值后,开始下一次转换 ; DISABLE=直接转换
  hadc.Init.ContinuousConvMode = DISABLE;                            //ENABLE=连续模式, DISABLE=单次模式
  hadc.Init.DiscontinuousConvMode = DISABLE;                        //非连续转换
  hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;                  //软件使能
  hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;   //外部触发方式
  hadc.Init.DMAContinuousRequests = DISABLE;                        //禁止DMA
  hadc.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;                     //过载模式,0=保留旧值,1=新值覆盖旧值
  hadc.Init.SamplingTimeCommon = ADC_SAMPLETIME_41CYCLES_5;         //设置采样周期41.5个ADC时钟
  if (HAL_ADC_Init(&hadc) != HAL_OK)                                //ADC初始化
  {
    Error_Handler();
  }

  sConfig.Channel = ADC_CHANNEL_VREFINT;                            //设置采样通道
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;                           //设置是否排行, 想设置单通道采样,需配置ADC_RANK_NONE
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)             //配置ADC通道
  {
    Error_Handler();
  }
}
/********************************************************************************************************
**函数信息 :Error_Handler(void)
**功能描述 :错误执行函数
**输入参数 :
**输出参数 :
**    备注 :
********************************************************************************************************/
void Error_Handler(void)
{
  while (1)
  {
  }
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
}
#endif /* USE_FULL_ASSERT */


/* Private function -------------------------------------------------------*/

 

/********************************************************************************************************
**函数信息 :void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
**功能描述 :初始化ADC相关MSP
**输入参数 :
**输出参数 :
**    备注 :
********************************************************************************************************/
void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
{
  /* ADC1 Periph clock enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_ADC_CLK_ENABLE();
}

更多推荐

蓝蓝设计提供地理信息系统GIS界面设计

北京蓝蓝设计(北京兰亭妙微科技有限公司)是一家专业的设计公司,致力于为客户打造卓越的用户体验和品牌价值。他们在地理信息系统(GIS)UI界面设计领域拥有丰富的经验和专业的设计团队。他们深入了解地理信息系统的特点和用户需求,通过用户研究和数据分析,精心设计出符合用户习惯和心理的GISUI界面。他们注重界面的布局和排版,确

软文发稿:软文发稿小技巧让你瞬间爆红

欢迎阅读本篇科普文章,我们将为您介绍软文发稿推广的小技巧,帮助您快速在网络平台上获得广泛关注。不仅仅是吸引眼球,我们还将分享实用的策略,帮助您提高软文的质量,提升传播效果。1.精准抓住受众要瞬间爆红,首先要明确目标受众。在撰写软文之前,进行市场调研是必不可少的步骤。了解受众的年龄、性别、兴趣爱好、需求等信息,有助于您编

深圳企业智荟康亮相深圳教装展,大力推动校园健康午休工程

2023年9月15日上午,第五届深圳教育装备博览会在深圳(福田)会展中心隆重开幕。本届教博会以“数字赋能·先行示范”为主题,这场盛会吸引了来自全国各地的众多教育界人士和专业观众。主办方介绍,本次展会将有效推动教育装备领域的技术革新和产业升级,将继续引领行业风向,加速促进产业融合,为各级各类教育机构和教育装备企业提供新技

Python爬虫技术系列-01请求响应获取-urllib库

Python爬虫技术系列-01请求响应获取-urllib库1urllib库1.1urllib概述1.1.1urllib简介1.1.2urllib的robotparser模块1.1.3request模块1.1.4Error1.1.5parse模块1.2urllib高级应用1.2.1Opener1.2.2代理设置1urll

2023常用的原型设计软件推荐

美观易操作的产品原型可以帮助团队构建积极的用户体验,帮助团队理解产品交互逻辑。因此,可互动、易修改的产品原型设计对产品的点击率和回访率具有重要意义。选择专业的产品原型设计工具,可以为团队和企业带来高效的产品设计体验。本文选择了四种产品原型设计工具,可以为实际工作带来方便。让我们看看。即时设计即时设计是国内首款专业级的U

SpringBoot

SpringBoot1.概念和介绍Spring用于简化Java程序的开发,而SpringBoot为了简化Spring程序开发。SpringBoot是Spring脚手架。可以快速完成Java程序的创建、提高开发效率等。SpringBoot的优点:快速集成框架,提供启动依赖的功能,可以集成各种框架。内置了运行容器、无需配置

酷开科技,让家庭娱乐生活充满激情

近几年,随着智能电视在家庭生活中的广泛应用,让人们的家庭娱乐生活有了更多的选择,但随之而来的是消费者的需求也在不断地升级,个性化、细分化的需求趋势越加凸显。而酷开科技正是抓住了这个机遇,不断赋能家庭娱乐生活场景,获得了更多消费者的青睐。与此同时,酷开科技凭借自身包容的开放生态体验,以及为消费者提供更丰富、更多元的内容,

C++实现观察者模式(包含源码)

文章目录观察者模式一、基本概念二、实现方式三、角色四、过程五、结构图六、构建思路七、完整代码观察者模式一、基本概念观察者模式(又被称为模型(Model)-视图(View)模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供

网络编程.

网络编程就相当于通过网络进行数据的传输,可以传给别人,不仅限于自己;常见软件架构BS优点1.不需要开发客户端,只需要页面+服务器2.不用下载缺点如果应用过大cs优点1.画面精美缺点1.客户端,服务端都要开发三要素:IP设备在网络中的地址,是唯一的标识端口号应用程序在设备中唯一的标识协议数据在网络中传输的规则,常见的协议

解锁网络世界的利器:代理IP与Socks5代理

随着跨界电商、爬虫、网络安全和游戏等领域的不断发展,网络工程师们正面临着越来越多的挑战和机会。在这个信息爆炸的时代,如何更有效地访问、保护和探索网络资源成为了网络工程师们的首要任务。本文将重点介绍代理IP和Socks5代理,它们是网络世界的利器,为网络工程师提供了强大的工具来应对各种技术挑战。代理IP的妙用代理IP是一

海外代理IP是什么?如何使用?

一、海外代理IP是什么?首先,代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器,被称为“中介”,因为它位于最终用户和他们在线访问的网页之间。海外IP代理是就是指从海外地区获取的IP地址,用于将互联网连接路由通过位于不同国家或地区的服务器。这种代理服务允许用户隐藏其真实的地理位置,并获得访问其他国家或

热文推荐