STM32
直播中

王健

7年用户 928经验值
私信 关注
[问答]

求助,STM32L011 SPI使能怎么会清除master位?

各位大侠,您们好!
                 使用STM32L011F4,  使用SPI1, 为什么在使能的时候,会清除master位?
程序如下:

        SPI1->CR1 = SPI_CR1_MSTR|SPI_CR1_BR_1|SPI_CR1_BR_0|SPI_CR1_CPOL|SPI_CR1_CPHA;
        SPI1->CR1 |= SPI_CR1_SPE;

我没有使用软件库,直接操作的寄存器

回帖(1)

那年我十七_

2024-4-16 16:49:30
根据你提供的代码,SPI_CR1_MSTR是SPI主模式的位,SPI_CR1_SPE是SPI使能的位。在你的代码中,先设置了MSTR位为1表示主模式,然后设置了其他一些参数,最后设置了SPE位为1表示使能SPI。

根据STM32L0系列的参考手册,当SPE位从0变为1时,SPI控制器会进入复位状态,此时CR1寄存器的所有位都将会被复位。这就是为什么在使能SPI时,MSTR位被清除的原因。

为了解决这个问题,你可以通过如下方式来设置SPI_CR1寄存器的值:

```
SPI1->CR1 = SPI_CR1_BR_1|SPI_CR1_BR_0|SPI_CR1_CPOL|SPI_CR1_CPHA; // 不设置MSTR位
SPI1->CR1 |= SPI_CR1_SPE | SPI_CR1_MSTR; // 先设置SPE位再设置MSTR位
```

这样就可以在使能SPI的同时保持MSTR位为1,表示主模式。

希望能解决你的问题!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分