关于stm32的ad7792移植难题排解

发布者:RainbowJoy最新更新时间:2024-09-27 来源: elecfans关键字:stm32  ad7792  移植 手机看文章 扫描二维码
随时随地手机看文章

转换原理及参数指标

1. 采样定理

2. 为了正确无误的用图5.2.2中所示的采样信号vs表示模拟信号vi,必须满足式中, fs>=2fmax

fs为采样频率;fmax为输入信号vi的最高频率分量的频率;上式就是所谓的采样定理。满足采样定理的条件下,可以用一个低通滤波器将信号vs还原为vi,这个低通滤波器的电压传输系数|A(f)|在低于fmax的范围内应保持不变,而在fs-fmax以前应迅速下降为零,采样定理规定了A/D转换的频率下限。

AD7792 遇到的问题/学到的知识点

学到的知识点:

1.在stm32中

U8 : unsigned char

U16: unsigned short

U32: unsigned int

2. 在stm32中 AD7792采样的电压数值要经过转换成ASCII码字符在串口中打印出来有两种编程方式实现:

u8TempD;

u16 Datau16;

char str[20];

unsigned short iData[3];

u8 Strvbat[8]={'/','/','/',',',0,0,0,0};

u8 ASCII[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','+',//10->16

',',//11-17

'-',//12-18

'.',//13-19

'/',//14-20

};

方式一:(简洁版)

AD_VBat[TempD] = SPI_Read16Bit();

memcpy(&iData[0],& AD_VBat[TempD],2);

sprintf(str,'%d',iData[0]);

UART1_TX485_Puts(USART1,&str[0]);

方式二:(复杂版)

AD_VBat[TempD] = SPI_Read16Bit();

Datau16 = AD_VBat[TempD];

Strvbat[0]=ASCII[Datau16/10000];

Strvbat[1]=ASCII[Datau16%10000/1000];

Strvbat[2]=ASCII[Datau16%1000/100];

Strvbat[3]=ASCII[Datau16%100/10];

Strvbat[4]=ASCII[Datau16%10];

UART1_TX485_Puts(USART1,&Strvbat[0]);

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);


3.遇到的问题

问题一:通过串口打印,采样的数值为32768左右转化后的电池电压为2.5V,而电池实际电压应该为3.32v采样数值应该为43582左右的数值;

问题根源:通道切换的问题;

AD7792有3个模拟输入通道,初始化AD7792配置函数中,写配置寄存器SPI_SendByte(0x10); /* 写配置寄存器*/

SPI_Send16Bit(0x1080); // 偏置电压禁用禁用熔断电流单极性编码内部基准

SPI_Send16Bit(0x1080)设置的采样通道是采样电流的通道,所以采样的是电流的数值;

题二:在移植AD7792独立出来时,发现电池电压采样值打印为0000;

问题根源:SPI配置问题;

原理图:

错误配置:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7 ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure);

正确配置:

/* Configure SPI1 pins: SCK, MISO and MOSI */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* 配置MISO为输入 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);


关键字:stm32  ad7792  移植 引用地址:关于stm32的ad7792移植难题排解

上一篇:STM32单片机SPI的使用原理解析
下一篇:STM32单片机内存管理器实用代码解析与工程应用指南

推荐阅读最新更新时间:2026-03-20 12:03

