基于stm32的ad7793的例程

更新时间:2024-02-02 07:11:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于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); }

本文来源:https://www.bwwdw.com/article/fe2w.html

Top