stm32_tm7705_ad7705_AD轉(zhuǎn)換程序_第1頁
stm32_tm7705_ad7705_AD轉(zhuǎn)換程序_第2頁
stm32_tm7705_ad7705_AD轉(zhuǎn)換程序_第3頁
stm32_tm7705_ad7705_AD轉(zhuǎn)換程序_第4頁
stm32_tm7705_ad7705_AD轉(zhuǎn)換程序_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/*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_

2、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(GPI

3、OB, 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);#en

4、dif /* _SPI_TM7705_H */*spi_tm7705.h*/*spi_tm7705.c*/* * * 文件名 :spi_tm7705.c * 描述 :spi_tm7705底層應(yīng)用函數(shù)庫 * 實驗平臺: * 硬件連接 - * * 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 * - *

5、 庫版本 :ST3.0.0 */#include "spi_tm7705.h"u16 ADResult4;/存儲AD結(jié)果的數(shù)組/*初始化SPI1與tm7705的接口*/void SPI_TM7705_Init(void) SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIOA_InitStructure; GPIO_InitTypeDef GPIOB_InitStructure; /* 配置外設(shè)時鐘 */ /*!< SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO,

6、 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 */ R

7、CC_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);/ /*!< C

8、onfigure 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_InitS

9、tructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /設(shè)置引腳速率為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; GPIO

10、B_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /設(shè)置引腳速率為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

11、 = GPIO_Speed_50MHz; /設(shè)置引腳速率為50MHZ GPIO_Init(GPIOB, &GPIOB_InitStructure); /* 將片選信號全部拉高 */ CS1_HIGH(); CS2_HIGH(); CS3_HIGH(); CS4_HIGH(); /* SPI1 configuration */ /設(shè)置SPI單向或者雙向的數(shù)據(jù)模式:SPI設(shè)置為雙線雙向全雙工 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /設(shè)置SPI工作模式:設(shè)置為主SPI SPI_InitStruct

12、ure.SPI_Mode = SPI_Mode_Master; /設(shè)置SPI的數(shù)據(jù)大小:SPI發(fā)送接收8位幀結(jié)構(gòu) SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /選擇了串行時鐘的穩(wěn)態(tài):時鐘懸空高 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; /數(shù)據(jù)捕獲于第二個時鐘沿 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內(nèi)部NSS信號有SSI位控制 SPI_InitStructure.SPI_NSS =

13、 SPI_NSS_Soft; /定義波特率預(yù)分頻的值:波特率預(yù)分頻值為256 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; /flash讀寫中這里是4 /指定數(shù)據(jù)傳輸從MSB位還是LSB位開始:數(shù)據(jù)傳輸從MSB位開始 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /CRC值計算的多項式 SPI_InitStructure.SPI_CRCPolynomial = 7; /根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器 SPI_I

14、nit(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); /使能SPI外設(shè) /*SPIx 讀寫一個字節(jié) TxData:要寫入的字節(jié) 返回值:讀取到的字節(jié)*/ u8 SPI1_ReadWriteByte(u8 TxData) while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) = RESET); /檢查指定的SPI標志位設(shè)置與否:發(fā)送緩存空標志位 /* Send byte through the SPI1 peripheral */ SPI_I2S_

15、SendData(SPI1, TxData); /通過外設(shè)SPI1發(fā)送一個數(shù)據(jù) /* Wait to receive a byte */ while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) = RESET); /檢查指定的SPI標志位設(shè)置與否:接受緩存非空標志 /* Return the byte read from the SPI bus */ return SPI_I2S_ReceiveData(SPI1); /返回通過SPIx最近接收的數(shù)據(jù) /*tm7705初始化函數(shù)*/ void TM7705_Init(void) unsigne

16、d char i ; CS1_LOW();Delay_us(10);for(i = 0; i < 100; i+) SPI1_ReadWriteByte(0xFF); /持續(xù)DIN高電平寫操作,恢復(fù)tm7705接口 SPI1_ReadWriteByte(0x20) ; /通道1 ,下一個寫時鐘寄存器 /*2016.1.21實地測試通過*SPI1_ReadWriteByte(0x08) ; /寫時鐘寄存器設(shè)置更新速率為60Hz,使用內(nèi)部時鐘 */SPI1_ReadWriteByte(0x08) ;SPI1_ReadWriteByte(0x10) ; /通道1 ,下一個寫設(shè)置寄存器 /*20

17、16.1.21實地測試通過*SPI1_ReadWriteByte(0x70) ; /寫設(shè)置寄存器 ,設(shè)置成雙極性、無緩沖、增益為2、濾波器不工作、自校準*/SPI1_ReadWriteByte(0x70);Delay_us(10);CS1_HIGH();CS2_LOW();Delay_us(10);for(i = 0; i < 100; i+) SPI1_ReadWriteByte(0xFF); /持續(xù)DIN高電平寫操作,恢復(fù)tm7705接口1415 /SPI1_ReadWriteByte(0x20) ; /通道1 ,下一個寫時鐘寄存器 /SPI1_ReadWriteByte(0x09)

