diff options
Diffstat (limited to 'tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/SPI/DMA/main.c')
-rw-r--r-- | tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/SPI/DMA/main.c | 281 |
1 files changed, 0 insertions, 281 deletions
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/SPI/DMA/main.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/SPI/DMA/main.c deleted file mode 100644 index 985e800..0000000 --- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/SPI/DMA/main.c +++ /dev/null @@ -1,281 +0,0 @@ -/** - ****************************************************************************** - * @file SPI/DMA/main.c - * @author MCD Application Team - * @version V3.5.0 - * @date 08-April-2011 - * @brief Main program body - ****************************************************************************** - * @attention - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY - * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING - * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE - * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. - * - * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f10x.h" -#include "platform_config.h" - - -/** @addtogroup STM32F10x_StdPeriph_Examples - * @{ - */ - -/** @addtogroup SPI_DMA - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; - -/* Private define ------------------------------------------------------------*/ -#define BufferSize 32 - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -SPI_InitTypeDef SPI_InitStructure; -DMA_InitTypeDef DMA_InitStructure; -GPIO_InitTypeDef GPIO_InitStructure; - -uint8_t SPI_MASTER_Buffer_Tx[BufferSize] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, - 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, - 0x1F, 0x20}; -uint8_t SPI_SLAVE_Buffer_Rx[BufferSize]; -__IO uint8_t TxIdx = 0; -volatile TestStatus TransferStatus = FAILED; - - -/* Private function prototypes -----------------------------------------------*/ -void RCC_Configuration(void); -void GPIO_Configuration(void); -TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); - -/* Private functions ---------------------------------------------------------*/ - -/** - * @brief Main program - * @param None - * @retval None - */ -int main(void) -{ - /*!< At this stage the microcontroller clock setting is already configured, - this is done through SystemInit() function which is called from startup - file (startup_stm32f10x_xx.s) before to branch to application main. - To reconfigure the default setting of SystemInit() function, refer to - system_stm32f10x.c file - */ - - /* System clocks configuration ---------------------------------------------*/ - RCC_Configuration(); - - /* GPIO configuration ------------------------------------------------------*/ - GPIO_Configuration(); - - /* SPI_SLAVE_Rx_DMA_Channel configuration ---------------------------------------------*/ - DMA_DeInit(SPI_SLAVE_Rx_DMA_Channel); - DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SPI_SLAVE_DR_Base; - DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SPI_SLAVE_Buffer_Rx; - DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; - DMA_InitStructure.DMA_BufferSize = BufferSize; - DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; - DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; - DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; - DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; - DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; - DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; - DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; - DMA_Init(SPI_SLAVE_Rx_DMA_Channel, &DMA_InitStructure); - - /* SPI_MASTER configuration ------------------------------------------------------*/ - SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; - 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_1Edge; - SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; - SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; - SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; - SPI_InitStructure.SPI_CRCPolynomial = 7; - SPI_Init(SPI_MASTER, &SPI_InitStructure); - - /* SPI_SLAVE configuration ------------------------------------------------------*/ - SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Rx; - SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; - SPI_Init(SPI_SLAVE, &SPI_InitStructure); - - /* Enable SPI_MASTER NSS output for master mode */ - SPI_SSOutputCmd(SPI_MASTER, ENABLE); - - /* Enable SPI_SLAVE Rx request */ - SPI_I2S_DMACmd(SPI_SLAVE, SPI_I2S_DMAReq_Rx, ENABLE); - - /* Enable SPI_SLAVE */ - SPI_Cmd(SPI_SLAVE, ENABLE); - /* Enable SPI_MASTER */ - SPI_Cmd(SPI_MASTER, ENABLE); - - /* Enable DMA1 Channel4 */ - DMA_Cmd(SPI_SLAVE_Rx_DMA_Channel, ENABLE); - - /* Transfer procedure */ - while (TxIdx < BufferSize) - { - /* Wait for SPI_MASTER Tx buffer empty */ - while (SPI_I2S_GetFlagStatus(SPI_MASTER, SPI_I2S_FLAG_TXE) == RESET); - /* Send SPI_MASTER data */ - SPI_I2S_SendData(SPI_MASTER, SPI_MASTER_Buffer_Tx[TxIdx++]); - } - - /* Wait for DMA1 channel4 transfer complete */ - while (!DMA_GetFlagStatus(SPI_SLAVE_Rx_DMA_FLAG)); - - /* Check the correctness of written data */ - TransferStatus = Buffercmp(SPI_SLAVE_Buffer_Rx, SPI_MASTER_Buffer_Tx, BufferSize); - /* TransferStatus = PASSED, if the transmitted and received data - are equal */ - /* TransferStatus = FAILED, if the transmitted and received data - are different */ - - while (1) - {} -} - -/** - * @brief Configures the different system clocks. - * @param None - * @retval None - */ -void RCC_Configuration(void) -{ - /* PCLK2 = HCLK/2 */ - RCC_PCLK2Config(RCC_HCLK_Div2); - - /* Enable peripheral clocks --------------------------------------------------*/ - /* Enable SPI_SLAVE DMA clock */ - RCC_AHBPeriphClockCmd(SPI_SLAVE_DMA_CLK, ENABLE); - -#ifdef USE_STM3210C_EVAL - /* Enable GPIO clock for SPI_MASTER and SPI_SLAVE */ - RCC_APB2PeriphClockCmd(SPI_MASTER_GPIO_CLK | SPI_SLAVE_GPIO_CLK | - RCC_APB2Periph_AFIO, ENABLE); - - /* Enable SPI_MASTER Periph clock */ - RCC_APB1PeriphClockCmd(SPI_MASTER_CLK, ENABLE); - -#else - /* Enable SPI_MASTER clock and GPIO clock for SPI_MASTER and SPI_SLAVE */ - RCC_APB2PeriphClockCmd(SPI_MASTER_GPIO_CLK | SPI_SLAVE_GPIO_CLK | - SPI_MASTER_CLK, ENABLE); -#endif - /* Enable SPI_SLAVE Periph clock */ - RCC_APB1PeriphClockCmd(SPI_SLAVE_CLK, ENABLE); -} - -/** - * @brief Configures the different GPIO ports. - * @param None - * @retval None - */ -void GPIO_Configuration(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - -#ifdef USE_STM3210C_EVAL - /* Enable SPI3 Pins Software Remapping */ - GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE); - - /* Configure SPI_MASTER pins: SCK and MOSI */ - GPIO_InitStructure.GPIO_Pin = SPI_MASTER_PIN_SCK | SPI_MASTER_PIN_MOSI; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(SPI_MASTER_GPIO, &GPIO_InitStructure); - - /* Configure SPI_MASTER NSS pin */ - GPIO_InitStructure.GPIO_Pin = SPI_MASTER_PIN_NSS; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(SPI_MASTER_GPIO_NSS, &GPIO_InitStructure); - -#else - /* Configure SPI_MASTER pins: NSS, SCK and MOSI */ - GPIO_InitStructure.GPIO_Pin = SPI_MASTER_PIN_NSS | SPI_MASTER_PIN_SCK | SPI_MASTER_PIN_MOSI; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(SPI_MASTER_GPIO, &GPIO_InitStructure); -#endif - - /* Configure SPI_SLAVE pins: NSS, SCK and MISO*/ - GPIO_InitStructure.GPIO_Pin = SPI_SLAVE_PIN_NSS | SPI_SLAVE_PIN_SCK; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; - GPIO_Init(SPI_SLAVE_GPIO, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Pin = SPI_SLAVE_PIN_MISO; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(SPI_SLAVE_GPIO, &GPIO_InitStructure); - -} - -/** - * @brief Compares two buffers. - * @param pBuffer1, pBuffer2: buffers to be compared. - * @param BufferLength: buffer's length - * @retval PASSED: pBuffer1 identical to pBuffer2 - * FAILED: pBuffer1 differs from pBuffer2 - */ -TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength) -{ - while (BufferLength--) - { - if (*pBuffer1 != *pBuffer2) - { - return FAILED; - } - - pBuffer1++; - pBuffer2++; - } - - return PASSED; -} - -#ifdef USE_FULL_ASSERT - -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t* file, uint32_t line) -{ - /* User can add his own implementation to report the file name and line number, - ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - - /* Infinite loop */ - while (1) - {} -} - -#endif - -/** - * @} - */ - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ |