中级会员
 
- 积分
- 224
- 金钱
- 224
- 注册时间
- 2014-8-15
- 在线时间
- 2 小时
|
5金钱
我的spi发送函数如下,我想发送16位数据,用逻辑分析仪观察了,是发送了16位,但是真正应用的数据和预想的有偏差:
void spi_sendbyte(u16 va)
{
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_BSY)==SET);
SPI_I2S_SendData(SPI2,va);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_BSY)==SET);
SPI_I2S_ReceiveData(SPI2);
if(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET)
{
GPIO_SetBits(GPIOB,GPIO_Pin_14);
Delay(5);
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
}
}
之所以加了以下这一段,是想在spi发送结束后使PB14引脚产生一个脉冲,但是测试结果发现,PB14脉冲不是在spi发送结束后才产生,而是和spi发送第一位数据的同时产生,不知道如何检测spi发送结束。
if(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET)
{
GPIO_SetBits(GPIOB,GPIO_Pin_14);
Delay(5);
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
}
|
最佳答案
查看完整内容[请看2#楼]
TC or RXNE
发送完成 或 接收非空 表示总线上真正传输完成。
TXE仅表示移位寄存器空了,可以填入新数据了。
|