From 08b3909c40a192778719c6262bbee4745682948d Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Fri, 31 May 2024 19:15:47 +0800
Subject: [PATCH] 测试和修改了一些功能bug

---
 HARDWARE/SPI/SPI.c |  180 +++++++++++++++++++-----------------------------------------
 1 files changed, 57 insertions(+), 123 deletions(-)

diff --git a/HARDWARE/SPI/SPI.c b/HARDWARE/SPI/SPI.c
index 5ffdc63..5253a5e 100644
--- a/HARDWARE/SPI/SPI.c
+++ b/HARDWARE/SPI/SPI.c
@@ -1,134 +1,68 @@
-
-/******************************************************************************
- * Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD.
- *
- *-----------------------------------------------------------------------------
- * File: 			    spi.c
- * Description:		spi gpio config , receive and send data code
- * Author:			  Lishoujian (867693272@qq.com)
- * Date:			    Jan 8, 2015
- *****************************************************************************/
-
-/* ----------------------- Platform includes --------------------------------*/
 #include "spi.h"
-#include "stm32f10x.h"
-#include "systaskinit.h"
+#include "gpio.h"
 
-/******************************************
- * func:    SPI3_ioconfig
- * desc:    config gpio;initialize hardware interface of spi3
- * input:   none
- * output:  none
- * return:  none
- *****************************************/
-
-void Fram_Flash_SPI_Init(void)                       
+void SPI3_Init(void)
 {
-  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_Low;		//CPOL low
-	SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//CPOA first edge
-	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		
-	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;		//Baud Rate Prescaler is 256
-	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//send and receive data begin with high bit 
-	SPI_InitStructure.SPI_CRCPolynomial = 7;
-	SPI_Init(Fram_Flash_SPI_NUM, &SPI_InitStructure);   
- 
-	SPI_Cmd(Fram_Flash_SPI_NUM, ENABLE); //Enable SPI3
-		 
-}  
-
-
-/******************************************
- * func:    SPI_ReadWriteByte
- * desc:    spi receive and send data
- * input:   SPIx - SPI port , TxData - send data
- * output:  none
- * return:  the data received by spi
- *****************************************/
-u8 SPI_ReadWriteByte(SPI_TypeDef* SPIx,u8 TxData)
-{		
-	u8 retry=0;				 	
-	while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET) //���ָ����SPI��־λ�������:���ͻ���ձ�־λ
-		{
-		retry++;
-		if(retry>200)return 0;
-		}			  
-	SPI_I2S_SendData(SPIx, TxData); //ͨ������SPIx����һ������
-	retry=0;
-
-	while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET) //���ָ����SPI��־λ�������:���ܻ���ǿձ�־λ
-		{
-		retry++;
-		if(retry>200)return 0;
-		}	  						    
-	return SPI_I2S_ReceiveData(SPIx); //����ͨ��SPIx������յ�����					    
-}
-
-
-
-
-
-
-u8 SPI1_ReadWriteByte(u8 TxData)
-{		
-	u8 retry=0;	
-	while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //���ָ����SPI��־λ�������:���ͻ���ձ�־λ
-		{
-		retry++;
-		if(retry>200)return 0;
-		}			  
-	SPI_I2S_SendData(SPI1, TxData); //ͨ������SPIx����һ������
-	retry=0;
+		CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
 		
-	while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //���ָ����SPI��־λ�������:���ܻ���ǿձ�־λ
-		{
-		retry++;
-		if(retry>200)	return 0;
-		}	  		
+//    AltFunIO(GPIOF, GPIO_Pin_15, ALTFUN_NORMAL);    // SSN
+
+
+    AltFunIO(SPI3_PORT, SPI3_SCK_PIN, ALTFUN_NORMAL);    // SCK
+    AltFunIO(SPI3_PORT, SPI3_MISO_PIN, ALTFUN_NORMAL);    // MISO
+    AltFunIO(SPI3_PORT, SPI3_MOSI_PIN, ALTFUN_NORMAL);    // MOSI
 	
-	return SPI_I2S_ReceiveData(SPI1); //����ͨ��SPIx������յ�����					    
+		CMU_PERCLK_SetableEx(SPI3CLK, ENABLE);   //����SPI3����ʱ��
+
+		SPIx_CR1_IOSWAP_Set(SPI3, SPIx_CR1_IOSWAP_DEFAULT);  // MISO��MOSIĬ������ ������
+		SPIx_CR1_MM_Set(SPI3, SPIx_CR1_MM_MASTER);           //masterģʽ
+		SPIx_CR1_WAIT_Set(SPI3, SPIx_CR1_WAIT_1WAIT);        // ÿ������һ֡�����һ��CLK
+		SPIx_CR1_BAUD_Set(SPI3, SPIx_CR1_BAUD_DIV4);         //����������Ϊ����ʱ��2��Ƶ
+		SPIx_CR1_LSBF_Set(SPI3, SPIx_CR1_LSBF_MSB);          //֡��ʽ�ȷ���MSB
+		SPIx_CR1_CPHOL_Set(SPI3, SPIx_CR1_CPHOL_LOW);        //CLKֹͣ�ڵ͵�ƽ
+		SPIx_CR1_CPHA_Set(SPI3, SPIx_CR1_CPHA_1CLOCK);       //��һ��ʱ�ӱ��ز�׽
+		SPIx_CR2_SSNSEN_Setable(SPI3, DISABLE);                 //SSN��Ӳ������
+
+		SPIx_CR2_RXO_Setable(SPI3, DISABLE);                 //SPI����Ϊȫ˫��
+		SPIx_CR2_DLEN_Set(SPI3, SPIx_CR2_DLEN_8BIT);         //ͨ�������ֳ�8bit
+		SPIx_CR2_HALFDUPLEX_Set(SPI3, SPIx_CR2_HALFDUPLEX_SPI); //SPI����Ϊ��׼SPIģʽ
+		SPIx_CR2_SSNM_Set(SPI3, SPIx_CR2_SSNM_LOW);             //ÿ�η���master��ssn���ֵ�
+		SPIx_CR2_TXO_AC_Setable(SPI3, DISABLE);                 //�ر�TXONLY�Զ���0
+		SPIx_CR2_TXO_Setable(SPI3, DISABLE);                    //�ر�TXONLYģʽ
+	//	SPIx_CR2_SSN_Set(SPI3, SPIx_CR2_SSN_HIGH);               //SSNSENΪ��ʱSNN����ߵ�ƽ
+		
+		SPIx_CR3_SERRC_Clr(SPI3);             //����ӻ������־
+		SPIx_CR3_MERRC_Clr(SPI3);             //������������־
+		SPIx_CR3_RXBFC_Clr(SPI3);             //���RXBUF
+		SPIx_CR3_TXBFC_Clr(SPI3);             //���TXBUF
+    
+    SPIx_CR2_SPIEN_Setable(SPI3, ENABLE);          //ʹ��SPI3
 }
 
