久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
采用STM32F103ZET6驅(qū)動(dòng)TM7705或者AD7705程序
[打印本頁]
作者:
51黑電子論壇51
時(shí)間:
2023-3-30 17:08
標(biāo)題:
采用STM32F103ZET6驅(qū)動(dòng)TM7705或者AD7705程序
/*===================================================
= 模塊名稱:TM7705 驅(qū)動(dòng)模塊(2通道帶PGA的16位ADC)
= 說明:使用芯片自帶的SPI2驅(qū)動(dòng)
= 作者:xcm
= 版本:V1.0
=======================================================*/
#include <drv_tm7705.h>
#include <drv_spi.h>
#include <delay.h>
#include <lcd.h>
/*
TM7705模塊可以直接插到STM32f103開發(fā)板nRF24L01模塊的排母接口上。
TM7705模塊 STM32F103開發(fā)板
SCK ------ PB13/SPI2_SCK
DOUT ------ PB14/SPI2_MISO
DIN ------ PB15/SPI3_MOSI
CS ------ PG7/NRF24L01_CS
DRDY ------ PG8/NRF24L01_IRQ
RST ------ PG6/NRF_CE
*/
#define TM7705_CS PGout(7) //CS片選宏定義,低電平有效
#define TM7705_RST PGout(6) //RST使能復(fù)位宏定義,低電平有效
#define TM7705_DRDY PGin(8) //DRDY,低電平時(shí)表示TM7705可讀
/*================下面為芯片的驅(qū)動(dòng)數(shù)據(jù)定義============================*/
/* 通信寄存器bit定義 */
enum
{
/* 寄存器選擇 RS2 RS1 RS0 */
REG_COMM = 0x00, /* 通信寄存器 */
REG_SETUP = 0x10, /* 設(shè)置寄存器 */
REG_CLOCK = 0x20, /* 時(shí)鐘寄存器 */
REG_DATA = 0x30, /* 數(shù)據(jù)寄存器 */
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- */
};
/* 設(shè)置寄存器bit定義 */
enum
{
MD_NORMAL = (0 << 6), /* 正常模式 */
MD_CAL_SELF = (1 << 6), /* 自校準(zhǔn)模式 */
MD_CAL_ZERO = (2 << 6), /* 校準(zhǔn)0刻度模式 */
MD_CAL_FULL = (3 << 6), /* 校準(zhǔn)滿刻度模式 */
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), /* 增益 */
/* 無論雙極性還是單極性都不改變?nèi)魏屋斎胄盘?hào)的狀態(tài),它只改變輸出數(shù)據(jù)的代碼和轉(zhuǎn)換函數(shù)上的校準(zhǔn)點(diǎn) */
BIPOLAR = (0 << 2), /* 雙極性輸入 */
UNIPOLAR = (1 << 2), /* 單極性輸入 */
BUF_NO = (0 << 1), /* 輸入無緩沖(內(nèi)部緩沖器不啟用) */
BUF_EN = (1 << 1), /* 輸入有緩沖 (啟用內(nèi)部緩沖器) 可處理高阻抗源 */
FSYNC_0 = 0,
FSYNC_1 = 1 /* 不啟用 */
};
/* 時(shí)鐘寄存器bit定義 */
enum
{
CLKDIS_0 = 0x00, /* 時(shí)鐘輸出使能 (當(dāng)外接晶振時(shí),必須使能才能振蕩) */
CLKDIS_1 = 0x10, /* 時(shí)鐘禁止 (當(dāng)外部提供時(shí)鐘時(shí),設(shè)置該位可以禁止MCK_OUT引腳輸出時(shí)鐘以省電 */
/*
2.4576MHz(CLKDIV=0 )或?yàn)?4.9152MHz (CLKDIV=1 ),CLK 應(yīng)置 “0”。
1MHz (CLKDIV=0 )或 2MHz (CLKDIV=1 ),CLK 該位應(yīng)置 “1”
*/
CLK_4_9152M = 0x08,
CLK_2_4576M = 0x00,
CLK_1M = 0x04,
CLK_2M = 0x0C,
/*輸出更新速率設(shè)置*/
FS_20HZ = 0X00,
FS_25HZ = 0x01,
FS_100HZ = 0x20,
FS_200HZ = 0x03,
FS_50HZ = 0x04,
FS_60HZ = 0x05,
FS_250HZ = 0x06,
FS_500HZ = 0x07,
/*
四十九、電子秤應(yīng)用中提高TM7705 精度的方法
當(dāng)使用主時(shí)鐘為 2.4576MHz 時(shí),強(qiáng)烈建議將時(shí)鐘寄存器設(shè)為 84H,此時(shí)數(shù)據(jù)輸出更新率為10Hz,即每0.1S 輸出一個(gè)新數(shù)據(jù)。
當(dāng)使用主時(shí)鐘為 1MHz 時(shí),強(qiáng)烈建議將時(shí)鐘寄存器設(shè)為80H, 此時(shí)數(shù)據(jù)輸出更新率為4Hz, 即每0.25S 輸出一個(gè)新數(shù)據(jù)
*/
ZERO_0 = 0x00,
ZERO_1 = 0x80
};
static void TM7705_ResetHard(void); //硬件復(fù)位
static void TM7705_SyncSPI(void);
/*====================芯片的驅(qū)動(dòng)數(shù)據(jù)定義到此結(jié)束==========================*/
void TM7705_Init(void) //初始化函數(shù)
{
/*==信號(hào)引腳初始化==*/
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOG, ENABLE); //使能PB,G端口時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12上拉 防止W25X的干擾
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化指定IO
GPIO_SetBits(GPIOB,GPIO_Pin_12);//上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //PG 7 推挽 CS
GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定IO
GPIO_SetBits(GPIOG,GPIO_Pin_7);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PG6 推挽 RST
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定IO
GPIO_ResetBits(GPIOG,GPIO_Pin_6 );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PG8 輸入 DRAY
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PG8 輸入 DRAY 兩種方式親測都可以
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_ResetBits(GPIOG,GPIO_Pin_8 );
SPI2_Init(); //初始化SPI2外設(shè),在drv_spi.h中實(shí)現(xiàn)
SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//設(shè)置為18M時(shí)鐘,高速模式
TM7705_CS = 1; //TM7705初始化不選中
TM7705_RST = 0;
delay_ms(10);
TM7705_ResetHard(); //硬件復(fù)位
delay_ms(5);
TM7705_SyncSPI(); //同步SPI接口時(shí)序
delay_ms(10);
/*配置時(shí)鐘寄存器*/
TM7705_CS = 0;
SPI2_ReadWriteByte(REG_CLOCK | WRITE |CH_1); //先寫通信寄存器,下一步寫時(shí)鐘寄存器
delay_ms(10);
SPI2_ReadWriteByte(CLKDIS_0 | CLK_4_9152M | FS_100HZ ); //刷新速率250HZ
delay_ms(10);
SPI2_ReadWriteByte(REG_CLOCK | WRITE |CH_2); //先寫通信寄存器,下一步寫時(shí)鐘寄存器
delay_ms(10);
SPI2_ReadWriteByte(CLKDIS_0 | CLK_4_9152M | FS_100HZ ); //刷新速率250HZ
delay_ms(10);
TM7705_CS = 1;
/*下面注釋內(nèi)容在TM7705_CalibSelf(1);函數(shù)中集成實(shí)現(xiàn)*/
// SPI2_ReadWriteByte(REG_SETUP | WRITE |CH_1); //先寫通信寄存器,下一步寫設(shè)置寄存器
// delay_ms(10);
// SPI2_ReadWriteByte(MD_CAL_SELF | GAIN_1 | BIPOLAR |BUF_EN |FSYNC_0 ); //寫設(shè)置寄存器,雙極性、有緩沖、增益為1、濾波器工作、自校準(zhǔn)
// delay_ms(5 00);
/*每次上電進(jìn)行一次自校準(zhǔn)*/
TM7705_CalibSelf(1); //內(nèi)部自校準(zhǔn)
TM7705_CalibSelf(2); //內(nèi)部自校準(zhǔn)
delay_ms(5);
}
/*===硬件復(fù)位Tm7705芯片,無出入?yún)?shù)===*/
static void TM7705_ResetHard(void) //硬件復(fù)位
{
TM7705_RST = 1;
delay_ms(1);
TM7705_RST = 0;
delay_ms(2);
TM7705_RST = 1;
delay_ms(1);
}
/*=============================================
= 功能:同步TM7705芯片SPI接口時(shí)序
= 說明:連續(xù)發(fā)送32個(gè)1即可,不同步會(huì)發(fā)生數(shù)據(jù)錯(cuò)位
==============================================*/
static void TM7705_SyncSPI(void) //同步SPI接口時(shí)序
{
TM7705_CS = 0;
SPI2_ReadWriteByte(0xFF);//32個(gè)1
SPI2_ReadWriteByte(0xFF);
SPI2_ReadWriteByte(0xFF);
SPI2_ReadWriteByte(0xFF);
TM7705_CS = 1;
}
/*====================================================================
=功能說明: 等待內(nèi)部操作完成,自校準(zhǔn)時(shí)間較長,需要等待
=參 數(shù): 無
======================================================================*/
static void TM7705_WaitDRDY(void)
{
uint32_t i;
for(i = 0; i<4000000; i++)
{
if(TM7705_DRDY == 0)
{
break;
}
}
if(i >=4000000 )
{
LCD_ShowString(50,100,200,16,16,"TM7705 WAIT TIME OUT !!!");
}
}
/*====================================================================
= 功能說明: 啟動(dòng)自校準(zhǔn). 內(nèi)部自動(dòng)短接AIN+ AIN-校準(zhǔn)0位,內(nèi)部短接到Vref
校準(zhǔn)滿位。此函數(shù)執(zhí)行過程較長,實(shí)測約 180ms
= 形 參: _ch : ADC通道,1或2
=====================================================================*/
void TM7705_CalibSelf(uint8_t _ch)
{
if (_ch == 1)
{
/* 自校準(zhǔn)CH1 */
SPI2_ReadWriteByte(REG_SETUP | WRITE | CH_1); /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
SPI2_ReadWriteByte(MD_CAL_SELF | GAIN_1 | UNIPOLAR |BUF_EN |FSYNC_0);/* 啟動(dòng)自校準(zhǔn) *///寫設(shè)置寄存器,單極性、有緩沖、增益為1、濾波器工作、自校準(zhǔn)
//SPI2_ReadWriteByte(0x4C);
TM7705_WaitDRDY(); /* 等待內(nèi)部操作完成 --- 時(shí)間較長,約180ms */
}
else if (_ch == 2)
{
/* 自校準(zhǔn)CH2 */
SPI2_ReadWriteByte(REG_SETUP | WRITE | CH_2); /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道2 */
SPI2_ReadWriteByte(MD_CAL_SELF | GAIN_1 | UNIPOLAR |BUF_EN |FSYNC_0); /* 啟動(dòng)自校準(zhǔn) */
//SPI2_ReadWriteByte(0x44);
TM7705_WaitDRDY(); /* 等待內(nèi)部操作完成 --- 時(shí)間較長,約180ms */
}
}
/*=====================================================================
=功能說明:讀到一個(gè)8位數(shù)據(jù)
=參 數(shù):返回讀到的值
=====================================================================*/
static uint8_t TM7705_ReadByte(void)
{
uint8_t read = 0;
TM7705_CS = 0;
read = SPI2_ReadWriteByte(0xFF);
TM7705_CS = 1;
return read;
}
/*=====================================================================
=功能說明:讀到一個(gè)16位數(shù)據(jù)(半字)
=參 數(shù):返回讀到16位數(shù)據(jù)的值
=====================================================================*/
static uint16_t TM7705_Read2Byte()
{
uint16_t read = 0;
TM7705_CS =0 ;
read = SPI2_ReadWriteByte(0xFF);
read <<=8;
read += SPI2_ReadWriteByte(0xFF);
TM7705_CS =1 ;
return read;
}
/*=====================================================================
=功能說明:讀到一個(gè)24位數(shù)據(jù)(3字節(jié))
=參 數(shù):返回讀到24位數(shù)據(jù)的值
=====================================================================*/
static uint16_t TM7705_Read3Byte(void)
{
uint32_t read = 0;
TM7705_CS = 0;
read = SPI2_ReadWriteByte(0xFF);
read <<=8;
read += SPI2_ReadWriteByte(0xFF);
read <<=8;
read += SPI2_ReadWriteByte(0xFF);
TM7705_CS =1 ;
return read;
}
/*=====================================================================
=功能說明:讀取采樣電壓值
=參 數(shù):返回采樣值
=====================================================================*/
uint16_t TM7705_ReadAdc(uint8_t _ch)
{
uint8_t i;
uint16_t read = 0;
/* 為了避免通道切換造成讀數(shù)失效,讀2次 */
for (i = 0; i < 2; i++)
{
TM7705_WaitDRDY(); /* 等待DRDY口線為0 */
if (_ch == 1)
{
TM7705_CS = 0;
SPI2_ReadWriteByte(0x38);
TM7705_CS = 1;
}
else if (_ch == 2)
{
TM7705_CS = 0;
SPI2_ReadWriteByte(0x39);
TM7705_CS = 1;
}
//TM7705_WaitDRDY(); /* 等待內(nèi)部操作完成 --- 時(shí)間較長,約180ms */
read = TM7705_Read2Byte();
}
return read;
}
復(fù)制代碼
#include <delay.h>
#include <sys.h>
#include <usart.h>
#include <lcd.h>
#include <drv_spi.h>
#include <drv_tm7705.h>
char BUFFER[200];
int main(void)
{
int volt1,volt2;
uint16_t adc1,adc2;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置NVUC中斷分組為2
uart_init(115200);
delay_init();
LCD_Init();
POINT_COLOR = RED;
TM7705_Init();
TM7705_CalibSelf(1); //自校準(zhǔn)
adc1 = TM7705_ReadAdc(1);
TM7705_CalibSelf(2); //自校準(zhǔn)
adc2 = TM7705_ReadAdc(2);
while(1)
{
adc1 = TM7705_ReadAdc(1);
adc2 = TM7705_ReadAdc(2);
volt1 = (adc1 * 5000) / 65535;
volt2 = (adc2 * 5000) / 65535;
sprintf(BUFFER,"CH1=%5d v1:%5dmv",adc1,volt1);
LCD_ShowString(60,154,200,16,16,BUFFER);
sprintf(BUFFER,"CH2=%5d v2:%5dmv",adc2,volt2);
LCD_ShowString(60,170,200,16,16,BUFFER);
}
}
Keil代碼下載:
Keil代碼.7z
(238.86 KB, 下載次數(shù): 27)
2023-3-30 17:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
男女午夜免费视频
|
99热这里只有精品8 激情毛片
|
国产精品欧美一区二区三区
|
国产欧美一区二区三区日本久久久
|
国产高清久久
|
国产精品国产三级国产aⅴ入口
|
国产精品久久久久久久粉嫩
|
免费观看的黄色网址
|
日韩成人免费中文字幕
|
天天干b
|
欧美一级在线观看
|
国产高清在线视频
|
可以在线看的黄色网址
|
天天爽夜夜操
|
最新午夜综合福利视频
|
成人h视频在线观看
|
欧美日韩中文在线
|
久久777
|
亚洲成人免费
|
国产不卡视频
|
国产不卡在线播放
|
jvid精品资源在线观看
|
亚洲毛片网站
|
亚洲一区二区在线免费观看
|
成人不卡视频
|
在线一区视频
|
国产伦精品一区二区三区在线
|
天堂久久天堂综合色
|
亚洲人成在线观看
|
欧美一级在线
|
日韩中文一区二区三区
|
91中文视频
|
一区二区三区在线观看视频
|
国产成人99久久亚洲综合精品
|
色婷婷亚洲国产女人的天堂
|
草草视频在线免费观看
|
在线色网站
|
亚洲成色777777在线观看影院
|
午夜影院在线观看
|
久久精品一级
|
亚洲国产精品久久久久婷婷老年
|