发新帖我要提问
123
返回列表
打印

想请教一个关于STM32 SPI时钟的问题

[复制链接]
楼主: adofu2008
手机看帖
扫描二维码
随时随地手机跟帖
41
香水城| | 2010-8-13 11:17 | 只看该作者 回帖奖励 |倒序浏览
这个笔误可是致命伤!

再说33楼的程序段是一个25次的循环,每次循环发送2个字节并接收一个字节,即共发送2x25=50字节,接收25字节;这个过程好像与25楼的时序图不一致,:@

使用特权

评论回复
42
adofu2008|  楼主 | 2010-8-16 13:09 | 只看该作者
一致的,那是发送一个命令字读一次数据的时序,我发送不同的命令字要读不同的数据的。总共我要读他内部25个寄存器的值的。那个程序的“==”是我向上边粘程序时弄错了。实际中只有一个“=”号,不好意思啊。我又仔细检查了一遍,程序没有错误。跟我贴的是一样的。

使用特权

评论回复
43
香水城| | 2010-8-16 14:47 | 只看该作者
真的不知道你那里发生了什么事情。

按照38楼的说法,在KEIL的外设窗口已经看到SPI_DR的值,但SPI_I2S_ReceiveData(SPI_TypeDef* SPIx)却取不出来,这个函数只有一句话,就是 return SPIx->DR;  怎么可能不对?

使用特权

评论回复
44
adofu2008|  楼主 | 2010-8-18 10:18 | 只看该作者
就是啊,我也很无柰啊,我用GPIO模拟了一个SPI去读数据,读得非常正确,呵呵。。。不会说我SPI不会配置吧?

使用特权

评论回复
45
IJK| | 2010-8-18 11:44 | 只看该作者
调试软件(KEIL)里面,不要一直开着寄存器窗口,一直开着可能有问题。

使用特权

评论回复
46
eng5025| | 2010-8-19 11:32 | 只看该作者
哥们,我情况跟你类似:
1. 读SPI2->DR之前必须往SPI2->DR写个什么数(我写0xFF),否则什么都读不到,修改程序后来了第二个问题;
2. 第一个字符死活读不出来,读SPI2->DR是0xFF,实际上示波器观察MISO数据是0x60;后面的数据暂时看起来读入正常;

寄存器设置如下:
static void spiConfig(void){
    //SPI2->CRCPR = 0x07;    // as default
    SPI2->CR1 = 0x202F;    // CRCEN, MSB first, 125 kHz, Master, CPOL = 1, CPHA = 1
    SPI2->CR2 = 0x0004;    // SSOE
    SPI2->CR1 = 0x206F;    // SPI EN
}
void spi_sendByte(uint8_t outData){
    SPI2->DR = outData;
    while (SPI2->SR & 0x0080);    // busy wait
}
uint8_t spi_readByte(void){
    SPI2->DR = 0xFF;
    while (SPI2->SR & 0x0080);    // busy wait
    return SPI2->DR;
}

还有,很奇怪,SPI2->CR2如果不置SSOE的话,写入SPI2->CR1里的0x206F会变成0x202E,也就是说SPE和MSTR被自动清零了

使用特权

评论回复
47
weiyuliang| | 2013-7-26 17:57 | 只看该作者
SPI从模式遇到各种错位

使用特权

评论回复
48
cjhk| | 2013-7-26 19:05 | 只看该作者
呵呵   还是香主给力   谢谢了   香主   顶一个   很不错

使用特权

评论回复
49
lei129210| | 2013-7-26 20:08 | 只看该作者
这个MARK下,等两天我调SPI时候来看。谢谢楼主,谢谢版主。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则