• dragonlordhubo
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 8
    下载次数
  • 2020-07-28 09:59
    上传日期
项目中使用的稳定版本。目前已经在多个项目中稳定运用。
ad7656.zip
  • ad7656.c
    7.2KB
内容介绍
/********************************************************************************** * 文件名 :ad7656.c * 描述 :spi传输ad7656采集的数据 * 硬件连接 ---------------------------- * | 见PCB677 | * |----------------------------| * 库版本 :ST3.5.0 * 作者 :XQM **********************************************************************************/ #include "ad7656.h" #include "hardware.h" // #include "common.h" #include "main.h" void PIN_GPIOA_Config(void) { GPIO_InitTypeDef GPIOA_InitStructure; /*开启GPIOA的外设时钟,72M*/ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIOA_InitStructure); } /* * 函数名:GPIOB_Config * 描述 :配置控制用到的I/O口 * 输入 :无 * 输出 :无 */ void PIN_GPIOB_Config(void) { GPIO_InitTypeDef GPIOB_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 |GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11; GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIOB_InitStructure); } /* * 函数名:GPIOC_Config * 描述 :配置控制用到的I/O口 * 输入 :无 * 输出 :无 */ void PIN_GPIOC_Config(void) { GPIO_InitTypeDef GPIOC_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); GPIOC_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7; GPIOC_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIOC_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIOC_InitStructure); } /* * 函数名:GPIOD_Config * 描述 :配置控制用到的I/O口 * 输入 :无 * 输出 :无 */ void PIN_GPIOD_Config(void) { GPIO_InitTypeDef GPIOD_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIOD_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIOD_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIOD_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIOD_InitStructure); } /* * 函数名:GPIOE_Config * 描述 :配置控制用到的I/O口 * 输入 :无 * 输出 :无 */ void PIN_GPIOE_Config(void) { GPIO_InitTypeDef GPIOE_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE); GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7; GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式 GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIOE_InitStructure); // GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_5; // GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //推挽输出模式 // GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_Init(GPIOE, &GPIOE_InitStructure); } void myDelay_us(unsigned int nus) { unsigned char i, j; for(i = nus; i > 0; i--) for(j = 72; j > 0; j--) __nop(); } void myDelay_ms(unsigned int nms) { unsigned int i; for(i = nms; i > 0; i--) myDelay_us(400); } /******************************************************************************* * Function Name : PIN_Init * Description : Initializes the peripherals * Input : None * Output : None * Return : None *******************************************************************************/ void AD7656_Init(void) { PIN_GPIOD_Config(); PIN_GPIOE_Config(); RESET_PIN(PORT_AD_E,PIN_RANGE); GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)|0X0E)); //同时上拉ABC SET_PIN(PORT_AD_E,PIN_RESET); myDelay_us(5); RESET_PIN(PORT_AD_E,PIN_RESET); GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)&0XF1));//同时下拉ABC RESET_PIN(PORT_AD_E,PIN_RANGE); } /******************************************************************************* * Function Name : PIN_Sample * Description : Initializes the peripherals * Input : None * Output : None * Return : None *******************************************************************************/ void AD7656_Sample( unsigned num) { int i; //启动AD转换 // RESET_PIN(PORT_AD_E,PIN_CONVERTA); // RESET_PIN(PORT_AD_E,PIN_CONVERTB); // RESET_PIN(PORT_AD_E,PIN_CONVERTC); GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)&0XF1));//同时下拉ABC SET_PIN(PORT_AD_E,PIN_CS); SET_PIN(PORT_AD_E,PIN_READ); myDelay_us(2); // SET_PIN(PORT_AD_E,PIN_CONVERTA); // SET_PIN(PORT_AD_E,PIN_CONVERTB); // SET_PIN(PORT_AD_E,PIN_CONVERTC); GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)|0X0E)); //同时上拉ABC do { __nop(); }while(GET_PIN(PORT_AD_E,PIN_BUSY)); //-----------读取转换结果----------- RESET_PIN(PORT_AD_E,PIN_CS); for(i=0;i<num;i++) { RESET_PIN(PORT_AD_E,PIN_READ); // __nop(); // __nop(); // __nop(); // AdConvertDataBuffer[i].dbyte=i; AdConvertDataBuffer[i].dsByte=GPIO_ReadInputData(PORT_AD_DATA); RESET_PIN(PORT_AD_E,PIN_READ); SET_PIN(PORT_AD_E,PIN_READ); } myDelay_us(1); SET_PIN(PORT_AD_E,PIN_CS); } void AD7656_RESET(void) { unsigned char j; GPIOE->BRR = PIN_RANGE; GPIOE->BSRR = PIN_RESET; for(j=0;j<5;j++); GPIOE->BRR =PIN_RESET; } void AD76756_ADC(void) { unsigned char j; // GPIOE->BRR = PIN_CONVST;//A // for(j=0;j<2;j++); // GPIOE->BSRR = PIN_CONVST;//A // for(j=0;j<1;j++); GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)&0XF1));//同时下拉ABC // __nop(); for(j=0;j<60;j++); // SET_PIN(PORT_AD_E,PIN_CONVERTA); // SET_PIN(PORT_AD_E,PIN_CONVERTB); // SET_PIN(PORT_AD_E,PIN_CONVERTC); GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)|0X0E)); //同时上拉ABC while((GPIOE->IDR & PIN_BUSY)) ; GPIOE->BRR = PIN_CS;//CS GPIOE->BRR = PIN_READ;//RD GPIOD->ODR=0xffff; AdConvertDataBuffer[0].dsByte=GPIOD->IDR; GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BRR = PIN_READ;//RD GPIOD->ODR=0xffff; AdConvertDataBuffer[1].dsByte=GPIOD->IDR; GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BRR = PIN_READ;//RD GPIOD->ODR=0xffff; AdConvertDataBuffer[2].dsByte=GPIOD->IDR; GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BRR = PIN_READ;//RD GPIOD->ODR=0xffff; AdConvertDataBuffer[3].dsByte=GPIOD->IDR; GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_READ;//RD GPIOE->BSRR = PIN_CS; }
评论
    相关推荐