基于stm32的ad7793的例程

2019-08-03 13:25

基于stm32的ad7793的例程 void Delay(u32 i)\\\\延时函数 { while(i--); }

void AD7793_CS_SET()//CS置一 { GPIO_SetBits(GPIOA,GPIO_Pin_4); }

void AD7793_CS_CLR()//CS置零 { GPIO_ResetBits(GPIOA,GPIO_Pin_4); }

void AD7793_SCLK_SET() { GPIO_SetBits(GPIOA,GPIO_Pin_5); }

void AD7793_SCLK_CLR() { GPIO_ResetBits(GPIOA,GPIO_Pin_5); }

void AD7793_DIN_SET() { GPIO_SetBits(GPIOA,GPIO_Pin_6); }

void AD7793_DIN_CLR() { GPIO_ResetBits(GPIOA,GPIO_Pin_6); }

void AD7793_DOUT_SET() { GPIO_SetBits(GPIOA,GPIO_Pin_7); }

u8 AD7793_DOUT_GET() { u8 i; i=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7); return i; }

void AD7793_GPIO_Config(void)//GPIO口设置 { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //将PA7口设置为DOUT

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 ; //PA456分别设置为CS、CLK、DIN GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); AD7793_CS_SET(); }

void WriteToReg(unsigned char ByteData) //向AD7793写入一个字节 { unsigned char temp; unsigned char i; AD7793_CS_CLR(); temp=0x80; for(i=0;i<8;i++) { if((temp & ByteData)==0) { AD7793_DIN_CLR(); } else { AD7793_DIN_SET(); } AD7793_SCLK_CLR(); Delay(200); AD7793_SCLK_SET(); Delay(200); temp=temp>>1; } AD7793_CS_SET(); }

void AD7793_Reset(void) //AD7793复位 { unsigned int ResetTime; ResetTime=32; AD7793_SCLK_SET(); AD7793_CS_CLR(); AD7793_DIN_SET(); while(ResetTime--) {

}

WriteToReg(0xff); Delay(100); AD7793_SCLK_CLR(); Delay(100); AD7793_SCLK_SET(); }

AD7793_CS_SET();

unsigned char AD7793_ReadStatusRegister(void) //读取7793的状态寄存器 { unsigned char j; unsigned char temp; WriteToReg(0x40); AD7793_DIN_SET(); AD7793_CS_CLR(); temp=0; AD7793_DOUT_SET(); for(j=0; j<8; j++) { AD7793_SCLK_CLR(); AD7793_DOUT_SET(); if(AD7793_DOUT_GET()==0) { temp=temp<<1; } else { temp=temp<<1; temp=temp+0x01; } Delay(200); AD7793_SCLK_SET(); Delay(200); } AD7793_CS_SET(); return temp; }

void Ad7793_WriteModeRegister(unsigned char ModeRegisterH,unsigned char ModeRegisterL)//配置模式寄存器 { WriteToReg(0x08); WriteToReg(ModeRegisterH); WriteToReg(ModeRegisterL); }

void Ad7793_WriteConfigRegister(unsigned char ConfigRegisterH,unsigned char

ConfigRegisterL)//配置配置寄存器 { WriteToReg(0x10); WriteToReg(ConfigRegisterH); WriteToReg(ConfigRegisterL); }

void Ad7793_WriteIORegister(unsigned char IORegister)//配置IO寄存器 { WriteToReg(0x28); WriteToReg(IORegister); }

long AD7793_ReadDataRegister(void) { union { unsigned char chardata[4]; unsigned long longdata; }AD7793Result; unsigned char i,j; unsigned char temp; temp=AD7793_ReadStatusRegister(); while((temp&0x80)==0x80) { temp=AD7793_ReadStatusRegister(); } WriteToReg(0x58); AD7793_DIN_SET(); AD7793_CS_CLR(); AD7793_DOUT_SET(); for(i=0; i<3; i++) { for(j=0; j<8; j++) { AD7793_SCLK_CLR(); AD7793_DOUT_SET(); if(AD7793_DOUT_GET()==0) { temp=temp<<1; }else { temp=temp<<1; temp=temp+0x01;

}

} Delay(200); AD7793_SCLK_SET(); Delay(200); } AD7793Result.chardata[3-i]=temp; }

AD7793_CS_SET();

AD7793Result.longdata=AD7793Result.longdata>>8; return AD7793Result.longdata;

void Init_AD7793(void)//AD7793的初始化 { AD7793_GPIO_Config(); AD7793_Reset(); Ad7793_WriteModeRegister(0x00,0x0a); Ad7793_WriteConfigRegister(0x10,0x00); Ad7793_WriteIORegister(0x03); }

void AD7793_EXTIX_Init(void)//中断程序,当DOUT有数据输出时,DOUT变为低电平,此时触发中断程序,读取AD7793的数据寄存器 { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource7);

EXTI_InitStructure.EXTI_Line=EXTI_Line7;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }

void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line7) != RESET) send_PC_7793data(); Init_AD7793(); LED_Init(); EXTI_ClearITPendingBit(EXTI_Line7); }


基于stm32的ad7793的例程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:广东高院关于限制出境措施的调研报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: