SPI协议最早的标准,是由摩托罗拉公司制定。在协议使用的过程中,根据实际需求可能会进行一些扩展和修改。
原文中仅对SPI主机,在操作片选引脚上做出了明确的规定,并未对使用SPI接口的从机做出相应的说明。实际测试发现,在需要片选信号参与数据收发时要注意,片选信号线处于空闲时应保持高电平,且在需要进行数据传输时,应能够被SPI主机片选引脚拉低。
下面是以SPI1为例,使用硬件控制片选引脚的程序清单,其中PA4为片选引脚。
2. {
4. SPI_InitTypeDef SPI_InitStructure = {0};
6. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE ;
8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
12.
14. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
16. GPIO_Init( GPIOA, &GPIO_InitStructure ;
18. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
20. GPIO_Init( GPIOA, &GPIO_InitStructure ;
22. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
24. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
26.
28. SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
30. SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
32. SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
34. SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
36. SPI_Init( SPI1, &SPI_InitStructure ;
38. SPI_SSOutputCmd( SPI1, ENABLE ;
40. SPI_Cmd( SPI1, ENABLE ;