关于stm32ad7792移植难题排解
转换原理及参数指标 1. 采样定理 2. 为了正确无误的用图5.2.2中所示的采样信号vs表示模拟信号vi,必须满足式中, fs =2fmax fs为采样频率;fmax为输入信号vi的最高频率分量的频率;上式就是所谓的采样定理。满足采样定理的条件下,可以用一个低通滤波器将信号vs还原为vi,这个低通滤波器的电压传输系数|A(f)|在低于fmax的范围内应保持不变,而在fs-fmax以前应迅速下降为零,采样定理规定了A/D转换的频率下限。 AD7792 遇到的问题/学到的知识点 学到的知识点: 1.在stm32中 U8 : unsigned char U16: unsigned short U32: unsigned int 2.
[单片机]
关于<font color='red'>stm32</font>的<font color='red'>ad7792</font><font color='red'>移植</font>难题排解
移植FreeRTOS到STM32(嵌入式入门)
引言 本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上其实是一摸一样的,区别就是软件上嵌入式跑了操作系统而单片机没有。文本选用市场上最常见的STM32和FreeRTOS,为大家介绍如何移植操作系统到MCU上。 介绍 什么是 RTOS? 实时操作系统(Real-time operating system, RTOS),它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
[单片机]
STM32移植U8g2图形库——玩转OLED显示
本篇,介绍一下U8g2库如何移植到STM32上,进行OLED的图形显示。 本次的实验硬件为: STM32:型号为最常见的STM32F103C8T6 OLED:0.96寸OLED,IIC接口(如果是SPI接口,文中也有对应的修改介绍) 1 U8g2简介 U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,并支持如SSD1306等多种类型的OLED驱动。 U8g2源码的开源库地址:https://github.com/olikraus/u8g2 2 移植步骤 首先下载U8g2的源码,因为STM32主要是使用C语言编程,所以只需关注源码中的C源码部分,即csrc文件夹下的文件。 2.
[单片机]
STM32使用KEIL pack包快速移植LVGL GUI框架并实战指南
先展示最终实现的功能效果如下: 1.目的与意义 之前在学习STM32移植LVGL图形库的时候,搜到的很多教程都是在官网下载LVGL的文件包,然后一个个文件包含进去,还要添加路径,还要给文件改名字,最后才能修改程序实现效果,十分繁琐,编译时还容易报错缺少各种文件,而采用KEIL的pack包直接进行移植,则可以直接跳过这些繁琐的环节,直接对文件程序进行修改。 2.LVGL pack包的获取及移植到KEIL-STM32工程上 LVGL pack包下载网址: https://www.keil.arm.com/packs/?q=LVGL&pack-search= 下载之后通过keil的pack installer file im
[单片机]
基于STM32 HAL库的平衡循迹小车技术详解:串级PID控制、MPU移植及电赛应用
1.硬件设计(仅限参考) 先是原理图如下 主要模块:灰度,电源,mpu(陀螺仪),oled,tb6612,含有编码器的电机 2.mpu模块的使用和移植 想要使平衡车保持平衡,mpu是最重要的模块,大家可以参考这个博主写的 http://t.csdnimg.cn/ITLI3 如果大家没有时间或者移植失败,也可以直接移植我代码之中的mpu模块: 链接: https://pan.baidu.com/s/1-9Vstj5v0Wgqkm1AFrCt_w?pwd=k8g8 提取码: k8g8 3.代码的主要逻辑 1.通过mpu获得pitch,roll,yaw的值来进行处理 2.获得编码器的数值3.通过处理之后的数据
[单片机]
基于<font color='red'>STM32</font> HAL库的平衡循迹小车技术详解:串级PID控制、MPU<font color='red'>移植</font>及电赛应用
STM32 Canfestival移植过程中遇到的问题
出现declaration may not appear after executable statement in block的错误提示,可以试试添加C99标准 keil中怎么添加C99的标准 - 波特曼 - 博客园 (cnblogs.com) 如果PDO发送时间出现问题,请看看定时器设置是否出现故障。
[单片机]
<font color='red'>STM32</font> Canfestival<font color='red'>移植</font>过程中遇到的问题
uCosII移植STM32触发中断、任务切换的汇编学习
STM32汇编关键字含义: IMPORT OSxx ;//IMPORT声明了OSxx在外文件定义 EXPORT OSxx ;//EXPORT声明OSxx可以被外文件使用,相当于全局性声明 LDR R0,=label ;//这是ARM的RISC指令下一个用于内存和CPU寄存器交换数据的指令,用法比较复杂。具体百度。 ;//这里的含义就是把label的地址值赋值给R0,和 LDR R0,label 不同,没有'='的是取其地址的值传递给R0 ;// LDR R0,label ;//取label其地址的值传递给R0 LDR?R0,0x12345678 ;//就是把0x12345678这个地址中的值存放到r0
[单片机]
MAVLink学习之路04_MAVLink移植STM32具体步骤
1写在前面 《MAVLink学习之路》前面三篇文章,可以说是一些基础知识,也是为本文做的准备工作(建议初学者先了解前面三篇文章)。 本文主要内容: MAVLink移植主要步骤 MAVLink移植过程要点 提示:为方便广大初学者朋友尽快掌握MAVLink,我在文末提供MAVLink发送接收例程(基于STM32硬件、MDK-ARM和EWARM开发环境)。 为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,本文章收录于【MAVLink学习之路】,在微信公众号回复【MAVLink学习之路】即可查看。 2 MAVLink移植主要步骤 2.1 移植说明 本文主要针对MAVLink C源代码移植进行讲述。其中,MAVLink的C
[单片机]
MAVLink学习之路04_MAVLink<font color='red'>移植</font>到<font color='red'>STM32</font>具体步骤
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved