STM32源码实操:AD7190差分电压采集与串口打印DEMO

版权申诉
5星 · 超过95%的资源 23 下载量 153 浏览量 更新于2024-12-19 4 收藏 6.87MB ZIP 举报
资源摘要信息:"该资源包包含了STM32单片机对AD7190 24bit ADC进行两路差分电压采集的DEMO例程源码。AD7190是一款高性能、低噪声的24位模拟前端转换器,广泛应用于工业控制系统、精密仪器仪表等领域。在本例程中,使用STM32单片机通过串口打印的方式读取AD7190转换后的电压值。DEMO例程中使用了多个初始化函数,包括系统初始化HAL_Init(),系统时钟配置SystemClock_Config(),串口初始化MX_DEBUG_USART_Init()等。此外,还包括了LED和BEEP的GPIO初始化,确保DEMO例程在硬件层面上能够正常工作。当检测到AD7190时,会通过printf函数输出相应的提示信息。AD7190的配置包括差分输入模式的设置,这是在ad7190_bipolar_multichannel_conf()函数中完成的。整个DEMO例程适用于嵌入式硬件开发和学习,特别是对于想要深入了解STM32与AD7190集成应用的开发者来说,是一个很好的学习材料。" 以下是对标题、描述、标签和文件名称列表中所包含知识点的详细解释: 1. STM32单片机:STM32是STMicroelectronics(意法半导体)公司生产的一系列基于ARM Cortex-M微控制器的产品系列,广泛应用于嵌入式系统。STM32单片机以其高性能、低成本和丰富的集成外设而受到开发者青睐。 2. 24bit ADC AD7190:AD7190是一款由Analog Devices公司生产的24位模拟到数字转换器(ADC),具有高精度、低噪声的特性,适用于各种工业测量和精密数据采集应用。它支持差分输入,能够测量电压差,从而提高测量精度。 3. 串口打印:在嵌入式系统中,串口通信是一种常见的数据传输方式,通过串口可以将数据输出到电脑的终端或调试设备上。在这个例程中,使用串口将AD7190采集到的电压数据打印输出。 4. 两路差分电压采集:差分信号采集意味着系统可以同时采集两个输入端口之间的电压差,这有助于提高抗干扰能力和测量精度。 5. HAL库函数:在STM32的开发中,HAL库提供了硬件抽象层,简化了对外设的操作。在本例程的main函数中,首先调用了HAL库的初始化函数HAL_Init(),之后进行了系统时钟的配置SystemClock_Config(),为系统运行提供必要的时间基准。 6. 外设初始化:包括串口初始化MX_DEBUG_USART_Init()和LED、BEEP的GPIO初始化函数LED_GPIO_Init()以及BEEP_GPIO_Init(),确保STM32单片机上的外设功能可以正常使用。 7. 标签信息:指出该资源包为STM32源码软件,关注嵌入式硬件领域,主要涉及24bit ADC AD7190模块以及其在STM32单片机上的两路差分电压采集功能。 8. 文件名称列表:包含了多个文件和文件夹,如用于删除编译信息文件以减小体积的批处理文件"删除编译信息文件(缩小体积方便备份).bat"、工程说明文档"工程说明:AD7190两路差分电压采集.docx"、STM32CubeMX工程配置文件"YS-F4Pro.ioc"、MDK-ARM项目文件夹"MDK-ARM"、源代码文件夹"Src"、驱动文件夹"Drivers"、项目头文件夹"Inc"、以及工程的_README文件。 通过以上知识点的解释,可以了解到该资源包主要面向具有STM32和AD7190 ADC模块开发经验的工程师和开发者。通过本例程,用户不仅可以学习如何通过STM32读取AD7190采集的电压值,还可以学习到如何进行系统初始化、配置外设以及基本的串口通信等嵌入式系统开发的基础知识。
2022-01-17 上传
STM32单片机读写24位ADC_AD7190称重模块带液晶显示例程DEMO源码文件,可做为你的学习设计参考。 int main(void) { uint32_t lcdid; float data_temp; int32_t weight_count; uint8_t cali_flag=0; char str[50]; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); KEY_GPIO_Init(); /* 初始化3.5寸TFT液晶模组,一般优先于调试串口初始化 */ lcdid=BSP_LCD_Init(); /* 调用格式化输出函数打印输出数据 */ printf("LCD ID=0x%08X\n",lcdid); LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK); HAL_Delay(1000); /* 开背光 */ LCD_BK_ON(); if(AD7190_Init()==0) { printf("获取不到 AD7190 !\n"); while(1) { HAL_Delay(1000); if(AD7190_Init()) break; } } printf("检测到 AD7190 !\n"); weight_ad7190_conf(); HAL_Delay(500); weight_Zero_Data = weight_ad7190_ReadAvg(6); printf("zero:%d\n",weight_Zero_Data); /* 无限循环 */ while (1) { weight_count=weight_ad7190_ReadAvg(6); data_temp=weight_count-weight_Zero_Data; weight=data_temp*1000/weight_proportion; printf("重量:0x%5X->%f\n",weight_count,weight); sprintf(str,"0x%5X",weight_count); LCD_DispString_EN(190,80,str,BLACK,RED,USE_FONT_24); sprintf(str,"%0.2fg",weight); LCD_Clear(140,100,300,64,BLACK); LCD_DispString_EN(140,100,str,BLACK,YELLOW,USE_FONT_64); HAL_Delay(100); if(KEY1_StateRead()==KEY_DOWN) // 清零 { weight_Zero_Data = weight_ad7190_ReadAvg(6); printf("zero:%d\n",weight_Zero_Data); cali_flag=1; } if(KEY2_StateRead()==KEY_DOWN) // 校准:必须先按“清零”键,然后把20g砝码放在称上,按下校准键 { if(cali_flag) { weight_count = weight_ad7190_ReadAvg(6); weight_proportion=(weight_count-weight_Zero_Data)*1000/100; printf("weight_proportion:%d\n",weight_proportion); } cali_flag=0; } }