完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
任务需求:在一个CS周期内需要32个SPI 的sclk,但是根据spi的配置程序,最多实现16个SCLK。 请问如何实现在一个CS周期内产生32个sclk???
程序代码: //SPI初始化 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; //双线只接受 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式 SPI3->CR1|=1<<10; //只接受 SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //设置SPI的数据大小 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(AD_SPI, &SPI_InitStructure); 主程序: while (1) { GPIO_ResetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //CS=0 Delay(5); SPI_Cmd(AD_SPI, ENABLE); //SPI使能 data= SPIx_ReadWriteByte(); // 返回SPI_DR数据 SPI_Cmd(AD_SPI, DISABLE); //SPI失能 Delay(120); //增加延时 GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //CS=1 Delay(5); } 波形图: |
|
相关推荐
13个回答
|
|
对的对的,要遵循协议才行。谢谢提醒,
|
|
|
|
儿科知识了
|
|
|
|
很简单的问题
|
|
|
|
|
|
|
|
需要开启DMA连续发送,CLK才能连续,如果等发等发,绝逼会有间隔得
|
|
|
|
您说的很对。在我对采样速度有要求的时候,用到SPIx_ReadWriteByte2 ();里面总有查询等待的过程。去掉等待速度能提高,但是又不能产生指定的波形(很矛盾)。
所以再尝试下,DMA 发送数据的方式,可以避免状态位的查询,同时用另一个DMA接收,希望能成功。谢谢您!!! (这就是那个写和收的SPI数据传输的函数) u16 SPIx_ReadWriteByte2 (u16 byte) //SPI双工,收发数据 { SPITimeout = SPIT_FLAG_TIMEOUT; /* 等待发送缓冲区为空,TXE事件 */ while (SPI_I2S_GetFlagStatus(AD_SPI, SPI_I2S_FLAG_TXE) == RESET) { if((SPITimeout--) == 0) return 0; } /*写入数据寄存器,把要写的数据写入发送缓冲区 */ SPI_I2S_SendData(AD_SPI, byte); /* 等待接收缓冲区非空,RXNE事件*/ SPITimeout = SPIT_FLAG_TIMEOUT; while (SPI_I2S_GetFlagStatus(AD_SPI, SPI_I2S_FLAG_RXNE) == RESET) { if((SPITimeout--) == 0) return 0; //等待超时 } return SPI_I2S_ReceiveData(AD_SPI); //返回数据 } |
|
|
|
CS状态是你自己软件控制的,随便读或者写4个字节的数据,就会产生32个SCLK
|
|
|
|
我不知道你为什么要产生32个SCLK,如果是为了传递4个字节,看外设是否支持Dual SPI或者Quad SPI Mode?
|
|
|
|
谢谢您的回复。我选择标准SPI的方式产生指定的波形。只不过现在还没有实现,正在调试过程中......
这个是为了满足AD芯片的时序,既然芯片有这个时序,那么就能支持您说的Dual或者Quad MODE吧。 |
|
|
|
|
|
|
|
很简单的东西
|
|
|
|
不难的了哦,
|
|
|
|
自己好好看看了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1980 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1836 浏览 3 评论
4416 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1985 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2489 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 14:25 , Processed in 0.899291 second(s), Total 99, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号