完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在用ADS1271EVM,该模块是24位的adc,该模上有两个DAS1271以菊花链式连接的,我打算用STM32F446的SPI来连接该模块。我查了手册得知ADS1271进行SPI接口模式配置后,在改芯片的VRVD脚为低电平时,就可以从读取Dout脚接收数据,但是STM32的SPI有两个数据传输引脚 MISO、MOSI。这个怎么连接呀?不晓得怎么进行通讯了,请问有人用过吗?该怎么解决呢?
|
|
相关推荐
23个回答
|
|
夜辰云 发表于 2017-3-13 12:53 给你个连接这里面有一些资料,官网也有相应的资,可以直接下载的。http://bbs.21ic.com/forum.php?mod=viewthread&tid=873835&highlight=ads1271 |
|
|
|
楼主,解决了吗?求分享源程序……
|
|
|
|
谢谢楼主
|
|
|
|
程序没什么特别的,就是一般的SPI配置, #include "ads1271.h" #include "spi.h" #include "delay.h" #include "usart.h" u16 len=0; u32 voltage_buf1[200]; u32 voltage_buf2[200]; void gpio_point_out(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//使能GPIOC时钟 //GPIOC GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15; //引脚 10/11/12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);//高 GPIO_ResetBits(GPIOC,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_14|GPIO_Pin_15);//低 //GPIOD GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化 GPIO_SetBits(GPIOD,GPIO_Pin_2);//高 //GPIOB GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_10; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 GPIO_SetBits(GPIOB,GPIO_Pin_10);//高 GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);//低 } /*外部中断0服务程序********************************* 读取adc1,adc2数据 */ void EXTI15_10_IRQHandler(void) { u8 i; u8 str[6]; freq=0; if(start==0) { for(i=0;i<6;i++) { str=SPI1_ReadWriteByte(0xff);//启动传输 } } voltage_buf1[len]=(str[0]<<16)|(str[1]<<8)|(str[2]); //将adc1读取的数据存放在数组中 voltage_buf2[len]=(str[3]<<16)|(str[4]<<8)|(str[5]); //将adc2读取的数据存放在数组中 len++; if(len>200) { len=201; } EXTI_ClearITPendingBit(EXTI_Line10); //清除LINE0上的中断标志位 freq=1; } /*用中断接收,初始化PA10为中断输入脚*/ void ads1271_exit(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource10);//PA10 连接到中断线10 //GPIOA DRDY输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //DRDY对应引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOC13 /* 配置EXTI_Line10 */ EXTI_InitStructure.EXTI_Line = EXTI_Line10; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能 EXTI_Init(&EXTI_InitStructure);//配置 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//外部中断15_10 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 } /*将采集的数据传给上位机********************************** num 1 传输第一个adc的数据 2 传输第二个adc的数据*/ void display_voltage(u8 num) { u16 i; u16 xiaoshu; u32 voltage1; u32* buf; float voltage2; if(num==1) { buf=voltage_buf1; } else if(num==2) { buf=voltage_buf2; } for(i=0;i voltage1=buf; if((voltage1&0x00800000)!=0x00000000) //若为负电压,则进行转化为源码 { voltage1&=0x007fffff; voltage1-=1; voltage1=~voltage1; voltage1&=0x007fffff; printf("-"); } voltage2=(float)voltage1*(2.5/8388607); //计算出十进制电压值 voltage1=voltage2; //整数部分 voltage2-=voltage1; //小数部分 xiaoshu=voltage2*1000; //保留3位小数 printf("%d",voltage1); printf("."); printf("%drn",xiaoshu); } delay_ms(1000); } |
|
2 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
316 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
834 浏览 2 评论
1996 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1099 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1525 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 02:24 , Processed in 0.682112 second(s), Total 67, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号