欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于STM32的FDC2214驅動源碼
[打印本頁]
作者:
古典風格的
時間:
2018-8-14 19:55
標題:
基于STM32的FDC2214驅動源碼
實驗器材:
STM32F407開發板
硬件資源:
1,DS0(連接在PF9) LED
2,DS1(連接在PF10)
3.SDA---PB9
4.SCL---PB8
5.SD---PE1
6.ADDR---PE0
7.INTB--- 懸空
FDC2214的stm32單片機源程序如下:
/*******************************************************************************************
開發平臺:STM32F407ZET6
功能說明:FDC2214傳感器測試
單 位:湖北汽車工業學院電氣與信息工程學院
*******************************************************************************************/
#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);//設置時鐘,168Mhz
delay_init(168); //初始化延時函數
I2C_Init(); //I2C初始化
LED_Init(); //初始化LED時鐘
fdc2214_Init(); //FDC2214初始化
//LED0 = 0;
while(1)
{
LED1 = 0;
temp=FDC_read_16bit(0x1A);
// temp =
printf("%d\r\n",result);
delay_ms(500);
}
}
復制代碼
/*******************************************************************************************
開發平臺:STM32F407ZET6
功能說明:FDC2214傳感器讀寫數據
修改日期:
單 位:湖北汽車工業學院電氣與信息工程學院
*******************************************************************************************/
#include "fdc2214.h"
#include "delay.h"
#include "i2c.h"
#include "usart.h"
#include "led.h"
#include "FDC_cmd.h"
//#define slaver_addr 必須聲明
//讀Channel x 的轉換結果(值)
u16 FDC_read_CHx(u8 CHx)
{
u8 reg_addr1 = 0; //MSB地址
u8 reg_addr = 0; //LSB地址
u16 data = 0;//接收到的數據
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; //輸入錯誤
}
//printf("%d \r\n",LCD_read_16bit(reg_addr1));
//printf("%d \r\n",LCD_read_16bit(reg_addr)); //不知道LSB寄存器有什么用,手冊也沒見有
data = FDC_read_16bit(reg_addr1); //讀取寄存器值
data = data & 0x0FFF; //轉換結果在 [11:0],把它取出來
return data;
}
//fdc2214初始化(寄存器的配置)重點
void fdc2214_Init()
{
I2C_Init(); //I2C初始化
FDC_SD = 0; // 上電。0---退出睡眠模式,1---進入休眠模式 pin---PE1
FDC_ADDR = 1; // 選擇FDC地址 0---0x2a 1---0x2b pin---PE0
delay_ms(500); //延時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); //設置為單通道模式
fdc2214_write(DRIVE_CURRENT_CH0,0x7C00); //傳感器驅動電流配置
fdc2214_write(SETTLECOUNT_CH0,0x000A); //傳感器建立最短時間
fdc2214_write(RCOUNT_CH0,0x2089); //計數器寄存器
fdc2214_write(MUX_CONFIG,0xC20D); //多通道模式
fdc2214_write(ERROR_CONFIG,0x0000);
fdc2214_write(CONFIG,0x1401); //使用內部晶振
}
/* 向 FDC2214 寫數據 */
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 讀數據 */
unsigned int FDC2214_Read(int firstAddr,int SecondAddr)
{
u8 FDC2214_W;
u8 FDC2214_R;
unsigned int temp; //定義一個變量,作為28位數據的返回值
u8 result[4]; //定義4個8位的數據結果
I2C_Start(); //I2C開始
I2C_Send_Byte(FDC2214_W); //I2C發送一個字節,對FDC2214進行尋址,并將后續為寫操作(FDC2214_W)
while(I2C_Wait_Ack()); //等待應答
I2C_Send_Byte(firstAddr); //發送一個字節,選中第一個寄存器(地址),用于存儲高12位數據
while(I2C_Wait_Ack());
I2C_Stop();
I2C_Start();
I2C_Send_Byte(FDC2214_R); //I2C發送一個字節,對FDC2214進行尋址,并將后續為讀操作(FDC2214_R)
while(I2C_Wait_Ack());
result[0]=I2C_Read_Byte(1); //1:有應答
result[0] = result[0]<<4; //先左移4位,將第一個數據寄存器的高4位(非數據位)移出去
result[0] = result[0]>>4; //再右移4位
result[1]=I2C_Read_Byte(1); //temp=高字節+低字節 此時已經將12位數據讀出
I2C_Stop();
I2C_Start();
I2C_Send_Byte(FDC2214_W); //I2C發送一個字節,對FDC2214進行尋址,并將后續為寫操作(FDC2214_W)
while(I2C_Wait_Ack());
I2C_Send_Byte(SecondAddr); //發送一個字節,選中第二個寄存器(地址),用于存儲低16位數據
while(I2C_Wait_Ack());
I2C_Start();
I2C_Send_Byte(FDC2214_R); //I2C發送一個字節,對FDC2214進行尋址,并將后續為讀操作(FDC2214_R)
while(I2C_Wait_Ack()); //接下來讀取低16位數據
result[2]=I2C_Read_Byte(1); //讀取出高8位
result[3]=I2C_Read_Byte(1); //讀取出低8位
//將讀取出來的4次數據進行整合
temp = (unsigned int)(((result[0]<< 24) | (result[1] << 16) | (result[2] << 8) | (result[3] & 0xff))); //將4次讀出來的數據進行整合
return(temp);
}
復制代碼
所有資料51hei提供下載:
FDC2214(LJA).rar
(149.56 KB, 下載次數: 89)
2018-8-16 02:57 上傳
點擊文件名下載附件
STM32的
下載積分: 黑幣 -5
作者:
lwdlwd
時間:
2018-9-14 10:17
先下載看看
作者:
魚主~
時間:
2019-7-10 16:37
大佬謝謝
作者:
魚主~
時間:
2019-7-10 16:38
大佬謝謝
作者:
hfdem
時間:
2019-8-8 13:42
正在找這個
作者:
ymyzfsgfx
時間:
2019-8-9 15:53
hfdem 發表于 2019-8-8 13:42
正在找這個
這個源代碼可以讓2214的數據傳到32里面么?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1