久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6601|回復: 5
打印 上一主題 下一主題
收起左側

STM32F103ZET的板子AD7705模塊及相關代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:279951 發表于 2018-1-27 12:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  某寶老板給的代碼,經過我稍加修改,使之更適合于STM32F103ZET的板子。很不錯的代碼,值得收藏。

#include "AD7705.h"
#include "delay.h"
#include "usart.h"

#define SOFT_SPI        /* 定義此行表示使用GPIO模擬SPI接口 */
//#define HARD_SPI        /* 定義此行表示使用CPU的硬件SPI接口 */

/* 通道1和通道2的增益,輸入緩沖,極性 */
#define __CH1_GAIN_BIPOLAR_BUF    (GAIN_1 | UNIPOLAR | BUF_EN)
#define __CH2_GAIN_BIPOLAR_BUF    (GAIN_1 | UNIPOLAR | BUF_EN)

/*
    TM7705模塊可以直接插到STM32-V5開發板nRF24L01模塊的排母接口上。

    TM7705模塊   STM32F407開發板
      SCK   ------  PB13/SPI2_SCK
      DOUT  ------  PB14/SPI2_MISO
      DIN   ------  PB15/SPI2_MOSI
      CS    ------  PB12/NRF24L01_CSN
      DRDY  ------  PD8/NRF24L01_IRQ
      RST   ------  PD9/NRF905_TX_EN/NRF24L01_CE/DAC1_OUT    (復位 RESET)
*/

#if !defined(SOFT_SPI) && !defined(HARD_SPI)
     #error "Please define SPI Interface mode : SOFT_SPI or HARD_SPI"
#endif

#ifdef SOFT_SPI        /* 軟件SPI */
    /* 定義GPIO端口 */
    #define RCC_SCK     RCC_APB2Periph_GPIOB
    #define PORT_SCK    GPIOB
    #define PIN_SCK        GPIO_Pin_13

    #define RCC_DIN     RCC_APB2Periph_GPIOB
    #define PORT_DIN    GPIOB
    #define PIN_DIN        GPIO_Pin_15

    #define RCC_DOUT     RCC_APB2Periph_GPIOB
    #define PORT_DOUT    GPIOB
    #define PIN_DOUT    GPIO_Pin_14

    #define RCC_CS         RCC_APB2Periph_GPIOB
    #define PORT_CS        GPIOB
    #define PIN_CS        GPIO_Pin_12

    #define RCC_DRDY     RCC_APB2Periph_GPIOC
    #define PORT_DRDY    GPIOC
    #define PIN_DRDY    GPIO_Pin_7

    #define RCC_RESET     RCC_APB2Periph_GPIOC
    #define PORT_RESET    GPIOC
    #define PIN_RESET    GPIO_Pin_6

    /* 定義口線置0和置1的宏 */
    #define RESET_0()    GPIO_ResetBits(PORT_RESET, PIN_RESET)
    #define RESET_1()    GPIO_SetBits(PORT_RESET, PIN_RESET)

    #define CS_0()        GPIO_ResetBits(PORT_CS, PIN_CS)
    #define CS_1()        GPIO_SetBits(PORT_CS, PIN_CS)

    #define SCK_0()        GPIO_ResetBits(PORT_SCK, PIN_SCK)
    #define SCK_1()        GPIO_SetBits(PORT_SCK, PIN_SCK)

    #define DI_0()        GPIO_ResetBits(PORT_DIN, PIN_DIN)
    #define DI_1()        GPIO_SetBits(PORT_DIN, PIN_DIN)

    #define DO_IS_HIGH()    (GPIO_ReadInputDataBit(PORT_DOUT, PIN_DOUT) == Bit_SET)

    #define DRDY_IS_LOW()    (GPIO_ReadInputDataBit(PORT_DRDY, PIN_DRDY) == Bit_RESET)
#endif

#ifdef HARD_SPI        /* 硬件SPI */
    ;
#endif

/* 通信寄存器bit定義 */
enum
{
    /* 寄存器選擇  RS2 RS1 RS0  */
    REG_COMM    = 0x00,    /* 通信寄存器 */
    REG_SETUP    = 0x10,    /* 設置寄存器 */
    REG_CLOCK    = 0x20,    /* 時鐘寄存器 */
    REG_DATA    = 0x30,    /* 數據寄存器 */
    REG_ZERO_CH1    = 0x60,    /* CH1 偏移寄存器 */
    REG_FULL_CH1    = 0x70,    /* CH1 滿量程寄存器 */
    REG_ZERO_CH2    = 0x61,    /* CH2 偏移寄存器 */
    REG_FULL_CH2    = 0x71,    /* CH2 滿量程寄存器 */

    /* 讀寫操作 */
    WRITE         = 0x00,    /* 寫操作 */
    READ         = 0x08,    /* 讀操作 */

    /* 通道 */
    CH_1        = 0,    /* AIN1+  AIN1- */
    CH_2        = 1,    /* AIN2+  AIN2- */
    CH_3        = 2,    /* AIN1-  AIN1- */
    CH_4        = 3        /* AIN1-  AIN2- */
};

/* 設置寄存器bit定義 */
enum
{
    MD_NORMAL        = (0 << 6),    /* 正常模式 */
    MD_CAL_SELF        = (1 << 6),    /* 自校準模式 */
    MD_CAL_ZERO        = (2 << 6),    /* 校準0刻度模式 */
    MD_CAL_FULL        = (3 << 6),    /* 校準滿刻度模式 */

    GAIN_1            = (0 << 3),    /* 增益 */
    GAIN_2            = (1 << 3),    /* 增益 */
    GAIN_4            = (2 << 3),    /* 增益 */
    GAIN_8            = (3 << 3),    /* 增益 */
    GAIN_16            = (4 << 3),    /* 增益 */
    GAIN_32            = (5 << 3),    /* 增益 */
    GAIN_64            = (6 << 3),    /* 增益 */
    GAIN_128        = (7 << 3),    /* 增益 */

    /* 無論雙極性還是單極性都不改變任何輸入信號的狀態,它只改變輸出數據的代碼和轉換函數上的校準點 */
    BIPOLAR            = (0 << 2),    /* 雙極性輸入 */
    UNIPOLAR        = (1 << 2),    /* 單極性輸入 */

    BUF_NO            = (0 << 1),    /* 輸入無緩沖(內部緩沖器不啟用) */
    BUF_EN            = (1 << 1),    /* 輸入有緩沖 (啟用內部緩沖器) */

    FSYNC_0            = 0,
    FSYNC_1            = 1        /* 不啟用 */
};

/* 時鐘寄存器bit定義 */
enum
{
    CLKDIS_0    = 0x00,        /* 時鐘輸出使能 (當外接晶振時,必須使能才能振蕩) */
    CLKDIS_1    = 0x10,        /* 時鐘禁止 (當外部提供時鐘時,設置該位可以禁止MCK_OUT引腳輸出時鐘以省電 */

    /*
        2.4576MHz(CLKDIV=0 )或為 4.9152MHz (CLKDIV=1 ),CLK 應置 “0”。
        1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 該位應置  “1”
    */
    CLK_4_9152M = 0x08,
    CLK_2_4576M = 0x00,
    CLK_1M         = 0x04,
    CLK_2M         = 0x0C,

    FS_50HZ        = 0x00,
    FS_60HZ        = 0x01,
    FS_250HZ    = 0x02,
    FS_500HZ    = 0x04,

    /*
        四十九、電子秤應用中提高TM7705 精度的方法
            當使用主時鐘為 2.4576MHz 時,強烈建議將時鐘寄存器設為 84H,此時數據輸出更新率為10Hz,即每0.1S 輸出一個新數據。
            當使用主時鐘為 1MHz 時,強烈建議將時鐘寄存器設為80H, 此時數據輸出更新率為4Hz, 即每0.25S 輸出一個新數據
    */
    ZERO_0        = 0x00,
    ZERO_1        = 0x80
};

static void TM7705_SyncSPI(void);
static void TM7705_Send8Bit(uint8_t _data);
static uint8_t TM7705_Recive8Bit(void);
static void TM7705_WriteByte(uint8_t _data);
static void TM7705_Write3Byte(uint32_t _data);
static uint8_t TM7705_ReadByte(void);
static uint16_t TM7705_Read2Byte(void);
static uint32_t TM7705_Read3Byte(void);
static void TM7705_WaitDRDY(void);
static void TM7705_ResetHard(void);
static void TM7705_Delay(void);