18、 ; /寫時鐘寄存器設(shè)置更新速率為60Hz,使用內(nèi)部時鐘 /SPI1_ReadWriteByte(0x10) ; /通道1 ,下一個寫設(shè)置寄存器 /SPI1_ReadWriteByte(0x78) ; /寫設(shè)置寄存器 ,設(shè)置成雙極性、無緩沖、增益為0、濾波器不工作、自校準SPI1_ReadWriteByte(0x20) ; /通道1 ,下一個寫時鐘寄存器 SPI1_ReadWriteByte(0x08) ; /寫時鐘寄存器設(shè)置更新速率為60Hz,使用內(nèi)部時鐘 SPI1_ReadWriteByte(0x10) ; /通道1 ,下一個寫設(shè)置寄存器 SPI1_ReadWriteByte(0x70)

19、;Delay_us(10);CS2_HIGH();CS3_LOW();Delay_us(10);for(i = 0; i < 100; i+) SPI1_ReadWriteByte(0xFF); /持續(xù)DIN高電平寫操作,恢復(fù)tm7705接口 SPI1_ReadWriteByte(0x20) ; /通道1 ,下一個寫時鐘寄存器 SPI1_ReadWriteByte(0x08) ; /寫時鐘寄存器設(shè)置更新速率為60Hz,使用內(nèi)部時鐘 SPI1_ReadWriteByte(0x10) ; /通道1 ,下一個寫設(shè)置寄存器 SPI1_ReadWriteByte(0x70) ; /寫設(shè)置寄存器 ,

20、設(shè)置成雙極性、無緩沖、增益為0、濾波器不工作、自校準Delay_us(10);CS3_HIGH();CS4_LOW();Delay_us(10);for(i = 0; i < 100; i+) SPI1_ReadWriteByte(0xFF); /持續(xù)DIN高電平寫操作,恢復(fù)tm7705接口 SPI1_ReadWriteByte(0x20) ; /通道1 ,下一個寫時鐘寄存器 SPI1_ReadWriteByte(0x08) ; /寫時鐘寄存器設(shè)置更新速率為60Hz,使用內(nèi)部時鐘 SPI1_ReadWriteByte(0x10) ; /通道1 ,下一個寫設(shè)置寄存器 SPI1_ReadWr

21、iteByte(0x70) ; /寫設(shè)置寄存器 ,設(shè)置成雙極性、無緩沖、增益為0、濾波器不工作、自校準Delay_us(10);CS4_HIGH(); /*讀數(shù)*/void ReadAD(void)/ char DataNotReady = 0x80; char highByte; char lowByte; u16 adcValue; float adcValue1; int ret; int i=0; /TM7705_Init(); Delay_us(10); /ad1 while(DRDY1_LOW()=1) i+=1; Delay_ms(50); if (i>2) break;

22、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 << 8; adcValue = adcValue | lowByte;

23、/*2016.1.21實地測試通過* *adcValue1=(float)adcValue/65535*1.225; *ret=(int)(adcValue1*1000); */ adcValue1=(float)adcValue/3; ret=(int)(adcValue1); ADResult0=ret; Delay_us(10); CS1_HIGH(); /ad2 while(DRDY2_LOW()=1) i+=1; Delay_ms(50); if (i>2) break; i=0; if(DRDY2_LOW()=0) CS2_LOW(); Delay_us(10); SPI1_

24、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 << 8; adcValue = adcValue | lowByte; adcValue1=(float)adcValue/3; ret=(int)(adcValue1); ADResult1=ret; Delay_us(10); CS2_HIGH(); /ad3 while(DRDY3_LOW()=1) i+=1; Delay_ms(50); if (i>2) break; i=0; if(DRDY3_LOW()=0) CS3_LOW(); Delay_us(10); S

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論