STM32/STM8技术论坛
直播中

hnsdyd

10年用户 12经验值
擅长:可编程逻辑
私信 关注
[问答]

STM32 控制MAX197读取不到数据

#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
谁能帮我看一下?为什么完全读不到数据?

已退回1积分

回帖(1)

格古落

2015-8-25 22:00:42
加个上拉电阻试试~
举报

更多回帖

发帖
×
20
完善资料,
赚取积分