标题:
STM32驱动FDC2214源程序
[打印本页]
作者:
北海汉子
时间:
2019-6-25 08:51
标题:
STM32驱动FDC2214源程序
是基于32的一款源程序代码,根据不同显示屏自己调节显示
单片机源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "usmart.h"
#include "24cxx.h"
#include "myiic.h"
#include "FDC2X2X_CMD.h"
#include "FDC2214.h"
//**特别注意:使用时SDA、SCL要接4.7K上拉电阻**//
//**寄存器值的读取及电容的计算具体在 FDC2214_read_CHx() 中**//
//要写入到24c02的字符串数组
const u8 TEXT_Buffer[]={"WarShipSTM32 IIC TEST"};
#define SIZE sizeof(TEXT_Buffer)
int main(void)
{
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
KEY_Init();
LED_Init(); //LED端口初始化
LCD_Init();
usmart_dev.init(72); //初始化USMART
AT24CXX_Init(); //IIC初始化
FDC2214_Init();
while(1)
{
// FDC2214_read_CHx(0);
printf("%f pf\r\n",FDC2214_read_CHx(0));
delay_ms(1000);
}
}
复制代码
#include "FDC2214.h"
#include "myiic.h"
#include "delay.h"
#include "FDC2X2X_CMD.h"
#include "usart.h"
u32 data_Fdc2214_H;
u32 data_Fdc2214_L;
float FDC2214_read_CHx(u8 CHx) //读Channel x Conversion Result
{
u8 reg_addr1 = 0; //MSB地址
u8 reg_addr = 0; //LSB地址
u32 data_H = 0; //接收到的数据
u32 data1_L = 0;
float conver = 0; //最终的转换的结果
// static u32 data_H_last = 0;
switch(CHx)
{
case 0:
{
reg_addr1 = LDC13xx16xx_CMD_DATA_MSB_CH0;
reg_addr = LDC13xx16xx_CMD_DATA_LSB_CH0; //不知道LSB寄存器有什么用,手册也没见有
}break;
case 1:
{
reg_addr1 = LDC13xx16xx_CMD_DATA_MSB_CH1;
reg_addr = LDC13xx16xx_CMD_DATA_LSB_CH1;
}break;
case 2:
{
reg_addr1 = LDC13xx16xx_CMD_DATA_MSB_CH2;
reg_addr = LDC13xx16xx_CMD_DATA_LSB_CH2;
}break;
case 3:
{
reg_addr1 = LDC13xx16xx_CMD_DATA_MSB_CH3;
reg_addr = LDC13xx16xx_CMD_DATA_LSB_CH3;
}break;
default: return 0; //输入错误
}
//printf("%d \r\n",LCD_read_16bit(reg_addr1));
//printf("%d \r\n",LCD_read_16bit(reg_addr));
data_H = FDC_read_16bit(reg_addr1); //读取寄存器值 读高位
data1_L = FDC_read_16bit(reg_addr); //读取寄存器值 读低位
// printf("%X \r\n",data_H);
// printf("%X \r\n",data1_L);
//**加入此判断大电容无法使用**//
// if(data_H>400)
// {
// data_H_last = data_H;
// conver = ( ((data_H & 0x0FFF)<<16)|(data1_L) ); //融合结果
// }
// else
// {
// conver = ( ((data_H_last & 0x0FFF)<<16)|(data1_L) ); //融合结果
//
// }
conver = ( ((data_H & 0x0FFF)<<16)|(data1_L) ); //融合结果
data_Fdc2214_H = data_H;
data_Fdc2214_L = data1_L;
//***注意Init中各通道寄存器0x10-0x17的时钟分频***//
//*******以下四步计算根据datasheet P19公式*******//
conver = (conver * 40000000.0F)/268435456.0F;//得到F(sensorx)
conver = conver * 2.0F *3.1515926F;
conver = 1.0F/((conver * conver) * 0.000018F);
conver = conver - 0.000000000033F;
conver = conver * 1000000000000.0F;//F转换pF;
return conver;
}
void FDC2214_Init(void) //初始化LDC1314和I2C
{
IIC_Init(); //IIC初始化
LDC_ADDR = 0; //LDC的7bit地址为0X2A,注意是7bit 即 0101 010_ 最低位为读写位
LDC_SD = 0; //退出Shutdown Mode
delay_ms(500); //延时500ms
//根据时间要求(100 SPS)计算的参考计数分辨率要求
FDC_write_16bit(LDC13xx16xx_CMD_REF_COUNT_CH0,0Xffff);
FDC_write_16bit(LDC13xx16xx_CMD_REF_COUNT_CH1,0Xffff);
FDC_write_16bit(LDC13xx16xx_CMD_REF_COUNT_CH2,0Xffff);
FDC_write_16bit(LDC13xx16xx_CMD_REF_COUNT_CH3,0Xffff);
FDC_write_16bit(LDC13xx16xx_CMD_SETTLE_COUNT_CH0,0X0400);
FDC_write_16bit(LDC13xx16xx_CMD_SETTLE_COUNT_CH1,0X0400);
FDC_write_16bit(LDC13xx16xx_CMD_SETTLE_COUNT_CH2,0X0400);
FDC_write_16bit(LDC13xx16xx_CMD_SETTLE_COUNT_CH3,0X0400);
FDC_write_16bit(LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH0,0X1001);
FDC_write_16bit(LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH1,0X1001);
FDC_write_16bit(LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH2,0X1001);
FDC_write_16bit(LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH3,0X1001);
FDC_write_16bit(LDC13xx16xx_CMD_ERROR_CONFIG,0X0001);
FDC_write_16bit(LDC13xx16xx_CMD_MUX_CONFIG,0x820D);
FDC_write_16bit(LDC13xx16xx_CMD_DRIVE_CURRENT_CH0,0x8c40);
FDC_write_16bit(LDC13xx16xx_CMD_DRIVE_CURRENT_CH1,0x8c40);
FDC_write_16bit(LDC13xx16xx_CMD_DRIVE_CURRENT_CH2,0x8c40);
FDC_write_16bit(LDC13xx16xx_CMD_DRIVE_CURRENT_CH3,0x8c40);
FDC_write_16bit(LDC13xx16xx_CMD_CONFIG,0x1e01); //bit13 清零 退出睡眠模式
}
复制代码
所有资料51hei提供下载:
FDC2214.7z
(243.82 KB, 下载次数: 31)
2019-6-25 17:13 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
jiangkeqin_sy
时间:
2019-7-15 17:09
要学习啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1