OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8878|回复: 4

STM32的SPI与AD7190通信

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-5-31
在线时间
0 小时
发表于 2015-6-1 23:14:21 | 显示全部楼层 |阅读模式
5金钱
STM32连接AD7190,使用SPI传输数据,连续转换也要保证足够的转换时间和读取转换结果的时间,但是STM32的输入引脚MISO设置的是复用功能,而且MISO连接的是AD7190的DOUT/RDY,如何根据DOUT/RDY的输出电平进行判断转换完成和读取完成。求高手指教

最佳答案

查看完整内容[请看2#楼]

我操作 AD7606 是用的虚拟SPI通信的。楼主干嘛非要硬件SPI来驱动呀。虚拟的速度就足够了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-6-1 23:14:22 | 显示全部楼层
我操作 AD7606 是用的虚拟SPI通信的。楼主干嘛非要硬件SPI来驱动呀。虚拟的速度就足够了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-6-2 17:44:14 | 显示全部楼层
[mw_shl_code=c,true] [/mw_shl_code]
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-6-2 17:46:40 | 显示全部楼层
[mw_shl_code=c,true] [/mw_shl_code]
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-6-2 17:55:02 | 显示全部楼层
[mw_shl_code=c,true]#ifndef __AD7863_H[/mw_shl_code] [mw_shl_code=c,true]#define __AD7863_H #include "sys.h" #define AD7863_A0 PCout(11) #define AD7863_RD PAout(14) //n #define AD7863_CS PAout(15) //n #define AD7863_CNVST PBout(5) //n #define AD7863_BUSY PEin(2) //所有操作函数 void delay_t(int len); void AD7863_Init(void);//初始化 void READ_AD7863(u16 *g_buf1,u16 *g_buf2,u16 *g_buf3,u16 *g_buf4); #endif [/mw_shl_code]
[mw_shl_code=c,true]#include "ad7863.h" #include "sys.h" #include "delay.h" ////////////////////////////////////////////////////////////////////////////////// //修改日期:2014/10/24 //公司: //编者:fanghui ////////////////////////////////////////////////////////////////////////////////// void AD7863_Init(void)//初始化 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE); //使能PA端口 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_14|GPIO_Pin_15); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_11); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8\ |GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8\ |GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_2); // AD7863_CNVST = 1; // AD7863_RD = 1; // AD7863_CS = 1; } void delay_t(int len){ // while(len--){ // __nop(); // } while(len--); } void READ_AD7863(u16 *g_buf1,u16 *g_buf2,u16 *g_buf3,u16 *g_buf4) { //AD1 AD2 AD3 AD4 ---- //B2 A2 A1 B1 ---- 硬件上是这样连接的 // 0---- 8191 0 --- 10 V //8192----16383 -10 V--- 0 /* AD>8191 16383-AD */ u8 busy_kk=0; u16 Temp = 0; AD7863_CNVST = 1; AD7863_RD = 1; AD7863_CS = 1; //--------------------------------------------- //------SET A0 TO 0 READ VA1 & VA2 ------------ //--------------------------------------------- AD7863_A0=0; delay_t(2); AD7863_CNVST=0; //__nop(); //__nop(); AD7863_CNVST=1; //delay_t(20); while(AD7863_BUSY!=0){ busy_kk++; if(busy_kk>100) break; } busy_kk=0; AD7863_CS=0; //read VA1 AD7863_RD=0; delay_t(1); Temp=GPIO_ReadInputData(GPIOD); *g_buf3=Temp&0x3FFF; delay_t(1); AD7863_RD=1; AD7863_CS=1; delay_t(1); AD7863_CS=0; //read VA2 AD7863_RD=0; delay_t(1); Temp=GPIO_ReadInputData(GPIOD); *g_buf2=Temp&0x3FFF; delay_t(1); AD7863_RD=1; AD7863_CS=1; delay_t(5); //--------------------------------------------- //------SET A0 TO 1 READ VB1 & VB2 ------------ //--------------------------------------------- AD7863_A0=1; delay_t(2); AD7863_CNVST=0; //__nop(); //__nop(); AD7863_CNVST=1; //delay_t(20); while(AD7863_BUSY!=0){ busy_kk++; if(busy_kk>100) break; } busy_kk=0; AD7863_CS=0; //read VB1 AD7863_RD=0; delay_t(1); Temp=GPIO_ReadInputData(GPIOD); *g_buf4=Temp&0x3FFF; delay_t(1); AD7863_RD=1; AD7863_CS=1; delay_t(1); AD7863_CS=0; //read VB2 AD7863_RD=0; delay_t(1); Temp=GPIO_ReadInputData(GPIOD); *g_buf1=Temp&0x3FFF; delay_t(1); AD7863_RD=1; AD7863_CS=1; delay_t(5); } [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code]
[mw_shl_code=c,true]这个AD7863是虚拟SPI的驱动的。 [/mw_shl_code]

原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 20:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表