登录/注册

STM32 AD补码输出

STM32 AD补码输出

更多

在STM32微控制器中,ADC(模数转换器)可以通过配置以二进制补码形式输出转换结果,尤其适用于差分输入模式(结果可能为负值)。以下是关键要点:


1. 补码输出的配置条件


2. 补码输出的数据格式


3. 读取补码数据的代码示例(C语言)

// 读取ADC结果寄存器(右对齐)
uint16_t raw_value = ADC1->DR;  // 获取原始16位数据

// 转换为有符号整数(STM32硬件自动处理符号扩展)
int16_t signed_value = (int16_t)raw_value;

// 若需手动处理12位数据(右对齐):
// int16_t corrected_value = (raw_value << 4) >> 4;  // 算术右移扩展符号位

4. 配置步骤(以HAL库为例)

ADC_ChannelConfTypeDef sConfig = {0};

// 1. 启用ADC时钟
__HAL_RCC_ADC1_CLK_ENABLE();

// 2. 初始化ADC
hadc1.Instance = ADC1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;  // 12位分辨率
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;  // 右对齐(补码输出关键)
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
HAL_ADC_Init(&hadc1);

// 3. 配置差分输入通道(例如ADC_CHANNEL_1为P, ADC_CHANNEL_2为N)
sConfig.Channel = ADC_CHANNEL_1;       // 正端通道
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
sConfig.DifferentialMode = ENABLE;      // 启用差分模式
sConfig.Offset = 0;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

// 4. 启动转换并读取结果
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
    int16_t result = (int16_t)HAL_ADC_GetValue(&hadc1);  // 直接转为有符号数
}

5. 注意事项


6. 验证补码输出

通过上述配置,STM32 ADC可直接输出补码结果,简化了负电压的数字处理。

ADS1115用差分输入时,输出补码时出错是什么原因造成的?

我用的是ADS1115,采集正电压工作正常,想来采集负电压,于是用差分输入,正常情况会输出补码,但是在补码开头,SDA总是在SCL高电平时出现

2025-01-23 08:10:02

ADS1255输入信号接近满幅时,输出补码会溢出,怎么解决?

,但输入信号接近满幅时,输出补码会溢出。通过调小FSC(如:从49XXXX调整为20XXXX),可以使输出

2024-12-20 15:21:42

二进制补码及与原码的互相转换方法

大沙把一些基础的知识说清楚,本文介绍二进制补码及与原码的转换方法。 先说原码,原码‌是一种计算机中对数字的二进制定点表示方法。在原码表示法中,数值前面增加了一位符号位,最高位为符号位,0表示正数,1

2024-09-19 22:25:00

4位补码范围

4位补码可表示的整数的数值范围是十进制-8~7. 1000 → -8; 1001 → -7; 1010 → -6; 1011 → -5;

资料下载 baiwei332 2022-06-06 09:37:29

将24位(任意位数)补码转换成有符号整数的方法

我们在使用ADC的时候可能会遇到AD转换结果以24bit、12bit、10bit或诸如此类的补码形式输出,而计算机或单片机中,变量类型大多是8bit、16bit、32bit的。那该怎样把这些AD转换

资料下载 362163 2022-01-13 13:22:21

STM32 GPIO输出实验——点亮三色LED资料下载

电子发烧友网为你提供STM32 GPIO输出实验——点亮三色LED资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师

资料下载 佚名 2021-04-21 08:46:06

使用STM32F1单片机实现PWM输出的源代码和工程文件免费下载

本文档的主要内容详细介绍的是使用STM32F1单片机实现PWM输出的源代码和工程文件免费下载。

资料下载 佚名 2019-11-21 17:20:37

STM32的脉冲输出定位控制源代码合集免费下载

本文档的主要内容详细介绍的是STM32的脉冲输出定位控制源代码合集免费下载。

资料下载 佚名 2019-09-26 17:41:12

计算机原码、反码、补码的概念

在计算机内部数值是以补码的方式进行存储的,采用补码进行数据存储当然有其优点,下面会一一介绍相关内容,让各位彻底弄懂原码、反码、补码的概念以及为什

2024-01-09 12:25:09

什么是原码、反码和补码

文章目录1 前言2 什么是原码、反码和补码2.1 原码表示法2.2 反码表示法2.3 补码表示法2.4 小结2.4 在计算机中为什么采用补码来进

2021-12-15 07:00:05

计算机为什么要使用补码

,增加了计算的时间,能不能用加法器实现减法器的功能?这个实现的过程就用到了补码。 计算机为什么使用补码?采用补码可以简化计算机硬件电路设计的复杂

2021-09-12 16:06:43

关于有符号,无符号数,原码补码之间的运算

加法器的输出扩展了一位的,那就是说,这个数的十进制表示变成了-255,明显不对~乘法:乘出来有11位:11011010110,直接取的话肯定不对,但是如果只取低8位的话是11010110(补码),即

2021-06-24 10:00:57

深入探求反码和补码

本篇文章讲解了计算机的原码, 反码和补码。 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码

2020-09-15 15:23:49

计算机为什么使用补码的形式来表示负数

。 补码:正数的补码还是其本身;负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后+1。即反码加1。

2020-02-12 15:28:29

补码是什么 补码和原码的转化

计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来

2019-12-11 17:45:23
7天热门专题 换一换
相关标签