stm32_tm7705_ad7705_AD转换程序.docx_第1页
stm32_tm7705_ad7705_AD转换程序.docx_第2页
stm32_tm7705_ad7705_AD转换程序.docx_第3页
stm32_tm7705_ad7705_AD转换程序.docx_第4页
stm32_tm7705_ad7705_AD转换程序.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*spi_tm7705.h*/#ifndef _SPI_TM7705_H#define _SPI_TM7705_H#include stm32f10x.h#include SysTick.h/* 片选信号,拉低为选中 */#define CS1_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_4)#define CS1_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_4)#define CS2_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_0)#define CS2_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_0)#define CS3_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_1)#define CS3_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_1)#define CS4_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_5)#define CS4_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_5)/* DRDY拉低为可以读取*/#define DRDY1_LOW()GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)#define DRDY2_LOW()GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13)#define DRDY3_LOW()GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14)#define DRDY4_LOW()GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15)void SPI_TM7705_Init(void);u8 SPI1_ReadWriteByte(u8 TxData);void TM7705_Init(void);void ReadAD(void);#endif /* _SPI_TM7705_H */*spi_tm7705.h*/*spi_tm7705.c*/* * * 文件名 :spi_tm7705.c * 描述 :spi_tm7705底层应用函数库 * 实验平台: * 硬件连接 - * * PA5-SPI1-SCK : CLK * PA6-SPI1-MISO : DOUT * PA7-SPI1-MOSI : DIN * *PA4:CS1 * PB0 : CS2 * PB1 : CS3 * PB5 : CS4 * * PB12 : DRDY1 * PB13 : DRDY2 * PB14 : DRDY3 * PB15 : DRDY4 * - * 库版本 :ST3.0.0 */#include spi_tm7705.hu16 ADResult4;/存储AD结果的数组/*初始化SPI1与tm7705的接口*/void SPI_TM7705_Init(void) SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIOA_InitStructure; GPIO_InitTypeDef GPIOB_InitStructure; /* 配置外设时钟 */ /*! SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO, SPI_FLASH_SPI_MISO_GPIO, SPI_FLASH_SPI_DETECT_GPIO and SPI_FLASH_SPI_SCK_GPIO Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); /*! Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /*! AFIO Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /*! Configure SCK */ GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIOA_InitStructure);/ /*! Configure MISO */ GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_6;/ GPIO_Init(GPIOA, &GPIOA_InitStructure);/ /*! Configure MOSI */ GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_7;/ GPIO_Init(GPIOA, &GPIOA_InitStructure); /*! Configure CS1 */ GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_4 ; GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /设置引脚速率为50MHZ GPIO_Init(GPIOA, &GPIOB_InitStructure); /*! Configure CS2,3,4 */ GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5; GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /设置引脚速率为50MHZ GPIO_Init(GPIOB, &GPIOB_InitStructure); /*! Configure DRDY1,2,3,4*/ GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /设置引脚速率为50MHZ GPIO_Init(GPIOB, &GPIOB_InitStructure); /* 将片选信号全部拉高 */ CS1_HIGH(); CS2_HIGH(); CS3_HIGH(); CS4_HIGH(); /* SPI1 configuration */ /设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /设置SPI工作模式:设置为主SPI SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /设置SPI的数据大小:SPI发送接收8位帧结构 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /选择了串行时钟的稳态:时钟悬空高 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; /数据捕获于第二个时钟沿 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /定义波特率预分频的值:波特率预分频值为256 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; /flash读写中这里是4 /指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /CRC值计算的多项式 SPI_InitStructure.SPI_CRCPolynomial = 7; /根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器 SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); /使能SPI外设 /*SPIx 读写一个字节 TxData:要写入的字节 返回值:读取到的字节*/ u8 SPI1_ReadWriteByte(u8 TxData) while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) = RESET); /检查指定的SPI标志位设置与否:发送缓存空标志位 /* Send byte through the SPI1 peripheral */ SPI_I2S_SendData(SPI1, TxData); /通过外设SPI1发送一个数据 /* Wait to receive a byte */ while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) = RESET); /检查指定的SPI标志位设置与否:接受缓存非空标志 /* Return the byte read from the SPI bus */ return SPI_I2S_ReceiveData(SPI1); /返回通过SPIx最近接收的数据 /*tm7705初始化函数*/ void TM7705_Init(void) unsigned char i ; CS1_LOW();Delay_us(10);for(i = 0; i 100; i+) SPI1_ReadWriteByte(0xFF); /持续DIN高电平写操作,恢复tm7705接口 SPI1_ReadWriteByte(0x20) ; /通道1 ,下一个写时钟寄存器 /*2016.1.21实地测试通过*SPI1_ReadWriteByte(0x08) ; /写时钟寄存器设置更新速率为60Hz,使用内部时钟 */SPI1_ReadWriteByte(0x08) ;SPI1_ReadWriteByte(0x10) ; /通道1 ,下一个写设置寄存器 /*2016.1.21实地测试通过*SPI1_ReadWriteByte(0x70) ; /写设置寄存器 ,设置成双极性、无缓冲、增益为2、滤波器不工作、自校准*/SPI1_ReadWriteByte(0x70);Delay_us(10);CS1_HIGH();CS2_LOW();Delay_us(10);for(i = 0; i 100; i+) SPI1_ReadWriteByte(0xFF); /持续DIN高电平写操作,恢复tm7705接口1415 /SPI1_ReadWriteByte(0x20) ; /通道1 ,下一个写时钟寄存器 /SPI1_ReadWriteByte(0x09) ; /写时钟寄存器设置更新速率为60Hz,使用内部时钟 /SPI1_ReadWriteByte(0x10) ; /通道1 ,下一个写设置寄存器 /SPI1_ReadWriteByte(0x78) ; /写设置寄存器 ,设置成双极性、无缓冲、增益为0、滤波器不工作、自校准SPI1_ReadWriteByte(0x20) ; /通道1 ,下一个写时钟寄存器 SPI1_ReadWriteByte(0x08) ; /写时钟寄存器设置更新速率为60Hz,使用内部时钟 SPI1_ReadWriteByte(0x10) ; /通道1 ,下一个写设置寄存器 SPI1_ReadWriteByte(0x70) ;Delay_us(10);CS2_HIGH();CS3_LOW();Delay_us(10);for(i = 0; i 100; i+) SPI1_ReadWriteByte(0xFF); /持续DIN高电平写操作,恢复tm7705接口 SPI1_ReadWriteByte(0x20) ; /通道1 ,下一个写时钟寄存器 SPI1_ReadWriteByte(0x08) ; /写时钟寄存器设置更新速率为60Hz,使用内部时钟 SPI1_ReadWriteByte(0x10) ; /通道1 ,下一个写设置寄存器 SPI1_ReadWriteByte(0x70) ; /写设置寄存器 ,设置成双极性、无缓冲、增益为0、滤波器不工作、自校准Delay_us(10);CS3_HIGH();CS4_LOW();Delay_us(10);for(i = 0; i 2) break; i=0; if(DRDY1_LOW()=0) CS1_LOW(); Delay_us(10); SPI1_ReadWriteByte(0x38);/command for the comm to read data register for channel 1 (dec 56) /read 16bit of data ADC highByte = SPI1_ReadWriteByte(0xFF); lowByte = SPI1_ReadWriteByte(0xFF); adcValue = highByte 2) break; i=0; if(DRDY2_LOW()=0) CS2_LOW(); Delay_us(10); SPI1_ReadWriteByte(0x38);/command for the comm to read data register for channel 1 (dec 56) /read 16bit of data ADC highByte = SPI1_ReadWriteByte(0xFF); lowByte = SPI1_ReadWriteByte(0xFF); adcValue

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论