-
-u8 SPI3_ReadWriteByte(u8 TxData)
-{		
-	uint8 retry=0;				 	
-	while (SPI_I2S_GetFlagStatus( SPI3, SPI_I2S_FLAG_TXE) == RESET) //send buffer  empty flag
-		{
-		retry++;
-		if(retry>200)return 0;
-		}			  
-	SPI_I2S_SendData(SPI3, TxData); //send data
-	retry=0;
-		
-	while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET) //receive buffer not empty flag
-		{
-		retry++;
-		if(retry>200)return 0;
-		}	  						    
-	return SPI_I2S_ReceiveData(SPI3); //return received data 	
+uint8_t SpiWriteAndRead(uint32_t data)
+{
+    SPIx_TXBUF_Write(SPI3, data);
+    while (!SPIx_ISR_TXBE_Chk(SPI3));
+    while (!SPIx_ISR_RXBF_Chk(SPI3));
+    data = SPIx_RXBUF_Read(SPI3);
+    
+    return data;
 }
 
+void SpiWrite(uint8_t *data, uint32_t length)
+{
+    while (length--)
+    {
+        SpiWriteAndRead(*data);
+        data++;
+    }
+}
 
-u8 SPI2_ReadWriteByte(u8 TxData)
-{		
-	uint8 retry=0;				 	
-	while (SPI_I2S_GetFlagStatus( SPI2, SPI_I2S_FLAG_TXE) == RESET) //send buffer not empty flag
-		{
-		retry++;
-		if(retry>200)return 0;
-		}			  
-	SPI_I2S_SendData(SPI2, TxData); //send data
-	retry=0;
-		
-	while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //receive buffer not empty flag
-		{
-		retry++;
-		if(retry>255)return 0;
-		}	  						    
-	return SPI_I2S_ReceiveData(SPI2); //return reveived data 	
+void SpiRead(uint8_t *data, uint32_t length)
+{
+    while (length--)
+    {
+        *data = SpiWriteAndRead(0x00);
+        data++;
+    }
 }

--
Gitblit v1.9.3