/*
*********************************************************************************************************
*    函 數 名: bsp_InitTM7705
*    功能說明: 配置STM32的GPIO和SPI接口,用于連接 TM7705
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
void bsp_InitTM7705(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

#ifdef SOFT_SPI        /* 軟件SPI */
    CS_1();
    SCK_1();
    DI_1();   
   
    /* 打開GPIO時鐘 */
    RCC_APB2PeriphClockCmd(RCC_SCK | RCC_DIN | RCC_DOUT | RCC_CS | RCC_DRDY | RCC_RESET, ENABLE);
   
    /* 配置幾個推完輸出IO */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        /* 設為輸出口 */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    /* IO口最大速度 */

    GPIO_InitStructure.GPIO_Pin = PIN_SCK;
    GPIO_Init(PORT_SCK, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = PIN_DIN;
    GPIO_Init(PORT_DIN, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = PIN_CS;
    GPIO_Init(PORT_CS, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = PIN_RESET;
    GPIO_Init(PORT_RESET, &GPIO_InitStructure);

    /* 配置GPIO為浮動輸入模式(實際上CPU復位后就是輸入狀態) */
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        /* 設為輸入口 */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    /* IO口最大速度 */

    GPIO_InitStructure.GPIO_Pin = PIN_DOUT;
    GPIO_Init(PORT_DOUT, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = PIN_DRDY;
    GPIO_Init(PORT_DRDY, &GPIO_InitStructure);
   

#endif

    delay_ms(10);
   
    TM7705_ResetHard();        /* 硬件復位 */
   
    /*
        在接口序列丟失的情況下,如果在DIN 高電平的寫操作持續了足夠長的時間(至少 32個串行時鐘周期),
        TM7705 將會回到默認狀態。
    */   
    delay_ms(5);

    TM7705_SyncSPI();        /* 同步SPI接口時序 */

    delay_ms(5);

    /* 配置時鐘寄存器 */
    TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);            /* 先寫通信寄存器,下一步是寫時鐘寄存器 */
   
    TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ);    /* 刷新速率50Hz */
    //TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);    /* 刷新速率500Hz */
   
    /* 每次上電進行一次自校準 */
    TM7705_CalibSelf(1);    /* 內部自校準 CH1 */
    delay_ms(5);
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_Delay
*    功能說明: CLK之間的延遲,時序延遲. 用于STM32F407  168M主頻
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_Delay(void)
{
    uint16_t i;

    for (i = 0; i < 5; i++);
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_ResetHard
*    功能說明: 硬件復位 TM7705芯片
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_ResetHard(void)
{
    RESET_1();
    delay_ms(1);   
    RESET_0();
    delay_ms(2);
    RESET_1();
    delay_ms(1);
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_SyncSPI
*    功能說明: 同步TM7705芯片SPI接口時序
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_SyncSPI(void)
{
    /* AD7705串行接口失步后將其復位。復位后要延時500us再訪問 */
    CS_0();
    TM7705_Send8Bit(0xFF);
    TM7705_Send8Bit(0xFF);
    TM7705_Send8Bit(0xFF);
    TM7705_Send8Bit(0xFF);   
    CS_1();
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_Send8Bit
*    功能說明: 向SPI總線發送8個bit數據。 不帶CS控制。
*    形    參: _data : 數據
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_Send8Bit(uint8_t _data)
{
    uint8_t i;

    for(i = 0; i < 8; i++)
    {
        if (_data & 0x80)
        {
            DI_1();
        }
        else
        {
            DI_0();
        }
        SCK_0();
        _data <<= 1;
        TM7705_Delay();
        SCK_1();   
        TM7705_Delay();        
    }
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_Recive8Bit
*    功能說明: 從SPI總線接收8個bit數據。 不帶CS控制。
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
static uint8_t TM7705_Recive8Bit(void)
{
    uint8_t i;
    uint8_t read = 0;

    for (i = 0; i < 8; i++)
    {
        SCK_0();
        TM7705_Delay();        
        read = read<<1;
        if (DO_IS_HIGH())
        {
            read++;
        }
        SCK_1();        
        TM7705_Delay();
    }
    return read;
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_WriteByte
*    功能說明: 寫入1個字節。帶CS控制
*    形    參: _data :將要寫入的數據
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_WriteByte(uint8_t _data)
{
    CS_0();
    TM7705_Send8Bit(_data);
    CS_1();
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_Write3Byte
*    功能說明: 寫入3個字節。帶CS控制
*    形    參: _data :將要寫入的數據
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_Write3Byte(uint32_t _data)
{
    CS_0();
    TM7705_Send8Bit((_data >> 16) & 0xFF);
    TM7705_Send8Bit((_data >> 8) & 0xFF);
    TM7705_Send8Bit(_data);
    CS_1();
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_ReadByte
*    功能說明: 從AD芯片讀取一個字(16位)
*    形    參: 無
*    返 回 值: 讀取的字(16位)
*********************************************************************************************************
*/
static uint8_t TM7705_ReadByte(void)
{
    uint8_t read;

    CS_0();
    read = TM7705_Recive8Bit();
    CS_1();
   
    return read;
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_Read2Byte
*    功能說明: 讀2字節數據
*    形    參: 無
*    返 回 值: 讀取的數據(16位)
*********************************************************************************************************
*/
static uint16_t TM7705_Read2Byte(void)
{
    uint16_t read;

    CS_0();
    read = TM7705_Recive8Bit();
    read <<= 8;
    read += TM7705_Recive8Bit();
    CS_1();

    return read;
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_Read3Byte
*    功能說明: 讀3字節數據
*    形    參: 無
*    返 回 值: 讀取到的數據(24bit) 高8位固定為0.
*********************************************************************************************************
*/
static uint32_t TM7705_Read3Byte(void)
{
    uint32_t read;

    CS_0();
    read = TM7705_Recive8Bit();
    read <<= 8;
    read += TM7705_Recive8Bit();
    read <<= 8;
    read += TM7705_Recive8Bit();
    CS_1();
    return read;
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_WaitDRDY
*    功能說明: 等待內部操作完成。 自校準時間較長,需要等待。
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_WaitDRDY(void)
{
    uint32_t i;

    for (i = 0; i < 4000000; i++)
    {
        if (DRDY_IS_LOW())
        {
            break;
        }
    }
    if (i >= 4000000)
    {
        printf("TM7705_WaitDRDY() Time Out ...\r\n");        /* 調試語句. 用語排錯 */
    }
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_WriteReg
*    功能說明: 寫指定的寄存器
*    形    參:  _RegID : 寄存器ID
*              _RegValue : 寄存器值。 對于8位的寄存器,取32位形參的低8bit
*    返 回 值: 無
*********************************************************************************************************
*/
void TM7705_WriteReg(uint8_t _RegID, uint32_t _RegValue)
{
    uint8_t bits;

    switch (_RegID)
    {
        case REG_COMM:        /* 通信寄存器 */        
        case REG_SETUP:        /* 設置寄存器 8bit */
        case REG_CLOCK:        /* 時鐘寄存器 8bit */
            bits = 8;
            break;

        case REG_ZERO_CH1:    /* CH1 偏移寄存器 24bit */
        case REG_FULL_CH1:    /* CH1 滿量程寄存器 24bit */
        case REG_ZERO_CH2:    /* CH2 偏移寄存器 24bit */
        case REG_FULL_CH2:    /* CH2 滿量程寄存器 24bit*/
            bits = 24;
            break;

        case REG_DATA:        /* 數據寄存器 16bit */
        default:
            return;
    }

    TM7705_WriteByte(_RegID | WRITE);    /* 寫通信寄存器, 指定下一步是寫操作,并指定寫哪個寄存器 */

    if (bits == 8)
    {
        TM7705_WriteByte((uint8_t)_RegValue);
    }
    else    /* 24bit */
    {
        TM7705_Write3Byte(_RegValue);
    }
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_ReadReg
*    功能說明: 寫指定的寄存器
*    形    參:  _RegID : 寄存器ID
*              _RegValue : 寄存器值。 對于8位的寄存器,取32位形參的低8bit
*    返 回 值: 讀到的寄存器值。 對于8位的寄存器,取32位形參的低8bit
*********************************************************************************************************
*/
uint32_t TM7705_ReadReg(uint8_t _RegID)
{
    uint8_t bits;
    uint32_t read;

    switch (_RegID)
    {
        case REG_COMM:        /* 通信寄存器 */
        case REG_SETUP:        /* 設置寄存器 8bit */
        case REG_CLOCK:        /* 時鐘寄存器 8bit */
            bits = 8;
            break;

        case REG_ZERO_CH1:    /* CH1 偏移寄存器 24bit */
        case REG_FULL_CH1:    /* CH1 滿量程寄存器 24bit */
        case REG_ZERO_CH2:    /* CH2 偏移寄存器 24bit */
        case REG_FULL_CH2:    /* CH2 滿量程寄存器 24bit*/
            bits = 24;
            break;

        case REG_DATA:        /* 數據寄存器 16bit */
        default:
            return 0xFFFFFFFF;
    }

    TM7705_WriteByte(_RegID | READ);    /* 寫通信寄存器, 指定下一步是寫操作,并指定寫哪個寄存器 */

    if (bits == 16)
    {
        read = TM7705_Read2Byte();
    }
    else if (bits == 8)
    {
        read = TM7705_ReadByte();
    }
    else    /* 24bit */
    {
        read = TM7705_Read3Byte();
    }
    return read;
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_CalibSelf
*    功能說明: 啟動自校準. 內部自動短接AIN+ AIN-校準0位,內部短接到Vref 校準滿位。此函數執行過程較長,
*              實測約 180ms
*    形    參:  _ch : ADC通道,1或2
*    返 回 值: 無
*********************************************************************************************************
*/
void TM7705_CalibSelf(uint8_t _ch)
{
    if (_ch == 1)
    {
        /* 自校準CH1 */
        TM7705_WriteByte(REG_SETUP | WRITE | CH_1);    /* 寫通信寄存器,下一步是寫設置寄存器,通道1 */        
        TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準 */
        TM7705_WaitDRDY();    /* 等待內部操作完成 --- 時間較長,約180ms */
    }
    else if (_ch == 2)
    {
        /* 自校準CH2 */
        TM7705_WriteByte(REG_SETUP | WRITE | CH_2);    /* 寫通信寄存器,下一步是寫設置寄存器,通道2 */
        TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);    /* 啟動自校準 */
        TM7705_WaitDRDY();    /* 等待內部操作完成  --- 時間較長,約180ms */
    }
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_SytemCalibZero
*    功能說明: 啟動系統校準零位. 請將AIN+ AIN-短接后,執行該函數。校準應該由主程序控制并保存校準參數。
*             執行完畢后。可以通過 TM7705_ReadReg(REG_ZERO_CH1) 和  TM7705_ReadReg(REG_ZERO_CH2) 讀取校準參數。
*    形    參: _ch : ADC通道,1或2
*    返 回 值: 無
*********************************************************************************************************
*/
void TM7705_SytemCalibZero(uint8_t _ch)
{
    if (_ch == 1)
    {
        /* 校準CH1 */
        TM7705_WriteByte(REG_SETUP | WRITE | CH_1);    /* 寫通信寄存器,下一步是寫設置寄存器,通道1 */
        TM7705_WriteByte(MD_CAL_ZERO | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準 */
        TM7705_WaitDRDY();    /* 等待內部操作完成 */
    }
    else if (_ch == 2)
    {
        /* 校準CH2 */
        TM7705_WriteByte(REG_SETUP | WRITE | CH_2);    /* 寫通信寄存器,下一步是寫設置寄存器,通道1 */
        TM7705_WriteByte(MD_CAL_ZERO | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);    /* 啟動自校準 */
        TM7705_WaitDRDY();    /* 等待內部操作完成 */
    }
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_SytemCalibFull
*    功能說明: 啟動系統校準滿位. 請將AIN+ AIN-接最大輸入電壓源,執行該函數。校準應該由主程序控制并保存校準參數。
*             執行完畢后。可以通過 TM7705_ReadReg(REG_FULL_CH1) 和  TM7705_ReadReg(REG_FULL_CH2) 讀取校準參數。
*    形    參:  _ch : ADC通道,1或2
*    返 回 值: 無
*********************************************************************************************************
*/
void TM7705_SytemCalibFull(uint8_t _ch)
{
    if (_ch == 1)
    {
        /* 校準CH1 */
        TM7705_WriteByte(REG_SETUP | WRITE | CH_1);    /* 寫通信寄存器,下一步是寫設置寄存器,通道1 */
        TM7705_WriteByte(MD_CAL_FULL | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準 */
        TM7705_WaitDRDY();    /* 等待內部操作完成 */
    }
    else if (_ch == 2)
    {
        /* 校準CH2 */
        TM7705_WriteByte(REG_SETUP | WRITE | CH_2);    /* 寫通信寄存器,下一步是寫設置寄存器,通道1 */
        TM7705_WriteByte(MD_CAL_FULL | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);    /* 啟動自校準 */
        TM7705_WaitDRDY();    /* 等待內部操作完成 */
    }
}

/*
*********************************************************************************************************
*    函 數 名: TM7705_ReadAdc1
*    功能說明: 讀通道1或2的ADC數據
*    形    參: 無
*    返 回 值: 無
*********************************************************************************************************
*/
uint16_t TM7705_ReadAdc(uint8_t _ch)
{
    uint8_t i;
    uint16_t read = 0;
   
    /* 為了避免通道切換造成讀數失效,讀2次 */
    for (i = 0; i < 2; i++)
    {
        TM7705_WaitDRDY();        /* 等待DRDY口線為0 */        

        if (_ch == 1)
        {
            TM7705_WriteByte(0x38);
        }
        else if (_ch == 2)
        {
            TM7705_WriteByte(0x39);
        }

        read = TM7705_Read2Byte();
    }
    return read;   
}

/***************************** @Durnat ALL RIGHTS RESERVED *********************************/


頭文件
#ifndef __AD7705_H
#define __AD7705_H
#include "sys.h"
void bsp_InitTM7705(void);
void TM7705_CalibSelf(uint8_t _ch);
void TM7705_SytemCalibZero(uint8_t _ch);
void TM7705_SytemCalibFull(uint8_t _ch);
uint16_t TM7705_ReadAdc(uint8_t _ch);

void TM7705_WriteReg(uint8_t _RegID, uint32_t _RegValue);
uint32_t TM7705_ReadReg(uint8_t _RegID);

#endif




評分

參與人數 2黑幣 +20 收起 理由
shenjq + 10 很給力!
wfliu + 10 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:289512 發表于 2018-3-31 10:02 | 只看該作者
樓主好人。。。。。。。。。。。。
回復

使用道具 舉報

板凳
ID:323942 發表于 2018-5-15 11:42 | 只看該作者
樓主給力
回復

使用道具 舉報

地板
ID:387994 發表于 2019-7-9 15:54 | 只看該作者
本帖最后由 shenjq 于 2019-7-12 14:36 編輯

好用!謝謝
回復

使用道具 舉報

5#
ID:396211 發表于 2019-8-2 10:11 | 只看該作者

樓主好人,感謝
回復

使用道具 舉報

6#
ID:770889 發表于 2020-6-6 10:34 | 只看該作者
有配置好的工程嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频中文字幕 | 国产精品国产a | 黄色一级视频免费 | 99精品网站 | 亚洲成人国产综合 | www.色.com| 久草视频观看 | 国产精品久久 | 久久九精品 | 天堂亚洲 | 女同久久 | 男人的天堂在线视频 | 一区二区三区在线 | 爱草在线 | 国内精品久久久久久影视8 最新黄色在线观看 | 久久精品国产99国产精品 | 国产一区二区三区在线免费 | 日韩中文字幕一区 | 国产精品99久久久久久www | 91精品观看| 午夜精品久久久久久久星辰影院 | 午夜影视| 久久久久久久综合 | 精品欧美一区二区三区久久久 | 中文字幕在线一区二区三区 | 天天干,夜夜操 | 欧美白人做受xxxx视频 | 国产免费一区二区 | 欧美一区二区免费电影 | 中文字幕加勒比 | 国产精品久久亚洲7777 | 久久久久9999 | 久久视频免费观看 | 日韩在线观看中文字幕 | 亚洲国产成人精品女人久久久 | 91精品国产综合久久婷婷香蕉 | 精品一区在线免费观看 | 欧美精品一区二区三 | 欧美日韩精品在线免费观看 | 91精品久久久久久久久99蜜臂 | 欧美在线看片 |