[其他ST产品] STM32 控制MAX197读取不到数据

[复制链接]
1245|18
 楼主| flycamelaaa 发表于 2024-8-21 17:16 | 显示全部楼层 |阅读模式
#include "max197.h"
#include "delay.h"
#include "usart.h"

void MAX197_Init()
{
//JTAG_Set(JTAG_SWD_DISABLE);        //必须关闭JTAG,有IO复用
RCC->APB2ENR|=1<<7;      //使能PA时钟
GPIOF->CRL&=0x00000000;
GPIOF->CRL|=0x33333333;
GPIOF->CRH&=0x00000fff;
GPIOF->CRH|=0x83333000;
GPIOF->ODR|=0x78ff;
}
//Channel:通道x, 0~7
u16 MAX197_Read(u8 Channel)
{
u16 temp;
MAX197_CS=0;

MAX197_WR=0;
MAX197_DATA(0x40|Channel);         //正常操作,内部时钟,0~5V,通道0
MAX197_CS=1;
MAX197_WR=1;
while(MAX197_INT);

//        GPIOA->CRL&=0x00000000;
//        GPIOA->CRL|=0x88888888;
PAL_IN();        //浮空输入也行,模拟输入不行

MAX197_CS=0;

MAX197_RD=0;
MAX197_HBEN=1; //读高四位
temp=GPIOF->IDR&0x0f;
temp<<=8;
MAX197_HBEN=0;  //读低八位
temp|=(GPIOF->IDR&0xff);

//        GPIOA->CRL&=0x00000000;
//        GPIOA->CRL|=0x33333333;
PAL_OUT();

MAX197_CS=1;

return temp;
}
double MAX197_GetVol(u8 Channel)         //读取10次求平均值
{
double vol;
u16 temp=0,i;
for(i=0;i<10;i++)
{
temp+=MAX197_Read(Channel);
}
vol=(double)temp/10.0/4095.0*5.0;
return vol;
}

#ifndef __MAX197_H
#define __MAX197_H

#include "sys.h"
#include "STM32f10x.h"
#define PAL_OUT() {GPIOF->CRL&=0x00000000;GPIOF->CRL|=0x33333333;}
#define PAL_IN()  {GPIOF->CRL&=0x00000000;GPIOF->CRL|=0x88888888;}

#define MAX197_DATA(x) GPIOF->ODR=(GPIOF->ODR&0Xff00)|(x&0x00ff)//PA低8位数据输出

#define MAX197_CS   PFout(11)
#define MAX197_WR   PFout(12)
#define MAX197_RD   PFout(13)
#define MAX197_HBEN PFout(14)
#define MAX197_INT  PFin(15)

void MAX197_Init(void);
u16 MAX197_Read(u8 Channel);
double MAX197_GetVol(u8 Channel);

//MAX197寄存器设置:
//      控制字格式:
//      D7(MSB)  D6     D5     D4     D3      D2     D1     D0(LSB)
//        PD1    PD0  ACQMOD   RNG    BIP     A2     A1     A0                 
//      控制字说明:
//          PD1,PD0 ----- 选择时钟和掉电模式
//           ACQMOD ----- 0:内部获取模式;1:外部获取模式
//              RNG ----- 选择满幅输入电压
//              BIP ----- 选择输入极性
//         A2,A1,A0 ----- 选择输入通道
//                           
//          PD1,PD0 ----- 00:一般模式/外部时钟
//                        01:一般模式/内部时钟
//                        10:Standby Power-Down/时钟不受影响
//                        11:Full Power-Down (FULLPD)/时钟不受影响
//                                               
//          RNG,BIP ----- 00: 0V ~  +5V
//                        01:-5V ~  +5V
//                        10: 0V ~ +10V
//                        11:-10V~ +10V
//                                                
//         A2,A1,A0 ----- 000:CH0
//                        001:CH1
//                        010:CH2
//                        011:CH3
//                        100:CH4
//                        101:CH5
//                        110:CH6
//                        111:CH7      
//*******************************************
#endif
谁能帮我看一下?为什么完全读不到数据?
y1n9an 发表于 2024-8-31 20:45 | 显示全部楼层
STM32控制MAX197读取不到数据可能由多种原因造成。MAX197是一款8通道、12位模拟-数字转换器(ADC),通常用于工业应用中进行高精度数据采集
b5z1giu 发表于 2024-8-31 20:59 | 显示全部楼层
MAX197的电源电压不稳定或不正确可能会引起这个现象,一般情况是电源线路上存在噪声或干扰
发给她更好fh 发表于 2024-8-31 21:17 | 显示全部楼层
检查 SCLK、MISO、MOSI 和 CS线是否连接正确。
cen9ce 发表于 2024-8-31 21:21 | 显示全部楼层
硬件连接问题,MAX197与STM32之间的连接线松动或断开。信号线(如数据线、控制线)连接错误。地线连接不良,导致地回路噪声
d1ng2x 发表于 2024-8-31 21:44 | 显示全部楼层
配置错误,MAX197的控制寄存器配置不正确,导致ADC无法启动或选择错误的通道。STM32的GPIO配置错误,导致无法正确发送控制信号或读取数据
kaif2n9j 发表于 2024-8-31 22:02 | 显示全部楼层
时序问题,控制信号的时序不正确,导致MAX197无法识别或响应STM32的命令。数据读取的时序不匹配,导致读取的数据不正确或丢失
lix1yr 发表于 2024-8-31 22:33 | 显示全部楼层
软件代码问题吧,比如STM32的固件代码中存在错误,导致无法正确控制MAX197或读取数据。中断处理或DMA传输配置不正确,导致数据丢失或读取失败
liu96jp 发表于 2024-8-31 22:56 | 显示全部楼层
ADC故障也有可能哦,MAX197芯片本身可能存在故障或损坏
q1d0mnx 发表于 2024-8-31 23:03 | 显示全部楼层
参考电压对不对?如果MAX197的参考电压不稳定或不正确,导致ADC转换结果不准确
tax2r6c 发表于 2024-8-31 23:23 | 显示全部楼层
我这边建议检查电源电压和线路,确保MAX197和STM32的电源稳定且无噪声。检查硬件连接,确保所有信号线和地线连接正确且牢固
suw12q 发表于 2024-8-31 23:44 | 显示全部楼层
可以仔细检查一下MAX197的配置寄存器和STM32的GPIO配置,确保配置正确
classroom 发表于 2024-12-31 12:15 | 显示全部楼层
电源电压不稳定
powerantone 发表于 2024-12-31 12:17 | 显示全部楼层
硬件连接问题
elephant00 发表于 2024-12-31 12:19 | 显示全部楼层
STM32的固件代码中存在错误,可能导致无法正确控制MAX197或读取数据。
onlycook 发表于 2024-12-31 12:20 | 显示全部楼层
检查MAX197与STM32之间的连接线是否牢固可靠。
七毛钱 发表于 2024-12-31 12:21 | 显示全部楼层
检查STM32的固件代码,确保没有逻辑错误或语法错误。
stormwind123 发表于 2024-12-31 13:00 | 显示全部楼层
MAX197的控制寄存器配置不正确,可能导致ADC无法启动或选择错误的通道。
laocuo1142 发表于 2024-12-31 14:00 | 显示全部楼层
如果电源线路上存在噪声或干扰,可能会影响MAX197的性能。
classroom 发表于 2024-12-31 14:00 | 显示全部楼层
GPIO配置错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

837

主题

4432

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部