|
實(shí)驗(yàn)器材:
STM32F407開(kāi)發(fā)板
硬件資源:
1,DS0(連接在PF9) LED
2,DS1(連接在PF10)
3.SDA---PB9
4.SCL---PB8
5.SD---PE1
6.ADDR---PE0
7.INTB--- 懸空
FDC2214的stm32單片機(jī)源程序如下:
- /*******************************************************************************************
- 開(kāi)發(fā)平臺(tái):STM32F407ZET6
- 功能說(shuō)明:FDC2214傳感器測(cè)試
- 單 位:湖北汽車工業(yè)學(xué)院電氣與信息工程學(xué)院
- *******************************************************************************************/
- #include "sys.h"
- #include "delay.h"
- #include "led.h"
- #include "i2c.h"
- #include "fdc2214.h"
-
- int main(void)
- {
- int result=0;
- u32 temp = 0;
- Stm32_Clock_Init(336,8,2,7);//設(shè)置時(shí)鐘,168Mhz
- delay_init(168); //初始化延時(shí)函數(shù)
- I2C_Init(); //I2C初始化
- LED_Init(); //初始化LED時(shí)鐘
- fdc2214_Init(); //FDC2214初始化
- //LED0 = 0;
- while(1)
- {
- LED1 = 0;
-
- temp=FDC_read_16bit(0x1A);
- // temp =
- printf("%d\r\n",result);
-
- delay_ms(500);
- }
- }
復(fù)制代碼- /*******************************************************************************************
- 開(kāi)發(fā)平臺(tái):STM32F407ZET6
- 功能說(shuō)明:FDC2214傳感器讀寫數(shù)據(jù)
- 修改日期:
- 單 位:湖北汽車工業(yè)學(xué)院電氣與信息工程學(xué)院
- *******************************************************************************************/
- #include "fdc2214.h"
- #include "delay.h"
- #include "i2c.h"
- #include "usart.h"
- #include "led.h"
- #include "FDC_cmd.h"
- //#define slaver_addr 必須聲明
- //讀Channel x 的轉(zhuǎn)換結(jié)果(值)
- u16 FDC_read_CHx(u8 CHx)
- {
- u8 reg_addr1 = 0; //MSB地址
- u8 reg_addr = 0; //LSB地址
- u16 data = 0;//接收到的數(shù)據(jù)
-
- switch(CHx)
- {
- case 0:
- {
- reg_addr1 = DATA_CH0;
- reg_addr = DATA_LSB_CH0;
- }break;
- case 1:
- {
- reg_addr1 = DATA_CH1;
- reg_addr = DATA_LSB_CH1;
- }break;
- case 2:
- {
- reg_addr1 = DATA_CH2;
- reg_addr = DATA_LSB_CH2;
- }break;
- case 3:
- {
- reg_addr1 = DATA_CH3;
- reg_addr = DATA_LSB_CH3;
- }break;
- // data = ;
- default: return 0; //輸入錯(cuò)誤
-
- }
-
- //printf("%d \r\n",LCD_read_16bit(reg_addr1));
- //printf("%d \r\n",LCD_read_16bit(reg_addr)); //不知道LSB寄存器有什么用,手冊(cè)也沒(méi)見(jiàn)有
- data = FDC_read_16bit(reg_addr1); //讀取寄存器值
- data = data & 0x0FFF; //轉(zhuǎn)換結(jié)果在 [11:0],把它取出來(lái)
-
- return data;
- }
- //fdc2214初始化(寄存器的配置)重點(diǎn)
- void fdc2214_Init()
- {
- I2C_Init(); //I2C初始化
- FDC_SD = 0; // 上電。0---退出睡眠模式,1---進(jìn)入休眠模式 pin---PE1
- FDC_ADDR = 1; // 選擇FDC地址 0---0x2a 1---0x2b pin---PE0
- delay_ms(500); //延時(shí)500ms
-
- FDC_write_16bit(RCOUNT_CH0,0x8329);//ADDRESS:0x08
- FDC_write_16bit(RCOUNT_CH1,0x8329);//ADDRESS:0x09
- FDC_write_16bit(RCOUNT_CH2,0x8329);//ADDRESS:0x0A
- FDC_write_16bit(RCOUNT_CH3,0x8329);//ADDRESS:0x0B
-
- FDC_write_16bit(SETTLECOUNT_CH0,0x000A); //ADDRESS:0x10
- FDC_write_16bit(SETTLECOUNT_CH1,0x000A); //ADDRESS:0x11
- FDC_write_16bit(SETTLECOUNT_CH2,0x000A); //ADDRESS:0x12
- FDC_write_16bit(SETTLECOUNT_CH3,0x000A); //ADDRESS:0x13
-
- FDC_write_16bit(CLOCK_DIVIDERS_CH0,0x2002);//ADDRESS:0x14
- FDC_write_16bit(CLOCK_DIVIDERS_CH1,0x2002);//ADDRESS:0x15
- FDC_write_16bit(CLOCK_DIVIDERS_CH2,0x2002);//ADDRESS:0x16
- FDC_write_16bit(CLOCK_DIVIDERS_CH3,0x2002);//ADDRESS:0x17
-
- FDC_write_16bit(ERROR_CONFIG,0x0000); //ADDRESS:0x19
-
- FDC_write_16bit(MUX_CONFIG,0xC20D); //ADDRESS:0x1B
-
- FDC_write_16bit(DRIVE_CURRENT_CH0,0x7C00); //ADDRESS:0x1E
- FDC_write_16bit(DRIVE_CURRENT_CH1,0x7C00); //ADDRESS:0x1F
- FDC_write_16bit(DRIVE_CURRENT_CH2,0x7C00); //ADDRESS:0x20
- FDC_write_16bit(DRIVE_CURRENT_CH3,0x7C00); //ADDRESS:0x21
- FDC_write_16bit(CONFIG,0x1601); //bit13 清零 退出睡眠模式
-
-
- fdc2214_write(CLOCK_DIVIDERS_CH0,0x2001); //設(shè)置為單通道模式
- fdc2214_write(DRIVE_CURRENT_CH0,0x7C00); //傳感器驅(qū)動(dòng)電流配置
- fdc2214_write(SETTLECOUNT_CH0,0x000A); //傳感器建立最短時(shí)間
- fdc2214_write(RCOUNT_CH0,0x2089); //計(jì)數(shù)器寄存器
- fdc2214_write(MUX_CONFIG,0xC20D); //多通道模式
- fdc2214_write(ERROR_CONFIG,0x0000);
- fdc2214_write(CONFIG,0x1401); //使用內(nèi)部晶振
-
-
- }
-
-
- /* 向 FDC2214 寫數(shù)據(jù) */
- void fdc2214_write(int dateAddr,int date)
- {
- u16 FDC2214_Address;
-
- unsigned char REG_data_H=0,REG_data_L=0;
- REG_data_H=(unsigned char) (date&0XFF);
- REG_data_L=(unsigned char) ((date&0XFF00)>>8);
-
- I2C_Start();
- I2C_Send_Byte(FDC2214_Address);
- while(I2C_Wait_Ack());
- LED0=0;
-
- I2C_Send_Byte(dateAddr);
- while(I2C_Wait_Ack());
-
- I2C_Send_Byte(REG_data_H);
- while(I2C_Wait_Ack());
-
- I2C_Send_Byte(REG_data_L);
- while(I2C_Wait_Ack());
-
- I2C_Stop();
- }
- /* 從 FDC2214 讀數(shù)據(jù) */
- unsigned int FDC2214_Read(int firstAddr,int SecondAddr)
- {
- u8 FDC2214_W;
- u8 FDC2214_R;
- unsigned int temp; //定義一個(gè)變量,作為28位數(shù)據(jù)的返回值
- u8 result[4]; //定義4個(gè)8位的數(shù)據(jù)結(jié)果
- I2C_Start(); //I2C開(kāi)始
- I2C_Send_Byte(FDC2214_W); //I2C發(fā)送一個(gè)字節(jié),對(duì)FDC2214進(jìn)行尋址,并將后續(xù)為寫操作(FDC2214_W)
- while(I2C_Wait_Ack()); //等待應(yīng)答
- I2C_Send_Byte(firstAddr); //發(fā)送一個(gè)字節(jié),選中第一個(gè)寄存器(地址),用于存儲(chǔ)高12位數(shù)據(jù)
- while(I2C_Wait_Ack());
- I2C_Stop();
-
- I2C_Start();
- I2C_Send_Byte(FDC2214_R); //I2C發(fā)送一個(gè)字節(jié),對(duì)FDC2214進(jìn)行尋址,并將后續(xù)為讀操作(FDC2214_R)
- while(I2C_Wait_Ack());
- result[0]=I2C_Read_Byte(1); //1:有應(yīng)答
- result[0] = result[0]<<4; //先左移4位,將第一個(gè)數(shù)據(jù)寄存器的高4位(非數(shù)據(jù)位)移出去
- result[0] = result[0]>>4; //再右移4位
- result[1]=I2C_Read_Byte(1); //temp=高字節(jié)+低字節(jié) 此時(shí)已經(jīng)將12位數(shù)據(jù)讀出
- I2C_Stop();
-
- I2C_Start();
- I2C_Send_Byte(FDC2214_W); //I2C發(fā)送一個(gè)字節(jié),對(duì)FDC2214進(jìn)行尋址,并將后續(xù)為寫操作(FDC2214_W)
- while(I2C_Wait_Ack());
- I2C_Send_Byte(SecondAddr); //發(fā)送一個(gè)字節(jié),選中第二個(gè)寄存器(地址),用于存儲(chǔ)低16位數(shù)據(jù)
- while(I2C_Wait_Ack());
-
- I2C_Start();
- I2C_Send_Byte(FDC2214_R); //I2C發(fā)送一個(gè)字節(jié),對(duì)FDC2214進(jìn)行尋址,并將后續(xù)為讀操作(FDC2214_R)
- while(I2C_Wait_Ack()); //接下來(lái)讀取低16位數(shù)據(jù)
- result[2]=I2C_Read_Byte(1); //讀取出高8位
- result[3]=I2C_Read_Byte(1); //讀取出低8位
- //將讀取出來(lái)的4次數(shù)據(jù)進(jìn)行整合
- temp = (unsigned int)(((result[0]<< 24) | (result[1] << 16) | (result[2] << 8) | (result[3] & 0xff))); //將4次讀出來(lái)的數(shù)據(jù)進(jìn)行整合
- return(temp);
- }
復(fù)制代碼
所有資料51hei提供下載:
FDC2214(LJA).rar
(149.56 KB, 下載次數(shù): 89)
2018-8-16 02:57 上傳
點(diǎn)擊文件名下載附件
STM32的 下載積分: 黑幣 -5
|
|