新手上路
- 积分
- 40
- 金钱
- 40
- 注册时间
- 2017-4-19
- 在线时间
- 3 小时
|
发表于 2017-4-19 18:11:25
|
显示全部楼层
[mw_shl_code=c,true]/*******************************************************************************
* Function Name : SPI_Init
* Description : 3õê¼»ˉSPIμÄ1ü½Å
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void SPIx_Init(SPI_TypeDef * SPIx)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
if(SPIx == SPI1)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE); //GPIO,SPIê±Öóê1Äü
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); //3õê¼»ˉGPIO
}
else if(SPIx == SPI2)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB1Periph_SPI2, ENABLE); //GPIO,SPIê±Öóê1Äü
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //3õê¼»ˉGPIO
}
//ÕaàïûóD¶¼¶ÔƬѡDÅoÅCSμÄ3õê¼»ˉ,DèòaÔúêμ¼êê1óÃSPIμÄ2¿·Öè¥×öIO¿ú3õê¼»ˉ
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //éèÖÃSPIè«Ë«1¤
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //éèÖÃSPI1¤×÷Ä£ê½:éèÖÃÎaÖ÷SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8λ֡½á11
/* START éèÖÃÕaὸö±äá¿à′Ñ¡ÔñËÄÖÖ2»í¬μÄSPI1¤×÷Ä£ê½ */
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //ê±ÖóÏàλ£o¿ÕÏDê±ÖóÎaμí
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //êy¾Y2¶»ñóúμú¶t¸öê±ÖóÑØ
/* END éèÖÃÕaὸö±äá¿à′Ñ¡ÔñËÄÖÖ2»í¬μÄSPI1¤×÷Ä£ê½ */
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSSDÅoÅóéó2¼t1üàí
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //Ô¤·ÖÆμ256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //êy¾Y′«êä′óMSB¿aê¼:MSBÔúǰLSBÔúoó
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRCÖμ¼ÆËãμĶàÏîê½
SPI_Init(SPIx, &SPI_InitStructure); //¸ù¾YÖÆ¶¨μÄ2Îêy3õê¼»ˉíaéèSPIx¼Ä′æÆ÷
SPI_Cmd(SPIx, ENABLE); //ê1ÄüSPIíaéè
SPIx_ReadWriteByte(SPIx,0xff); //Æô¶ˉ′«êä,Õa¾ä»°×î′ó×÷óÃêÇÆô¶ˉ′«êä,ά3ÖMOSIÎa¸ßμçÆ½,·Ç±Øòaóï¾ä
}
/********************************************************************************
*SPI Ëù¶èéèÖÃoˉêy
*SpeedSet:
*SPI_BaudRatePrescaler_2 2·ÖÆμ(SPI 36M@sys 72M)
*SPI_BaudRatePrescaler_8 8·ÖÆμ (SPI 9M@sys 72M)
*SPI_BaudRatePrescaler_16 16·ÖÆμ (SPI 4.5M@sys 72M)
*SPI_BaudRatePrescaler_256 256·ÖÆμ (SPI 281.25K@sys 72M)
********************************************************************************/
void SPIx_SetSpeed(SPI_TypeDef * SPIx,u8 SpeedSet)
{
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ;
SPI_Init(SPIx, &SPI_InitStructure);
SPI_Cmd(SPIx,ENABLE);
}
/********************************************************************************
*SPIx ¶áD′ò»¸ö×Ö½úêy¾Y
*TxData:òaD′èëμÄ×Ö½úêy¾Y£¬¶áè¡êy¾YμÄê±oò£¬′«èë0x00
*·μ»ØÖμ:¶áè¡μ½μÄ×Ö½úêy¾Y
********************************************************************************/
uint8_t SPIx_ReadWriteByte(SPI_TypeDef * SPIx,uint8_t TxData)
{
uint8_t retry=0;
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET) //¼ì2éÖÆ¶¨μÄSPI±ê־λéèÖÃóë·ñ:·¢Ëí»o′æ¿Õ±ê־λ
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPIx, TxData); //í¨1yíaéèSPIx·¢Ëíò»¸ö×Ö½úêy¾Y
retry=0;
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET) //¼ì2éÖÆ¶¨μÄSPI±ê־λéèÖÃóë·ñ:½óêü»o′æ·Ç¿Õ±ê־λ
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPIx); //·μ»Øí¨1ySPIx×î½ü½óêüμÄêy¾Y
}[/mw_shl_code]
硬件SPI初始化和读写数据函数 |
|