完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是写入,发送,和读状态函数
/************向LMH6401 中写入一个字节*************************1*/ void W_LMH6401_byte(unsigned char date) { unsigned char temp; unsigned char i; temp = date; for (i = 0; i < 8; i++) { SCK_0 ; if((temp&0x80)==0x80) { MOSI_1; } else { MOSI_0; } SCK_1 ; temp <<= 1; } MOSI_0; } /********************读取LMH6401 一个字节***********************2*/ unsigned char R_LMH6401_byte(void) { unsigned char temp=0; unsigned char i,SDI; for(i = 0; i < 8; i++) { temp <<= 1; SCK_0 ; SDI = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6); if(SDI) {temp++; } // else {printf("nr output low data nr");} SCK_1 ; } return(temp); } /*******************读取LMH6401 状态**************************3*/ unsigned char LMH6401_status(u8 addr) { unsigned char status; DF_CS_0; //片选打开 delayus(10); W_LMH6401_byte(addr); //D7H是读取状态的命令字 status = R_LMH6401_byte(); //读取状态字节 DF_CS_1; //片选关闭 delay(500); return status; } 下面是读写的操作时序图 下面是寄存器 发送00,应该返回03,但是毫无反应无返回,发送其他指令也是 还有一个问题就是,如何发送7位地址,请各位帮忙解答一下 |
|
相关推荐
6个回答
|
|
你理解有误,地址和数据在同一串码中。
当片选有效后,发送的前8个位就是地址,接着往后的8个位是第一个数据,再8位是地址加1后的第二个数据,依此类推……,直到片选撤销。 写数据的同时,也在读数据,只是写走的是MOSI(SDI)、读走的是MISO(SDO)线。也就是说,给某个地址写入数是A,读时读出来的是B,相当于把数据更新了。如果想恢复数据,再次写入B,即可。 |
|
|
|
zhouxk 发表于 2019-4-18 12:10 四通道的,数据发送正确,可同时看CS,DIO,DO,CLK四路信号。三路正常,但是没返回。元件测试过没问题,默认增益2dB,尝试直接写数据,但是增益不变.发的是地址0x02,数据是0x14,查表知应该增益为14C:UsersyangzDesktopQQ截图20170617091144.png |
|
|
|
zhouxk 发表于 2019-4-18 12:10 刚才回复的图 |
|
|
|
本帖最后由 toofree 于 2017-6-17 14:52 编辑 不知道你想做什么?是真的想解决问题吗? 程序太零散,并且程序和时序不一致。 示波器显示一个SPI时钟是2ms多一点,程序里并没有任何延时,不可能跑这么慢。 接收程序里没看到你发送数据的移位,但示波器波形显示,你接收时,肯定发送数据了。 波形中没有看到你的CS信号变化,但是程序中有DF_CS_0,DF_CS_1,姑且认为你有波形并且正确吧。片选到来后的连续8位为地址。 从你波形看,你的确是发的地址0x02,数据0x14,查表增益为6db。 接收信号线数据一直为0,有可能是IO方向没设对。正常情况下,不可能一直是零,没有片选的情况下,要么是高阻态,要么是弱上拉电平,很少会一直是低电平情况。SPI初始化函数没有给出来,不知道你都做了什么? |
|
|
|
真不好意思。我的代码贴的不对,我贴的是我最开始写的。后来用的是这个。你看到的波形就是这个程序
这个现在贴上正确的代码 #include "stm32f10x.h" #include "bsp_usart.h" #define SPI_RFID_CS_PORT_A GPIOA //CS #define SPI_RFID_CLK_PORT_A GPIOB //CLK #define SPI_RFID_MISO_PORT_A GPIOA //MISO #define SPI_RFID_MOSI_PORT_A GPIOB //MOSI #define SPI_RFID_CS_A GPIO_Pin_4 #define SPI_RFID_CLK_A GPIO_Pin_12 #define SPI_RFID_MISO_A GPIO_Pin_11 #define SPI_RFID_MOSI_A GPIO_Pin_13 #define Rfid_Cs_High_A() GPIO_SetBits(SPI_RFID_CS_PORT_A,SPI_RFID_CS_A) #define Rfid_Cs_Low_A() GPIO_ResetBits(SPI_RFID_CS_PORT_A,SPI_RFID_CS_A) #define Rfid_MOSI_High_A() GPIO_SetBits(SPI_RFID_MOSI_PORT_A,SPI_RFID_MOSI_A ) #define Rfid_MOSI_Low_A() GPIO_ResetBits(SPI_RFID_MOSI_PORT_A,SPI_RFID_MOSI_A ) #define Rfid_Clk_High_A() GPIO_SetBits(SPI_RFID_CLK_PORT_A,SPI_RFID_CLK_A ) #define Rfid_Clk_Low_A() GPIO_ResetBits(SPI_RFID_CLK_PORT_A,SPI_RFID_CLK_A ) #define Rfid_MISO_High_A() GPIO_SetBits(SPI_RFID_MISO_PORT_A,SPI_RFID_MISO_A ) #define Rfid_MISO_Low_A() GPIO_ResetBits(SPI_RFID_MISO_PORT_A,SPI_RFID_MISO_A) #define Rfid_MISO_In_A() GPIO_ReadInputDataBit(SPI_RFID_MISO_PORT_A,SPI_RFID_MISO_A ) u8 ID = 0; //void SPI_FLASH_Init1(void); //u8 SPIx_FLASH_SendByte(u8 byte); void InitRfid_A(void); u8 RfidReadByte_A(u8 byte); void RfidWriteByte_A(u8 addr,u8 data); void Delay(__IO uint32_t nCount); /** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { u8 ID = 0; // u8 j = 0; /*初始化USART 配置模式为 115200 8-N-1,中断接收*/ USART_Config(); InitRfid_A(); Delay(720000); //RfidWriteByte_A(0x00); // for(j=0;j<100;j++) // { //ID = RfidReadByte_A(0x00); /* 发送一个字符串 */ Usart_SendString( DEBUG_USARTx,"这是一个读LMH6401 ID实验n"); RfidWriteByte_A(0x02,0x0e); RfidWriteByte_A(0x02,0x0e); RfidWriteByte_A(0x02,0x0e); RfidWriteByte_A(0x02,0x0e); // printf("ID = %dnnnn",ID); // } while(1) { } } void InitRfid_A(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable and GPIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* Configure SPI Simulation pins: CS*/ GPIO_InitStructure.GPIO_Pin = SPI_RFID_CS_A ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(SPI_RFID_CS_PORT_A, &GPIO_InitStructure); /* Configure SPI Simulation pins: CLK*/ GPIO_InitStructure.GPIO_Pin = SPI_RFID_CLK_A; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(SPI_RFID_CLK_PORT_A, &GPIO_InitStructure); /* Configure SPI Simulation pins: MISO */ GPIO_InitStructure.GPIO_Pin = SPI_RFID_MISO_A; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(SPI_RFID_MISO_PORT_A, &GPIO_InitStructure); /* Configure SPI Simulation pins: MOSI */ GPIO_InitStructure.GPIO_Pin = SPI_RFID_MOSI_A; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(SPI_RFID_MOSI_PORT_A, &GPIO_InitStructure); /* Deselect the RC523: Chip Select high, Chip*/ Rfid_Cs_High_A(); Rfid_MOSI_Low_A(); Rfid_Clk_Low_A(); } u8 RfidReadByte_A(u8 byte) { int i; u8 ch = 0 ; Rfid_Cs_Low_A(); Rfid_Clk_Low_A(); Delay(7200); for(i = 15; i >= 0; i--) { if(i>7) { //MSB优先 if((byte >> i-8) & 0x01) Rfid_MOSI_High_A(); else Rfid_MOSI_Low_A(); //时钟高有效,上升沿保持稳定输入。 Rfid_Clk_Low_A(); Delay(7200); Rfid_Clk_High_A(); Delay(7200); } else { //时钟有效时,通知Slave预备数据 Rfid_Clk_Low_A(); Delay(7200); Rfid_Clk_High_A(); Delay(7200); //MSB优先,上升沿采集数据。 ch = (ch << 1)| Rfid_MISO_In_A(); } } Rfid_Clk_Low_A(); Rfid_Cs_High_A(); Delay(7200); return ch ; } void RfidWriteByte_A(u8 addr,u8 data) { int i ; for(i = 15; i >= 0; i--) { if(i>7) { //MSB优先 if((addr >> i-8) & 0x01) Rfid_MOSI_High_A(); else Rfid_MOSI_Low_A(); //时钟高有效,上升沿保持稳定输入。 Rfid_Clk_Low_A(); Delay(7200); Rfid_Clk_High_A(); Delay(7200); } else { //MSB优先 if((data >> i) & 0x01) Rfid_MOSI_High_A(); else Rfid_MOSI_Low_A(); //时钟高有效,上升沿保持稳定输入。 Rfid_Clk_Low_A(); Delay(7200); Rfid_Clk_High_A(); Delay(7200); } } Delay(7200); Rfid_Clk_Low_A(); Rfid_MOSI_High_A(); } void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } |
|
|
|
你好,调好了吗?可以参考下程序吗?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1049 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1017 浏览 2 评论
2123 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1219 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1639 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 18:01 , Processed in 0.709204 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号