OpenEdv-开源电子网

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

SPI发的数据最低位是1的话,MOSI发送后会一直置高

[复制链接]

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2016-8-15
在线时间
52 小时
发表于 2018-6-26 22:19:01 | 显示全部楼层 |阅读模式
20金钱
stm32f302作主机,用spi3发数据,16位数据,CPHA=1按理说,MOSI在发完数据后应该是低电平,但是我用示波器观察,只要发的数据的最低位为1的话,如发xxxx xxxx xxxx xxx1,发完后MOSI就会一直置高。


我循环发0xfffe,最低位是0,可以看到,发送完后MOSI就置低了,正常。
IMG_011.jpg

然后改成0xffff,MOSI就一直是高了。
IMG_010.jpg

为了便于观察,我还试了发0x7776(0111 0111 0111 0110),最后一位是0,可以看到发送完后MOSI变为低电平,正常。
IMG_008.jpg

然后发0x7777(0111 0111 0111 0111),最后一位是1,发完后MOSI就一直置高。
IMG_009.jpg

附上spi配置与发送代码
static void Spi3Init(void)
{
        RCC->APB1ENR |= RCC_APB1RSTR_SPI3RST;//使能SPI3时钟

        GPIO_Set(SPI3_NSS_PORT,SPI3_NSS_PIN,MODER_OUT,PUPDR_NONE,OTYPER_PP,OSPEEDR_HIG);
        SPI3_NSS_PORT->BSRR |= 1<<SPI3_NSS_PIN;
       
        GPIO_Set(SPI3_SCK_PORT,SPI3_SCK_PIN,MODER_AF,PUPDR_NONE,OTYPER_PP,OSPEEDR_HIG);
        GPIO_AF_Set(SPI3_SCK_PORT,SPI3_SCK_PIN,6);
       
        GPIO_Set(SPI3_MISO_PORT,SPI3_MISO_PIN,MODER_AF,PUPDR_NONE,OTYPER_PP,OSPEEDR_HIG);
        GPIO_AF_Set(SPI3_MISO_PORT,SPI3_MISO_PIN,6);
       
        GPIO_Set(SPI3_MOSI_PORT,SPI3_MOSI_PIN,MODER_AF,PUPDR_NONE,OTYPER_PP,OSPEEDR_HIG);
        GPIO_AF_Set(SPI3_MOSI_PORT,SPI3_MOSI_PIN,6);
       
        SPI3->CR1 |= SPI_CR1_CPHA;//CPHA:1,CPOL:0
        SPI3->CR1 |= SPI_CR1_MSTR;//MSTR:1 主机
        SPI3->CR1 |= SPI_CR1_BR_0|SPI_CR1_BR_1|SPI_CR1_BR_2;//BR:111 波特率
        SPI3->CR1 |= SPI_CR1_SSM;//SSM:1
        SPI3->CR1 |= SPI_CR1_SSI;//SSI:1

        SPI3->CR2        |=        SPI_CR2_DS_0|SPI_CR2_DS_1|SPI_CR2_DS_2|SPI_CR2_DS_3;//DS:1111 16-bit
}


uint16_t NewSpiTransfer(uint16_t txData)
{
        while((SPI3->SR & SPI_SR_TXE)  == 0);//等待发送区空
        SPI3->DR=txData;//发送一个byte
       
     //while((SPI3->SR & SPI_SR_RXNE) == 0);//等待接收完一个byte
        return SPI3->DR;//返回收到的数据
}


最佳答案

查看完整内容[请看2#楼]

没毛病,CPHA是控制时钟相位的,并不控制MOSI,或者MISO的高低电平。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-26 22:19:02 | 显示全部楼层
没毛病,CPHA是控制时钟相位的,并不控制MOSI,或者MISO的高低电平。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2016-8-15
在线时间
52 小时
 楼主| 发表于 2018-6-27 13:28:59 | 显示全部楼层
正点原子 发表于 2018-6-26 22:19
没毛病,CPHA是控制时钟相位的,并不控制MOSI,或者MISO的高低电平。

我在CPHA=1后面应该有个换行,发出来就没了。您可能误解我的意思了,我只是希望MOSI在空闲的适合保持低电平。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 09:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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