本帖最后由 玄德 于 2018-2-14 21:14 编辑
基本搞清了:
要直接操作向量地址,而且要加 uint8 修饰,
才能正确操作 8bit 宽度。直接读写 SPI1 -> DR 是不行的,那是操作 16 位。
while (1)
{
*(__IO uint8_t *) ( (uint32_t) SPI1 + 0x0C ) = 0xCA; //发送。不能这样写:SPI1 -> DR = 0xCA;
while ( !( SPI1 -> SR & ( 1 << 0 ) ) ); //等待 RXNE 标志。
j = *(__IO uint8_t *) ( (uint32_t) SPI1 + 0x0C ); //接收,同时清除 RXNE 标志。同样不能这样写:j = SPI1 -> DR;
for ( i=0; i<0x1000; i++ );
}
后记:
(uint32_t) SPI1 + 0x0C ) 实际上就是DR寄存器的地址,所以也可以这样写:
*(__IO uint8_t *) ( &( SPI1 -> DR ) ) = 0xXX; //发送。
j = *(__IO uint8_t *) ( &( SPI1 -> DR ) ) ; //接收。
|