找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3045|回复: 1
收起左侧

TI公司芯片LDC1314 STM32测试程序

[复制链接]
ID:523552 发表于 2019-7-23 10:01 | 显示全部楼层 |阅读模式
最近使用STM32F103编写的LDC1314多通道测试程序,里面包含LDC1314的数据手册,请认真读取分析,特别是寄存器操作那一块的内容。

单片机源程序如下:
  1. #include "ldc1314.h"
  2. #include "myiic.h"
  3. #include "delay.h"

  4. u16 LDC1314_Read2Byte(u8 reg_addr)
  5. {
  6.      u16 reg_data=0;
  7.      u16 temp=0;
  8.      IIC_Start();
  9.      IIC_Send_Byte(WRITE_ADDR);
  10.      if(IIC_Wait_Ack())return 0;
  11.      IIC_Send_Byte(reg_addr);
  12.            if(IIC_Wait_Ack())return 0;
  13.      IIC_Start();
  14.            IIC_Send_Byte(READ_ADDR);
  15.      if(IIC_Wait_Ack())return 0;
  16.      reg_data= IIC_Read_Byte(1);
  17.      reg_data=(reg_data<<8)&0xFF00;
  18.      temp=IIC_Read_Byte(0);
  19.      IIC_Stop();
  20.         
  21.           reg_data|=temp;
  22.     return reg_data;
  23. }

  24. u8 LDC1314_Write2Byte(u8 reg_addr,u16 reg_data)
  25. {        
  26.    u8 data_high=(u8)((reg_data&0xFF00)>>8);
  27.    u8 data_low=(u8)reg_data&0x00FF;
  28.          IIC_Start();
  29.          IIC_Send_Byte(WRITE_ADDR);   
  30.    if(IIC_Wait_Ack())return 0;
  31.    IIC_Send_Byte(reg_addr );   
  32.          if(IIC_Wait_Ack())return 0;        
  33.    IIC_Send_Byte(data_high);
  34.    if(IIC_Wait_Ack())return 0;        
  35.    IIC_Send_Byte(data_low);
  36.    if(IIC_Wait_Ack())return 0;                 
  37.    IIC_Stop();
  38.          delay_ms(5);
  39.    return 1;
  40. }

  41. void LDC1314_Init_Multi()
  42. {      
  43.    LDC1314_Write2Byte(RCOUNT0,0XFFFF);
  44.    LDC1314_Write2Byte(RCOUNT1,0XFFFF);
  45.          LDC1314_Write2Byte(RCOUNT2,0XFFFF);
  46.    LDC1314_Write2Byte(RCOUNT3,0XFFFF);
  47.         
  48.          LDC1314_Write2Byte(SETTLECOUNT0,0x000A);
  49.    LDC1314_Write2Byte(SETTLECOUNT1,0x000A);
  50.    LDC1314_Write2Byte(SETTLECOUNT2,0x000A);
  51.          LDC1314_Write2Byte(SETTLECOUNT3,0x000A);
  52.         
  53.    LDC1314_Write2Byte(CLK_DIVIDERS0,0x2002);
  54.    LDC1314_Write2Byte(CLK_DIVIDERS1,0x2002);
  55.    LDC1314_Write2Byte(CLK_DIVIDERS2,0x2002);
  56.    LDC1314_Write2Byte(CLK_DIVIDERS3,0x2002);
  57.         
  58.    LDC1314_Write2Byte(ERROR_CONFIG,0X0000);  
  59.    LDC1314_Write2Byte(RESET_DEV,0x0000);
  60.    
  61. //   LDC1314_Write2Byte(MUX_CONFIG,0X420C);  
  62.    LDC1314_Write2Byte(MUX_CONFIG,0xC20D);
  63.         
  64.    LDC1314_Write2Byte(DRIVE_CURRENT0,0xF800);
  65.    LDC1314_Write2Byte(DRIVE_CURRENT1,0xF800);
  66.    LDC1314_Write2Byte(DRIVE_CURRENT2,0xF800);
  67.    LDC1314_Write2Byte(DRIVE_CURRENT3,0xF800);
  68.       
  69.    LDC1314_Write2Byte(CONFIG,0x1401);

  70. }

  71. void LDC1314_Init_single()
  72. {
  73.    LDC1314_Write2Byte(RCOUNT0,0xFFFF);
  74.    LDC1314_Write2Byte(SETTLECOUNT0,0x0000);
  75.    LDC1314_Write2Byte(CLK_DIVIDERS0,0x2002);
  76.    LDC1314_Write2Byte(RESET_DEV,0x0000);     
  77.    LDC1314_Write2Byte(DRIVE_CURRENT0,0xF800);
  78.    LDC1314_Write2Byte(CONFIG,0x1441);       //大于1.5mA电流(仅通道0使用)
  79. }

  80. u16 LDC_read_CHx(u8 CHx)        //读Channel x Conversion Result
  81. {
  82.         u8 reg_addr1 = 0;        
  83.         u16 val = 0;                                
  84.         switch(CHx)
  85.         {
  86.                 case 0:
  87.                 {
  88.                         reg_addr1 = DATA0_MSB;
  89.                 }break;
  90.                 case 1:
  91.                 {
  92.                         reg_addr1 = DATA1_MSB;
  93.                 }break;
  94.                 case 2:
  95.                 {
  96.                         reg_addr1 = DATA2_MSB;
  97.                 }break;
  98.                 case 3:
  99.                 {
  100.                         reg_addr1 = DATA3_MSB;
  101.                 }break;
  102.                 default: return 0;        //输入错误
  103.         }
  104.         
  105.         val = LDC1314_Read2Byte(reg_addr1);        //读取寄存器值
  106.         return val;        

  107. }
  108.         
复制代码

所有资料51hei提供下载:
LDC1314 模块.7z (1.69 MB, 下载次数: 56)
回复

使用道具 举报

ID:848354 发表于 2021-3-13 01:27 | 显示全部楼层
请问这个WRITE_ADDR为什么是0x55,不是0x2A?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表