#include"stm32f10x_conf.h"
/*代码说明
*参考代码基于STM32F103XX,主频为72MHz
*代码使用IO模拟SPI,仅与四个IO有关
*Delay(100);的延时长度约为25us
*寄存器操作逻辑描述:首先写入通信寄存器,指示读取或写入、所操作寄存器地址,随后读取或写入1Byte或3Byte数据。
*/
#define AD7124_8_CS_H GPIO_SetBits(GPIOD,GPIO_Pin_0)
#define AD7124_8_CS_L GPIO_ResetBits(GPIOD,GPIO_Pin_0)
#define AD7124_8_SCLK_H GPIO_SetBits(GPIOD,GPIO_Pin_1)
#define AD7124_8_SCLK_L GPIO_ResetBits(GPIOD,GPIO_Pin_1)
#define AD7124_8_DIN_H GPIO_SetBits(GPIOD,GPIO_Pin_2)
#define AD7124_8_DIN_L GPIO_ResetBits(GPIOD,GPIO_Pin_2)
#define AD7124_8_DOUT GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_4)
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 nCount);
void AD7124_8_Reset(void);
void LED_TEST(void);//AD7124_8的 PSW 上连接的LED,控制LED闪烁
void read_reg(void);//读取配置寄存器与模式寄存器值,结果存于全局变量conf_reg[3]、mode_reg[3]中
void AD7124_8_INIT(void);
void AD7124_8_INIT1(void);//多通道配置
void AD7124_8_Write(uint8_t Data);
uint32_t AD7124_8_Read(void);//读取结果函数,返回uint32_t 类型结果
uint8_t AD7124_8_Read_Byte(void);//字节读取函数
uint8_t AD7124_8_ID;//复位值为0x12或0x14;
uint32_t Data;
float data_temp,Vol;
float VolM[8];
uint8_t DATA_STATUS;
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
AD7124_8_Reset();//复位AD7190数字接口
Delay(100);
/*
AD7124_8_CS_L;
Delay(10);
AD7124_8_Write(0x45);//读取ID寄存器
AD7124_8_ID=AD7124_8_Read_Byte();//读取AD7124-8 ID = 0x12/0x14
AD7124_8_CS_H;
*/
AD7124_8_INIT1();//多通道初始化函数
while (1)
{
//LED_TEST();
while(AD7124_8_DOUT);//低电平时数据就绪
Data=AD7124_8_Read();//Data采集结果
DATA_STATUS=AD7124_8_Read_Byte()&0x0F;//获取通道信息
data_temp=Data;
VolM[DATA_STATUS]=(data_temp-0x800000)/0x800000*2.5;//读取8通道转换数据,AIN0-AIN1为通道1,AIN2-AIN3为通道2,以此类推
}
}
void AD7124_8_INIT(void)//单通道配置
{
AD7124_8_CS_L;
Delay(100);
AD7124_8_Write(0x09);//写入通道寄存器0 CHANNEL_0 (datasheet Page 86)
AD7124_8_Write(0x80);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_0配置当前通道。ADC链接与AIN0与AIN1
AD7124_8_Write(0x01);
AD7124_8_Write(0x19);//写入配置寄存器0 CONFIG_0;(datasheet Page 88)
AD7124_8_Write(0x09);//选择双极型模式、关闭检测电流源、使能REF BUF与AIN BUF,选择内部基准源,增益配置为+-2.5V;
AD7124_8_Write(0xf0);
AD7124_8_Write(0x21);//写入滤波寄存器寄存器,FILTER_0 (datasheet Page 89)
AD7124_8_Write(0x06);//使用SINC4 滤波器
AD7124_8_Write(0x00);
AD7124_8_Write(0x80);//FS=128,因此数据输出速率 = 614.4K/(32*128)= 150Hz
AD7124_8_Write(0x01);//写入ADC控制寄存器,ADC_CONTROL (datasheet Page 78)
AD7124_8_Write(0x09);//使能连续读取,使能内部基准,全功率模式,使用内部614.4kHz时钟源,连续工作模式。
AD7124_8_Write(0xC0);
}
void AD7124_8_INIT1(void)//多通道配置
{
AD7124_8_CS_L;
Delay(100);
AD7124_8_Write(0x09);//写入通道寄存器0 CHANNEL_0 (datasheet Page 86)
AD7124_8_Write(0x80);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_0配置当前通道。ADC链接与AIN0与AIN1
AD7124_8_Write(0x01);
AD7124_8_Write(0x0A);//写入通道寄存器1 CHANNEL_1
AD7124_8_Write(0x80);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_1配置当前通道。ADC链接与AIN2与AIN3
AD7124_8_Write(0x43);
AD7124_8_Write(0x0B);//写入通道寄存器2 CHANNEL_2
AD7124_8_Write(0x80);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_2配置当前通道。ADC链接与AIN4与AIN5
AD7124_8_Write(0x85);
AD7124_8_Write(0x0C);//写入通道寄存器3 CHANNEL_3
AD7124_8_Write(0x80);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_3配置当前通道。ADC链接与AIN6与AIN7
AD7124_8_Write(0xC7);
AD7124_8_Write(0x0D);//写入通道寄存器4 CHANNEL_4
AD7124_8_Write(0x81);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_4配置当前通道。ADC链接与AIN8与AIN9
AD7124_8_Write(0x09);
AD7124_8_Write(0x0E);//写入通道寄存器5 CHANNEL_5
AD7124_8_Write(0x81);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_5配置当前通道。ADC链接与AIN10与AIN11
AD7124_8_Write(0x4B);
AD7124_8_Write(0x0F);//写入通道寄存器6 CHANNEL_6
AD7124_8_Write(0x81);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_6配置当前通道。ADC链接与AIN12与AIN13
AD7124_8_Write(0x8D);
AD7124_8_Write(0x10);//写入通道寄存器7 CHANNEL_7
AD7124_8_Write(0x81);//使能通道,当有多个通道被使能时,自动按顺序转换;使用CONFIG_7配置当前通道。ADC链接与AIN14与AIN15
AD7124_8_Write(0xCF);
//注:在通道寄存器中可指定所使用的配置寄存器(或称设置寄存器),配置寄存器与滤波寄存器对应关联。
AD7124_8_Write(0x19);//写入配置寄存器0 CONFIG_0;(datasheet Page 88)
AD7124_8_Write(0x09);//选择双极型模式、关闭检测电流源、使能REF BUF与AIN BUF,选择内部基准源,增益配置为+-2.5V;
AD7124_8_Write(0xf0);
AD7124_8_Write(0x21);//写入滤波寄存器寄存器,FILTER_0 (datasheet Page 89)
AD7124_8_Write(0x06);
AD7124_8_Write(0x00);
AD7124_8_Write(0x80);//FS=128,使用多通道序列器时,转换时间为建立时间的总和,建立时间大于转换时间。
AD7124_8_Write(0x01);//写入ADC控制寄存器,ADC_CONTROL (datasheet Page 78)
AD7124_8_Write(0x0D);//使能连续读取,使能内部基准,全功率模式,使用内部614.4kHz时钟源,连续工作模式,使能 DATA_STATUS以输出状态寄存器,用于分辨通道数据
AD7124_8_Write(0xC0);
}
void LED_TEST(void)//AD7124_8的 PSW 上连接的LED,控制LED闪烁
{
AD7124_8_CS_L;
Delay(10);
AD7124_8_Write(0x03);//写入 IO_CONTROL_1寄存器,复位值为0x000000
AD7124_8_Write(0x00);//写入3字节 IO_CONTROL_1寄存器值
AD7124_8_Write(0x80);
AD7124_8_Write(0x00);
AD7124_8_CS_H;
Delay(1000000);//约0.5S延时
AD7124_8_CS_L;
Delay(10);
AD7124_8_Write(0x03);
AD7124_8_Write(0x00);
AD7124_8_Write(0x00);
AD7124_8_Write(0x00);
AD7124_8_CS_H;
Delay(1000000);
}
void AD7124_8_Write(uint8_t Data)
{
uint8_t data;
data=Data;
for(uint8_t i=0;i<8;i++)
{
AD7124_8_SCLK_L;
if(data&0x80)
AD7124_8_DIN_H;
else
AD7124_8_DIN_L;
Delay(100);
AD7124_8_SCLK_H;
Delay(100);
data<<=1;
}
}
uint32_t AD7124_8_Read(void)
{
uint32_t DATA;
DATA=0;
for(uint8_t i=0;i<24;i++)
{
DATA<<=1;
AD7124_8_SCLK_L;
Delay(50);
if(AD7124_8_DOUT)
DATA++;
AD7124_8_SCLK_H;
Delay(50);
}
Delay(100);
return DATA;
}
uint8_t AD7124_8_Read_Byte(void)
{
uint8_t DATA;
DATA=0;
for(uint8_t i=0;i<8;i++)
{
DATA<<=1;
AD7124_8_SCLK_L;
Delay(100);
if(AD7124_8_DOUT)
DATA++;
AD7124_8_SCLK_H;
Delay(100);
}
Delay(100);
return DATA;
}
void AD7124_8_Reset(void)
{
AD7124_8_CS_L;
AD7124_8_DIN_H;
for(uint8_t a=0;a<65;a++)//提供大于64个写操作,复位AD7124-8
{
AD7124_8_SCLK_L;
Delay(10);
AD7124_8_SCLK_H;
Delay(10);
}
AD7124_8_CS_H;
}
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08) { }
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOD, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz
STM32驱动AD7124单通道和多通道源码.rar
3星 · 超过75%的资源 需积分: 5 126 浏览量
2020-03-01
12:30:25
上传
评论 8
收藏 5KB RAR 举报
Sampkia
- 粉丝: 36
- 资源: 34
最新资源
- vsftpd 无依赖安装包
- 老照片修复教程(带资料),再也不用去照相馆修复了!-教程网盘链接提取码下载 .txt
- AI认知课+AI工具实战课,理论结合实操一门课全搞定-视频课程资源网盘链接提取码下载 .txt
- IP切片带货5.0,图文玩法,制作更加简单,流量更大,日入1000+-教程网盘链接提取码下载 .txt
- 2服务注册中心Nacos应用实践
- 2024年3月份GESP1~8级编程题题干+数据
- STM32单片机FPGA毕设电路原理论文报告一种建立单片机应用系统菜单的新方法
- 诊所医院超常规运营管理思维,课程+直播+社群+连麦+实操-教程网盘链接提取码下载 .txt
- STM32单片机FPGA毕设电路原理论文报告一种简单方法实现基于STC89C52RC单片机的频率计
- 使用Dbeaver连接GaussDB(DWS)-PostGresql驱动包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页