根据你提供的代码,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,表示主模式。
希望能解决你的问题!
根据你提供的代码,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,表示主模式。
希望能解决你的问题!
举报