資源簡介
上傳一個AD7689驅動,STM32 SPI驅動程序。AD采樣驅動。

代碼片段和文件信息
#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(GPIOAGPIO_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(SPI1ENABLE);
}?
//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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5255??2016-07-13?10:54??AD7689.c
?????文件???????4386??2016-09-26?16:44??AD7689.h
-----------?---------??----------?-----??----
?????????????????9641????????????????????2
- 上一篇:solr4.9安裝使用手冊
- 下一篇:GB-T2260-2017年區劃代碼.pdf
評論
共有 條評論