diff options
Diffstat (limited to 'tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/I2C/EEPROM/main.c')
-rw-r--r-- | tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/I2C/EEPROM/main.c | 345 |
1 files changed, 0 insertions, 345 deletions
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/I2C/EEPROM/main.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/I2C/EEPROM/main.c deleted file mode 100644 index ce8cb69..0000000 --- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/I2C/EEPROM/main.c +++ /dev/null @@ -1,345 +0,0 @@ -/** - ****************************************************************************** - * @file I2C/EEPROM/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 "stm32_eval_i2c_ee.h" - - -#ifdef USE_STM3210E_EVAL - #include "stm3210e_eval_lcd.h" -#elif defined(USE_STM3210B_EVAL) - #include "stm3210b_eval_lcd.h" -#elif defined(USE_STM3210C_EVAL) - #include "stm3210c_eval_lcd.h" -#elif defined(USE_STM32100B_EVAL) - #include "stm32100b_eval_lcd.h" -#elif defined(USE_STM32100E_EVAL) - #include "stm32100e_eval_lcd.h" -#endif /* USE_STM3210E_EVAL */ - -/** @addtogroup STM32F10x_StdPeriph_Examples - * @{ - */ - -/** @addtogroup I2C_EEPROM - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; - -/* Private define ------------------------------------------------------------*/ -/* Uncomment the following line to enable using LCD screen for messages display */ -#define ENABLE_LCD_MSG_DISPLAY - -#define sEE_WRITE_ADDRESS1 0x50 -#define sEE_READ_ADDRESS1 0x50 -#define BUFFER_SIZE1 (countof(Tx1_Buffer)-1) -#define BUFFER_SIZE2 (countof(Tx2_Buffer)-1) -#define sEE_WRITE_ADDRESS2 (sEE_WRITE_ADDRESS1 + BUFFER_SIZE1) -#define sEE_READ_ADDRESS2 (sEE_READ_ADDRESS1 + BUFFER_SIZE1) - -/* Private macro -------------------------------------------------------------*/ -#define countof(a) (sizeof(a) / sizeof(*(a))) - -/* Private variables ---------------------------------------------------------*/ -uint8_t Tx1_Buffer[] = "/* STM32F10xx I2C Firmware Library EEPROM driver example: \ - buffer 1 transfer into address sEE_WRITE_ADDRESS1 */ \ - Example Description \ - This firmware provides a basic example of how to use the I2C firmware library and\ - an associate I2C EEPROM driver to communicate with an I2C EEPROM device (here the\ - example is interfacing with M24C64 EEPROM)\ - \ - I2C peripheral is configured in Master transmitter during write operation and in\ - Master receiver during read operation from I2C EEPROM. \ - \ - The peripheral used is I2C1 but can be configured by modifying the defines values\ - in stm32xxxx_eval.h file. The speed is set to 200kHz and can be configured by \ - modifying the relative define in stm32_eval_i2c_ee.h file.\ - \ - For M24C64 devices all the memory is accessible through the two-bytes \ - addressing mode and need to define block addresses. In this case, only the physical \ - address has to be defined (according to the address pins (E0,E1 and E2) connection).\ - This address is defined in i2c_ee.h (default is 0xA0: E0, E1 and E2 tied to ground).\ - The EEPROM addresses where the program start the write and the read operations \ - is defined in the main.c file. \ - \ - First, the content of Tx1_Buffer is written to the EEPROM_WriteAddress1 and the\ - written data are read. The written and the read buffers data are then compared.\ - Following the read operation, the program waits that the EEPROM reverts to its \ - Standby state. A second write operation is, then, performed and this time, Tx2_Buffer\ - is written to EEPROM_WriteAddress2, which represents the address just after the last \ - written one in the first write. After completion of the second write operation, the \ - written data are read. The contents of the written and the read buffers are compared.\ - \ - All transfers are managed in DMA mode (except when 1-byte read/write operation is\ - required). Once sEE_ReadBuffer() or sEE_WriteBuffer() function is called, the \ - use application may perform other tasks in parallel while Read/Write operation is\ - managed by DMA.\ - \ - This example provides the possibility to use the STM32XXXX-EVAL LCD screen for\ - messages display (transfer status: Ongoing, PASSED, FAILED).\ - To enable this option uncomment the define ENABLE_LCD_MSG_DISPLAY in the main.c\ - file. "; -uint8_t Tx2_Buffer[] = "/* STM32F10xx I2C Firmware Library EEPROM driver example: \ - buffer 2 transfer into address sEE_WRITE_ADDRESS2 */"; -uint8_t Rx1_Buffer[BUFFER_SIZE1], Rx2_Buffer[BUFFER_SIZE2]; -volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = FAILED; -volatile uint16_t NumDataRead = 0; - -/* Private functions ---------------------------------------------------------*/ -TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); - -/** - * @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 - */ - -#ifdef ENABLE_LCD_MSG_DISPLAY - /* Initialize the LCD screen for information display */ - #ifdef USE_STM3210E_EVAL - STM3210E_LCD_Init(); - #elif defined(USE_STM3210B_EVAL) - STM3210B_LCD_Init(); - #elif defined(USE_STM3210C_EVAL) - STM3210C_LCD_Init(); - #elif defined(USE_STM32100B_EVAL) - STM32100B_LCD_Init(); - #elif defined(USE_STM32100E_EVAL) - STM32100E_LCD_Init(); - #endif /* USE_STM3210E_EVAL */ - - /* Display application information */ - LCD_Clear(LCD_COLOR_BLUE); - LCD_SetBackColor(LCD_COLOR_BLUE); - LCD_SetTextColor(LCD_COLOR_WHITE); - LCD_DisplayStringLine(LCD_LINE_0, "SMT32F1xx FW Library"); - LCD_DisplayStringLine(LCD_LINE_1, " EEPROM Example "); -#endif /* ENABLE_LCD_MSG_DISPLAY */ - - /* Initialize the I2C EEPROM driver ----------------------------------------*/ - sEE_Init(); - - /* First write in the memory followed by a read of the written data --------*/ - /* Write on I2C EEPROM from sEE_WRITE_ADDRESS1 */ - sEE_WriteBuffer(Tx1_Buffer, sEE_WRITE_ADDRESS1, BUFFER_SIZE1); - - /* Set the Number of data to be read */ - NumDataRead = BUFFER_SIZE1; - - /* Read from I2C EEPROM from sEE_READ_ADDRESS1 */ - sEE_ReadBuffer(Rx1_Buffer, sEE_READ_ADDRESS1, (uint16_t *)(&NumDataRead)); - -#ifdef ENABLE_LCD_MSG_DISPLAY - LCD_DisplayStringLine(LCD_LINE_3, " Transfer 1 Ongoing "); -#endif /* ENABLE_LCD_MSG_DISPLAY */ - - /* Wait till DMA transfer is complete (Transfer complete interrupt handler - resets the variable holding the number of data to be read) */ - while (NumDataRead > 0) - { - /* Starting from this point, if the requested number of data is higher than 1, - then only the DMA is managing the data transfer. Meanwhile, CPU is free to - perform other tasks: - - // Add your code here: - //... - //... - - For simplicity reasons, this example is just waiting till the end of the - transfer. */ - } - - /* Check if the data written to the memory is read correctly */ - TransferStatus1 = Buffercmp(Tx1_Buffer, Rx1_Buffer, BUFFER_SIZE1); - /* TransferStatus1 = PASSED, if the transmitted and received data - to/from the EEPROM are the same */ - /* TransferStatus1 = FAILED, if the transmitted and received data - to/from the EEPROM are different */ -#ifdef ENABLE_LCD_MSG_DISPLAY - if (TransferStatus1 == PASSED) - { - LCD_DisplayStringLine(LCD_LINE_3, " Transfer 1 PASSED "); - } - else - { - LCD_DisplayStringLine(LCD_LINE_3, " Transfer 1 FAILED "); - } -#endif /* ENABLE_LCD_MSG_DISPLAY */ - -/*---------------------------------- - - ------------------------------------------*/ - - /* Second write in the memory followed by a read of the written data -------*/ - /* Write on I2C EEPROM from sEE_WRITE_ADDRESS2 */ - sEE_WriteBuffer(Tx2_Buffer, sEE_WRITE_ADDRESS2, BUFFER_SIZE2); - - /* Set the Number of data to be read */ - NumDataRead = BUFFER_SIZE2; - - /* Read from I2C EEPROM from sEE_READ_ADDRESS2 */ - sEE_ReadBuffer(Rx2_Buffer, sEE_READ_ADDRESS2, (uint16_t *)(&NumDataRead)); - -#ifdef ENABLE_LCD_MSG_DISPLAY - LCD_DisplayStringLine(LCD_LINE_5, " Transfer 2 Ongoing "); -#endif /* ENABLE_LCD_MSG_DISPLAY */ - - /* Wait till DMA transfer is complete (Transfer complete interrupt handler - resets the variable holding the number of data to be read) */ - while (NumDataRead > 0) - { - /* Starting from this point, if the requested number of data is higher than 1, - then only the DMA is managing the data transfer. Meanwhile, CPU is free to - perform other tasks: - - // Add your code here: - //... - //... - - For simplicity reasons, this example is just waiting till the end of the - transfer. */ - } - - /* Check if the data written to the memory is read correctly */ - TransferStatus2 = Buffercmp(Tx2_Buffer, Rx2_Buffer, BUFFER_SIZE2); - /* TransferStatus2 = PASSED, if the transmitted and received data - to/from the EEPROM are the same */ - /* TransferStatus2 = FAILED, if the transmitted and received data - to/from the EEPROM are different */ -#ifdef ENABLE_LCD_MSG_DISPLAY - if (TransferStatus1 == PASSED) - { - LCD_DisplayStringLine(LCD_LINE_5, " Transfer 2 PASSED "); - } - else - { - LCD_DisplayStringLine(LCD_LINE_5, " Transfer 2 FAILED "); - } -#endif /* ENABLE_LCD_MSG_DISPLAY */ - - /* Free all used resources */ - sEE_DeInit(); - -#ifdef ENABLE_LCD_MSG_DISPLAY - /* Display end of example information */ - LCD_DisplayStringLine(LCD_LINE_7, "---End Of Example---"); -#endif /* ENABLE_LCD_MSG_DISPLAY */ - - while (1) - { - } -} - -#ifndef USE_DEFAULT_TIMEOUT_CALLBACK -/** - * @brief Example of timeout situation management. - * @param None. - * @retval None. - */ -uint32_t sEE_TIMEOUT_UserCallback(void) -{ - /* Use application may try to recover the communication by resetting I2C - peripheral (calling the function I2C_SoftwareResetCmd()) then re-start - the transmission/reception from a previously stored recover point. - For simplicity reasons, this example only shows a basic way for errors - managements which consists of stopping all the process and requiring system - reset. */ - -#ifdef ENABLE_LCD_MSG_DISPLAY - /* Display error message on screen */ - LCD_Clear(LCD_COLOR_RED); - LCD_DisplayStringLine(LCD_LINE_4, "Communication ERROR!"); - LCD_DisplayStringLine(LCD_LINE_5, "Try again after res-"); - LCD_DisplayStringLine(LCD_LINE_6, " etting the Board "); -#endif /* ENABLE_LCD_MSG_DISPLAY */ - - /* Block communication and all processes */ - while (1) - { - } -} - -#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */ - -/** - * @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****/ |