OpenEdv-开源电子网

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

用spi协议控制lmh6881的增益的问题

[复制链接]

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-24
在线时间
0 小时
发表于 2015-10-22 09:57:22 | 显示全部楼层 |阅读模式
5金钱
战舰开发板的spi程序下到板子是正常的,但是测试sclk却没有波形是什么原因。现在我自己做了一块板子,想用spi来控制放大器的增益,却写不进去值,高手们帮我解决一下,有什么低级的问题请见谅。下面是我用放大器spi部分的Datasheet




问题:1,频率36Mhz,所以二分频对不对?
          2,SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
               SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
              我这个手册也反复读过,但求正确性,希望好心人帮我看看,这两句应该怎么设置才对。
          3,我之前测出过clk的波形,以及mosi的波形,但现在怎么也测不出来,甚至连战舰开发板的例程也不行了,是什么情况
          4,我这样八位数据那样发送可不可以?

程序如下:
[mw_shl_code=c,true]void SPIx_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure;         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE ); //复用功能使能      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);         GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收16位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //定义波特率预分频的值:波特率预分频值为2 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 SPI_Init(SPI1, &SPI_InitStructure); //根据SPI_InitStruct中指定的参数初始化外设SPI1寄存器 SPI_Cmd(SPI1, ENABLE); //使能SPI外设 SPIx_ReadWriteByte(0xff); //启动传输 }
[mw_shl_code=c,true]void SPI_lmh6881_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //SPI CS GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_4); SPIx_Init(); //初始化SPI } void SPI_LMH6881_Enable(void) { SPI_LMH6881_CS=0; //使能器件     SPIx_ReadWriteByte(0x04); //发送写使能,寄存器2的写功能,写零放大器工作 SPIx_ReadWriteByte(0x00); SPI_LMH6881_CS=1; } u16 SPI_lmh6881_WriteData(void) { u16 Temp =0; SPI_LMH6881_CS=0; SPIx_ReadWriteByte(0x08); Temp=SPIx_ReadWriteByte(0x41); SPI_LMH6881_CS=1; return Temp; } [/mw_shl_code]



[/mw_shl_code]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-24
在线时间
0 小时
 楼主| 发表于 2015-10-22 13:52:47 | 显示全部楼层
spi最大时钟18MHz,这个我看到了,所以频率要改,我试一下
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-24
在线时间
0 小时
 楼主| 发表于 2015-10-23 12:07:14 | 显示全部楼层
今天我又自己仔细的看了手册,应该设置cpol=0,cpha=0才是lmh6881的正确的方式,然而读取lmh6881的id时,却仍然不行,不知道什么原因,求解。遇到的问题就是读取命令下完,Temp=SPI_LMH6881_ReadData();返回的永远都是命令字以后的那个数据,写什么返回什么。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-25 22:23:55 | 显示全部楼层
帮顶.....
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-24
在线时间
0 小时
 楼主| 发表于 2015-10-26 09:24:36 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥为什么不帮我解答下,我现在又试了全部的时钟极性和相位的组合,发现返回的值都是一样的,而且是在没有从芯片的状态下,有没有人告诉我我什么地方没弄好吗我一会儿把我测到的波形上传
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-24
在线时间
0 小时
 楼主| 发表于 2015-10-26 09:33:44 | 显示全部楼层


这两个一个是sclk,是72兆时钟频率的   32分频,还有一个就是写入命令0x08.写入值0x55.这样看好像没问题,可是放大器不工作,帮我看看,谢谢了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 17:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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