• sv1kaiqi
    了解作者
  • C/C++
    开发工具
  • 3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 18
    下载次数
  • 2019-03-14 22:35
    上传日期
STM32F系列 ,AD7689驱动代码,C语言,库函数版本
AD7689.rar
  • AD7689.c
    5.1KB
  • AD7689.h
    4.3KB
内容介绍
#include "AD7689.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //Mini STM32开发板 //SPI 驱动函数 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2010/6/13 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 正点原子 2009-2019 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //以下是SPI模块的初始化代码,配置成主机模式,访问SD Card/W25X16/24L01/JF24C //SPI口初始化 //这里针是对SPI1的初始化 SPI_InitTypeDef SPI_InitStructure; void SPIx_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收8位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //选择了串行时钟的稳态:时钟悬空高 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定义波特率预分频的值:波特率预分频值为256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 SPI_Init(SPI1, &SPI_InitStructure); //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器 SPI_Cmd(SPI1, ENABLE); //使能SPI外设 SPIx_ReadWriteByte(0xff);//启动传输 } //SPI 速度设置函数 //SpeedSet: //SPI_BaudRatePrescaler_2 2分频 (SPI 36M@sys 72M) //SPI_BaudRatePrescaler_8 8分频 (SPI 9M@sys 72M) //SPI_BaudRatePrescaler_16 16分频 (SPI 4.5M@sys 72M) //SPI_BaudRatePrescaler_256 256分频 (SPI 281.25K@sys 72M) void SPIx_SetSpeed(u8 SpeedSet) { SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1,ENABLE); } //SPIx 读写一个字节 //TxData:要写入的字节 //返回值:读取到的字节 u8 SPIx_ReadWriteByte(u8 TxData) { u8 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位 { retry++; if(retry>200)return 0; } SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; if(retry>200)return 0; } return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据 } void AD7689_Delay(void) { u16 count ; for(count = 1000; count != 0; count--); } //http://blog.sina.com.cn/s/blog_711aba3d0100n3j3.html //凯美特中心在366 宏欣在370 骏彩 367 新鸿368.5 //ITR20403 u16 SPI_AD7689_Read(u8 AD7689_CFG, u8 AD7689_INx) { u16 AD7689_Config=0,AD7689_Data; u8 i; AD7689_Config = AD7689_CFG<<13|AD7689_INCC<<10|AD7689_INx<<7|AD7689_BW<<6|AD7689_REF<<3|AD7689_SEQ<<1|AD7689_RB; AD7689_Config <<=2; AD7689_CNV = 0; AD7689_Delay(); for(i=0;i<16;i++) { if(AD7689_Config&0x8000) { AD7689_MOSI = 1 ; } else { AD7689_MOSI = 0; } AD7689_Delay(); AD7689_SCK = 0; AD7689_Delay(); AD7689_Config <<= 1; AD7689_SCK = 1; AD7689_Delay(); AD7689_Data <<=1; if(AD7689_MISO) { AD7689_Data |=1; } } AD7689_Delay(); AD7689_SCK = 0; AD7689_Delay(); AD7689_CNV = 1; return AD7689_Data; } // #define AD7689_MISO PEin(10) //主输入从输出 //#define AD7689_SCK PEout(11) //时钟 //#define AD7689_MOSI PEout(12) //主输出从输入 //#define AD7689_CNV PEout(13) //片选 /* reg = (1<<13)|(7<<10)|(chn<<7)|(1<<6)|(1<<0); reg <<=2; //????? //AD7689_SCLK_1; //delay_AD7689_us(); AD7689_CS_0; delay_AD7689_us(); for(i=0;i<16;i++) { if(reg&0x8000){AD7689_DIN_1;}//???? else {AD7689_DIN_0;} delay_AD7689_us(); AD7689_SCLK_0; delay_AD7689_us(); reg<<=1; AD7689_SCLK_1; delay_AD7689_us(); data<<=1; if(AD7689_DOUT_READ){data|=1;} //????? } delay_AD7689_us(); AD7689_SCLK_0; delay_AD7689_us(); AD7689_CS_1; return data; } */ /* //读取芯片ID W25X16的ID:0XEF14 u16 SPI_Flash_ReadID(void) { u16 Temp = 0; SPI_FLASH_CS=0; SPIx_ReadWriteByte(0x90);//发送读取ID命令 SPIx_ReadWriteByte(0x00); SPIx_ReadWriteByte(0x00); SPIx_ReadWriteByte(0x00); Temp|=SPIx_ReadWriteByte(0xFF)<<8; Temp|=SPIx_ReadWriteByte(0xFF); SPI_FLASH_CS=1; return Temp; } */
评论
    相关推荐
    • AD9959的stm32驱动
      ADI公司DDS芯片AD9959的驱动,基于stm32
    • stm32 ad7705
      stm32 ad7705 spi uv4工程 已经调试好的 稍加修改就可在不同stm32芯片上运行
    • stm32AD转换
      使用STM32F407VGT6进行ad转换,并将多次采集结果求取平均值,提高采集精度
    • STM32 AD7124
      STM32F4 + SPI调试AD7124 程序参考,需要的可以下载。
    • AD STM32最小系统封装
      本文件是应用于Altium Designer 软件,包含stm32最小系统的各种元器件封装
    • AD9850-STM32程序
      AD9850-STM32程序。DDS正弦波方波程序。可调频。1——10M实测可用
    • STM32F429操作两片AD7689
      需要用两片AD7689组成16通道工频数据采集,双通道同步采样,一次双通道采集耗时20us,一次单通道采集耗时14us,现把源码公开,希望大牛能将采样时间降到最低,减少CPU占用率。
    • AD7171 STM32 Driver
      16BitΣ-Δ型ADC 硬件平台:STM32F103+AD7171 本驱动提供lib文件,简单易用
    • STM32 AD
      AD软件,stm32的封装库,包括原理图库和PCB库。适合制作Stm32PCB使用
    • AD9833 STM32 测试程序.rar
      基于stm32f103的ad9833初始化程序,采用keil5平台编程