2.63 ADS1118-16 位 ADC 模块(来自番茄鱼的贡献)
2.63.1 模块来源
采购链接: ADS1118 16 位模数转换模块 ADC 开发板/SPI 通信接口 资料下载:TI 官网数据手册
**实物展示图**2.63.2 规格参数
**工作电压:**2-5.5V **工作电流:**连续模式 150μA **通信方式:**SPI **引脚数量:**12 Pin(2.54mm 间距排针) 产品数据手册
2.63.3 模块原理
ADS1118 是一款精密、低功耗、16 位模数转换器 (ADC),提供 测量 采用超小型无引线 X2QFN-10 封装 或 VSSOP-10 封装的传感器最常见信号所需的所有功 能。ADS1118 集成了可编程增益放大器 (PGA)、电压 基准、振荡器和高精度温度传感器。这些 功能以及 2V 至 5.5V 的宽电源电压范围,使得 ADS1118 非常适合 功率受限和空间受限的传感器测量 应用。 ADS1118 数据转换速率最高可达每秒 860 次采样 (SPS)。PGA 的输入范围为 ±256mV 至 ±6.144V,能 够以高分辨率测量大信号和小信号。该器件通过输入多 路复用器 (MUX) 测量双路差分输入或四路单端输入。 高精度温度传感器用于系统级温度监控或对热电偶进行 冷结点补偿。 ADS1118 可选择以连续转换模式或单次模式运行。该 器件在单次模式下完成一次转换后自动断电。在空闲状 态下,单次模式会显著降低流耗。所有数据均通过串行 外设接口 (SPI™) 进行传输。ADS1118 的额定工作温 度范围为 -40°C 至 +125°C。
2.63.4 移植工程
我们的目标是在梁山派GD32F470上能够实现16bit模式1路ADC采集电压功能,和检查温度。首先要获取资料,查看数据手册应如何实现,再移植至我们的工程。
查看资料
控制寄存器说明
控制寄存器有 16 位,用于控制工作模式、输入选择、数据速率、满量程范围等。
第 15 位:SS,读操作时可以知道当前设备的工作状态,写 1 可以开始工作
第 14-12 位:MUX 为输入多路复用器,对输入模式进行选择,如下图有八种输入模式,分别是四种差分与四种单端输入,(单端输入就是测量的数据有两个引脚,一个输出一个地。差分输入就是测量两个引脚的电压差)
MUX 位既配置下图连接。
第 11-9 位:PGA 为可编程增益放大器,设置 FSR(满量程范围)。
第 8 位:MODE 选择持续转换模式或单次转换模式。
第 7-5 位:DR 配置数据传输速率,数据传输率越低采样数据越准。
第 4 位:本位选取 ADC 读取内部温度传感器或外部通道。
第 3 位:本位配置 DOUT 是否内部上拉,推荐使能上拉。
第 2-1 位:本位配置是否更新控制寄存器,推荐配置位 01。
第 0 位:只读寄存器,总是 1。
转换寄存器说明
16 位转换寄存器以二进制的补码格式保存结果,其中最高位为 1 为负数,最高位为 0 为正数。
2.63.4.1 引脚选择
使用硬件 SPI0 接口。
(模块名称) | 立创·梁山派 | 接线图 |
---|
2.63.4.2 移植步骤
首先编写 SPI.c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: gugugu
* 修改日期: 2022年04月19日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "SPI.h"
/******************************************************************
* 函 数 名 称:MySPI_W_SS
* 函 数 说 明:写片选脚
* 函 数 形 参:BitValue = 设置的高低电平
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_W_SS(uint8_t BitValue)
{
gpio_bit_write(SPI_Port,SPI_NSS,BitValue);
}
/******************************************************************
* 函 数 名 称:MySPI_Init()
* 函 数 说 明:初始化SPI
* 函 数 形 参:BitValue = 设置的高低电平
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_Init()
{
spi_parameter_struct spi_structure = {0};
rcu_periph_clock_enable(RCU_GPIO); //使能SPI_Port时钟
rcu_periph_clock_enable(RCU_SPI); //使能SPI0时钟
gpio_af_set(SPI_Port,GPIO_AF_5,SPI_SCLK);//复用SPI0_SCLK
gpio_af_set(SPI_Port,GPIO_AF_5,SPI_MOSI);//复用SPI0_MOSI
gpio_af_set(SPI_Port,GPIO_AF_5,SPI_MISO);//复用SPI0_MISO
gpio_mode_set(SPI_Port,GPIO_MODE_AF,GPIO_PUPD_NONE,SPI_SCLK);//SPI0_SCLK
gpio_mode_set(SPI_Port,GPIO_MODE_AF,GPIO_PUPD_NONE,SPI_MOSI);//SPI0_M0SI
gpio_mode_set(SPI_Port,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,SPI_NSS);//SPI0_NSS
gpio_mode_set(SPI_Port,GPIO_MODE_AF,GPIO_PUPD_NONE,SPI_MISO);//SPI0_MISO
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_25MHZ,SPI_SCLK);//SPI0_SCLK
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_25MHZ,SPI_MOSI);//SPI0_MOSI
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,SPI_NSS);//SPI0_NSS
gpio_output_options_set(SPI_Port,GPIO_OTYPE_PP,GPIO_OSPEED_25MHZ,SPI_MISO);//SPI0_MISO
spi_structure.nss = SPI_NSS_SOFT; //软件片选
spi_structure.endian = SPI_ENDIAN_MSB;
spi_structure.prescale = SPI_PSC_128; //时钟分频120M/128=937.5K
spi_structure.device_mode = SPI_MASTER; //主机模式
spi_structure.trans_mode = SPI_TRANSMODE_FULLDUPLEX; //双线全双工
spi_structure.frame_size = SPI_FRAMESIZE_16BIT; //数据16位
spi_structure.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE; //SPImode1
spi_init(SPI0,&spi_structure); //初始化SPI0
spi_enable(SPI0); //使能SPI0
MySPI_W_SS(1); //拉高片选
}
/******************************************************************
* 函 数 名 称:MySPI_SwapByte
* 函 数 说 明:向从机交换16位数据,并从从机读取16位数据
* 函 数 形 参:ByteSend = 发送的16位数据
* 函 数 返 回:从机数据
* 作 者:gugugu
* 备 注:无
******************************************************************/
uint16_t MySPI_SwapByte(uint16_t ByteSend)
{
while (spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) != SET); //读取发送缓冲区空标志
spi_i2s_data_transmit(SPI0, ByteSend); //发送数据
while (spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE) != SET); //读取接收缓冲区非空标志
return spi_i2s_data_receive(SPI0); //接收数据
}
/******************************************************************
* 函 数 名 称:MySPI_Start()
* 函 数 说 明:拉低片选脚开始通信
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_Start()
{
MySPI_W_SS(0);
}
/******************************************************************
* 函 数 名 称:MySPI_STOP()
* 函 数 说 明:拉高片选脚结束通信
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:无
******************************************************************/
void MySPI_STOP()
{
MySPI_W_SS(1);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
SPI.h
#ifndef __SPI_H
#define __SPI_H
#include "systick.h"
//SPI 端口定义
#define SPI_Port GPIOA //SPI端口
#define SPI_NSS GPIO_PIN_4 //NSS_PIN
#define SPI_MOSI GPIO_PIN_6 //MOSI_PIN
#define SPI_MISO GPIO_PIN_7 //MOSI_PIN
#define SPI_SCLK GPIO_PIN_5 //SCLK_PINPI
#define RCU_SPI RCU_SPI0
#define RCU_GPIO RCU_GPIOA
void MySPI_W_SS(uint8_t BitValue);
void MySPI_Init();
void MySPI_Start();//拉低片选脚开始通信
void MySPI_STOP();//拉高片选脚结束通信
uint16_t MySPI_SwapByte(uint16_t ByteSend);
#endif
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ADS1118.c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LCKFB
* 修改日期: 2022年04月19日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "ADS1118.h"
//ADS1118 supply voltage 2 - 5.5V
//analog input voltage max VDD+0.3V. VIN<VDD!!!!!
//(VDD-->3v3,PGA-->4096,)无法获得满量程ADC输出代码,这种意味着一些动态范围的丢失.
/******************************************************************
* 函 数 名 称:ADS1118_ADC_Continuous_Init
* 函 数 说 明:初始化ADS1118
* 函 数 形 参:channel = ADC外部通道选择,PGA = ADC满量程选择,SPS = ADC数据传输率选择
* 函 数 返 回:无
* 作 者:gugugu
* 备 注:连续模式使用前,调用此函数完成初始化,之后调用ADS1118_Get_ADC_Continuous_Data()
******************************************************************/
void ADS1118_ADC_Continuous_Init(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
MySPI_Init();
ADS1118_ENABLE;//拉低CS开始通信
delay_us(1);
MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Continuous_MODE
|SPS|ADS1118_Temp_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(10);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
delay_1ms(1);
}
/******************************************************************
* 函 数 名 称:ADS1118_Get_Tempture_Data()
* 函 数 说 明:单次获取ADC内部Temp温度
* 函 数 形 参:无
* 函 数 返 回:返回内部温度传感器温度
* 作 者:gugugu
* 备 注:无
******************************************************************/
float ADS1118_Get_Tempture_Data()
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
ADS1118_ENABLE;//拉低CS开始通信
delay_us(5);
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|ADS1118_MUX_AIN0|ADS1118_PGA_4096|
ADS1118_Sigle_SHOT_MODE|ADS1118_DR_8SPS|ADS1118_Temp_MODE|
ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(5);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
delay_1ms(1);
ADS1118_ENABLE;//拉低CS开始通信
delay_us(5);
while(gpio_input_bit_get(GPIOA,GPIO_PIN_6));//DOUT拉低ADC1118数据更新准备完毕
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|ADS1118_MUX_AIN0|ADS1118_PGA_4096|
ADS1118_Sigle_SHOT_MODE|ADS1118_DR_8SPS|ADS1118_Temp_MODE|
ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(5);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
if(ADC_Data&0X8000)//MSB=1
{
ADC_Data = (~ADC_Data)+1 ;
}
else Tempture_data = (ADC_Data >> 2)*0.03125;
return Tempture_data;
}
/******************************************************************
* 函 数 名 称:ADS1118_Get_ADC_SIGLE_SHOT_Data
* 函 数 说 明:单次获取AD电压值
* 函 数 形 参:channel = ADC外部通道选择,PGA = ADC满量程选择,SPS = ADC数据传输率选择
* 函 数 返 回:AD电压值
* 作 者:gugugu
* 备 注:
******************************************************************/
float ADS1118_Get_ADC_SIGLE_SHOT_Data(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
ADS1118_ENABLE;//拉低CS开始通信
delay_us(15);
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Sigle_SHOT_MODE
|SPS|ADS1118_ADC_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(15);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
delay_1ms(1);
ADS1118_ENABLE;//拉低CS开始通信
delay_us(15);
while(gpio_input_bit_get(GPIOA,GPIO_PIN_6));//DOUT拉低ADC1118数据更新准备完毕
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Sigle_SHOT_MODE
|SPS|ADS1118_ADC_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(15);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
if(ADC_Data&0X8000)//MSB=1
{
ADC_Data = (~ADC_Data)+1 ;
if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_4096)Tempture_data=ADC_Data*0.125;
else if(PGA == ADS1118_PGA_2048)Tempture_data=ADC_Data*0.0625;
else if(PGA == ADS1118_PGA_1024)Tempture_data=ADC_Data*0.03125;
else if(PGA == ADS1118_PGA_0512)Tempture_data=ADC_Data*0.015625;
else Tempture_data=ADC_Data*0.0078125;
return Tempture_data;
}
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_4096)Tempture_data=ADC_Data*0.125;
else if(PGA == ADS1118_PGA_2048)Tempture_data=ADC_Data*0.0625;
else if(PGA == ADS1118_PGA_1024)Tempture_data=ADC_Data*0.03125;
else if(PGA == ADS1118_PGA_0512)Tempture_data=ADC_Data*0.015625;
else Tempture_data=ADC_Data*0.0078125;
return Tempture_data;
}
/******************************************************************
* 函 数 名 称:ADS1118_Get_ADC_Continuous_Data
* 函 数 说 明:连续获取AD电压值
* 函 数 形 参:channel = ADC外部通道选择,PGA = ADC满量程选择,SPS = ADC数据传输率选择
* 函 数 返 回:AD电压值
* 作 者:gugugu
* 备 注:使用此函数前调用ADS1118_ADC_Continuous_Init()
******************************************************************/
float ADS1118_Get_ADC_Continuous_Data(uint16_t channel,uint16_t PGA,uint16_t SPS)
{
uint16_t ADC_Data = 0;
float Tempture_data= 0;
ADS1118_ENABLE;//拉低CS开始通信
delay_us(1);
while(gpio_input_bit_get(GPIOA,GPIO_PIN_6));//DOUT拉低ADC1118数据更新准备完毕
ADC_Data = MySPI_SwapByte(ADS1118_SS_START|channel|PGA|ADS1118_Continuous_MODE
|SPS|ADS1118_ADC_MODE|ADS1118_PUUP_EN|ADS1118_NOP_UPDATA);//发送寄存器命令,交换数据
delay_us(1);
ADS1118_DISABLE;//拉高CS复位ADS1118结束通信
if(ADC_Data&0X8000)//MSB=1
{
ADC_Data = (~ADC_Data)+1 ;
if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_4096)Tempture_data=ADC_Data*0.125;
else if(PGA == ADS1118_PGA_2048)Tempture_data=ADC_Data*0.0625;
else if(PGA == ADS1118_PGA_1024)Tempture_data=ADC_Data*0.03125;
else if(PGA == ADS1118_PGA_0512)Tempture_data=ADC_Data*0.015625;
else Tempture_data=ADC_Data*0.0078125;
return Tempture_data;
}
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_6144)Tempture_data=ADC_Data*0.1875;
else if(PGA == ADS1118_PGA_4096)Tempture_data=ADC_Data*0.125;
else if(PGA == ADS1118_PGA_2048)Tempture_data=ADC_Data*0.0625;
else if(PGA == ADS1118_PGA_1024)Tempture_data=ADC_Data*0.03125;
else if(PGA == ADS1118_PGA_0512)Tempture_data=ADC_Data*0.015625;
else Tempture_data=ADC_Data*0.0078125;
return Tempture_data;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
ADS1118.h
#ifndef __ADS1118_H
#define __ADS1118_H
#include "SPI.h"
#include "systick.h"
#define ADS1118_ENABLE MySPI_Start() //PULL DOWM CS START ADC
#define ADS1118_DISABLE MySPI_STOP() //PULL UP CS STOP ADC
#define ADS1118_SS_START 0X8000 //0--》NO effect,1-->start ADC
#define ADS1118_MUX_AIN0_AIN1 0X0000 //000 = AINP is AIN0 and AINN is AIN1 (default)
#define ADS1118_MUX_AIN0_AIN3 0x1000 //001 = AINP is AIN0 and AINN is AIN3
#define ADS1118_MUX_AIN1_AIN3 0X2000 //010 = AINP is AIN1 and AINN is AIN3
#define ADS1118_MUX_AIN2_AIN3 0X3000 //011 = AINP is AIN2 and AINN is AIN3
#define ADS1118_MUX_AIN0 0X4000 //100 = AINP is AIN0 and AINN is GND
#define ADS1118_MUX_AIN1 0X5000 //101 = AINP is AIN1 and AINN is GND
#define ADS1118_MUX_AIN2 0X6000 //110 = AINP is AIN2 and AINN is GND
#define ADS1118_MUX_AIN3 0X7000 //111 = AINP is AIN3 and AINN is GND
#define ADS1118_PGA_6144 0X0000 //000 = FSR is ±6.144 V
#define ADS1118_PGA_4096 0X0200 //001 = FSR is ±4.096 V
#define ADS1118_PGA_2048 0X0400 //010 = FSR is ±2.048 V (default)
#define ADS1118_PGA_1024 0X0600 //011 = FSR is ±1.024 V
#define ADS1118_PGA_0512 0X0800 //100 = FSR is ±0.512 V
#define ADS1118_PGA_0256 0X0A00 //101 = FSR is ±0.256 V
#define ADS1118_Continuous_MODE 0X0000 //0->Continuous
#define ADS1118_Sigle_SHOT_MODE 0X0100 //1->SIGNEL ADC
#define ADS1118_DR_8SPS 0X0000 //000 = 8 SPS
#define ADS1118_DR_16SPS 0X0020 //001 = 16 SPS
#define ADS1118_DR_32SPS 0X0040 //010 = 32 SPS
#define ADS1118_DR_64SPS 0X0060 //011 = 64 SPS
#define ADS1118_DR_128SPS 0X0080 //100 = 128 SPS (default)
#define ADS1118_DR_250SPS 0X00A0 //101 = 250 SPS
#define ADS1118_DR_470SPS 0X00C0 //110 = 475 SPS
#define ADS1118_DR_860SPS 0X00E0 //111 = 860 SPS
#define ADS1118_ADC_MODE 0x0000 //ADC MODE
#define ADS1118_Temp_MODE 0X0010 //Temperature sensor mode
#define ADS1118_PUUP_DIS 0X0000 //inside pullup disabled
#define ADS1118_PUUP_EN 0x0008 //inside pullup enabled
#define ADS1118_NOP_UPDATA 0X0002 //update the Config register
void ADS1118_ADC_Continuous_Init(uint16_t channel,uint16_t PGA,uint16_t SPS);
void ADS1118_Temp_Init();
float ADS1118_Get_Tempture_Data();
float ADS1118_Get_ADC_SIGLE_SHOT_Data(uint16_t channel,uint16_t PGA,uint16_t SPS);
float ADS1118_Get_ADC_Continuous_Data(uint16_t channel,uint16_t PGA,uint16_t SPS);
#endif
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2.63.5 移植验证
编写的 main 主函数中,编写如下。
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LCKFB
* 修改日期: 2022年04月19日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "systick.h"
#include "stdio.h"
#include "UART.h"
#include "ADS1118.h"
#include "SPI.h"
int main(void)
{
float AD_value;
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组
systick_config(); //滴答定时器初始化 1us
MySPI_Init(); //初始化spi
ADS1118_ADC_Continuous_Init(ADS1118_MUX_AIN0 ,ADS1118_PGA_4096,ADS1118_DR_8SPS);
usart_gpio_config(115200);
while(1)
{
AD_value = ADS1118_Get_ADC_SIGLE_SHOT_Data(ADS1118_MUX_AIN0 ,ADS1118_PGA_4096,ADS1118_DR_8SPS);
//AD_value = ADS1118_Get_Tempture_Data();
printf("%f",AD_value);
delay_1ms(100);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
案例现象 1:
烧录代码,使用 debug 模式,成功读取返回温度值。
案例现象 2:
烧录代码,使用 debug 模式,成功读取返回单端电压值。
案例现象 3:
烧录代码,使用 debug 模式,成功读取返回差分电压值。
案例现象 4:
烧录代码,使用 debug 模式,连续模式成功读取返回单端电压值。
移植成功示例代码工程文件,见下方文件 。