OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7464|回复: 1

STM32F4 AD7694 SPI驱动

[复制链接]

7

主题

10

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2012-9-20
在线时间
4 小时
发表于 2015-5-15 13:31:26 | 显示全部楼层 |阅读模式
void sys_spiInit(void)
{

    RCC->APB2ENR |= 1<<12;  //使能SPI1时钟
    SPI1->CR1|=0<<11;//8bit数据格式  
    SPI1->CR1|=0<<10;//全双工模式  
    SPI1->CR1|=1<<9; //软件nss 管理
    SPI1->CR1|=1<<8;
    SPI1->CR1|=0<<7; //MSBFirst  
    SPI1->CR1|=7<<3; //设置时钟Fsck = Fcpu/256
    SPI1->CR1|=1<<2; //SPI 主机
    SPI1->CR1|=0<<1; //空闲模式下 SCK为 0 CPOL=0
    SPI1->CR1|=0<<0; //数据采样从第1个时间边沿开始
    SPI1->CR1|=1<<6; //使能SPI1

}

u8 sys_spiSendRead(u8 byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
  /* Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(SPI1, byte);
  /* Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
  /* Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(SPI1);
}

uint16_t ad7694_ReadData(void)
{
  unsigned long DataL = 0;
  unsigned long DataH = 0;
  unsigned long Ret = 0;
 
  GPIO_SetBits(GPIOA,GPIO_Pin_7);
 
  delay_us(6);
 
  GPIO_ResetBits(GPIOA,GPIO_Pin_7);  

 
  DataH = sys_spiSendRead(0xFF);
  DataH = DataH << 8;
  DataL = sys_spiSendRead(0xFF);
  Ret = DataH | DataL;
  return(Ret) ;   

}


AD7694是一个非常哈的A/D转换芯片,加上ADR431基准能够实现非常高的精度采集!(PS:STMF405RG单片机如果使用ST官方库 会导致SPI时钟信号木有,407却可以,所以我直接用寄存器写的)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-5-15 23:04:03 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 15:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表