找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3366|回复: 1
打印 上一主题 下一主题
收起左侧

基于STM32的AT45DB041读写正常的源程序V1.0

[复制链接]
跳转到指定楼层
楼主
分享一个读写正常的基于STM32的AT45DB041源程序


单片机源程序如下:
  1. /******************************************************************************
  2. 文件名        :main.c   
  3. 编写者        :尚晓飞
  4. 编写日期:10月18日
  5. 简要描述:AT45DB041读写程序
  6. 当前版本:V1.0
  7. 运行平台:STM32F10x
  8. Copyright (c) 2008-2018, shangxiaofei.
  9.        All rights reserved.
  10. *******************************************************************************/
  11. /***********************   修改记录  ******************************************/
  12. /*-----------------------------------------------------------------------------
  13. 修改人: 尚晓飞
  14. 日 期: 2008年10月18日
  15. 版  本: V1.0  
  16. 描 述: AT45DB041读写测试基本正常 ,
  17.         u8 定义unsigned char改为 signed char 可在调试时显示ASCII码,方便查看,
  18.         注意CS,MISO 要接上拉电阻
  19. -----------------------------------------------------------------------------*/

  20. /* Includes ------------------------------------------------------------------*/
  21. #include "platform_config.h"
  22. #include "spi_flash.h"

  23. /* Local includes ------------------------------------------------------------*/
  24. /* Private typedef -----------------------------------------------------------*/
  25. typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;

  26. /* Private define ------------------------------------------------------------*/
  27. #define  FLASH_WriteAddress     0x01    //9位地址  0 - 263
  28. #define  FLASH_ReadAddress      FLASH_WriteAddress
  29. #define  FLASH_SectorToErase    FLASH_WriteAddress
  30. #define  M25P64_FLASH_ID        0x202017
  31. #define  BufferSize (countof(Tx_Buffer)-1)

  32. /* Private macro -------------------------------------------------------------*/
  33. #define countof(a) (sizeof(a) / sizeof(*(a)))

  34. /* Private variables ---------------------------------------------------------*/
  35. u8 Tx_Buffer[] = "STM32F10x communication with an AT45DB041 SPI FLASH";
  36. u8 Tx_Buffer1[] = "112233445566778899abcdefghifjfkdsajfkdsjakfjdskafjdksajfkdslafj;d";

  37. u8 Index, Rx_Buffer[BufferSize];
  38. u8 Rx_Buffer2[BufferSize];
  39. volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = PASSED;
  40. vu32 FLASH_ID = 0;
  41. ErrorStatus HSEStartUpStatus;

  42. /* Private functions ---------------------------------------------------------*/
  43. TestStatus Buffercmp(u8* pBuffer1, u8* pBuffer2, u16 BufferLength);
  44. void RCC_Configuration(void);
  45. void GPIO_Configuration(void);
  46. void NVIC_Configuration(void);


  47. /*******************************************************************************
  48. * Function Name  : main
  49. * Description    : Main program
  50. * Input          : None
  51. * Output         : None
  52. * Return         : None
  53. *******************************************************************************/
  54. int main(void)
  55. {
  56. #ifdef DEBUG
  57.   debug();
  58. #endif

  59.   /* System clocks configuration */
  60.   RCC_Configuration();

  61.   /* NVIC configuration */
  62.   NVIC_Configuration();

  63.   /* GPIO configuration */
  64.   GPIO_Configuration();

  65.   /* Initialize the SPI FLASH driver */
  66.   SPI_FLASH_Init();

  67.   SPI_FLASH_Buffer1Write(Tx_Buffer, FLASH_WriteAddress, BufferSize);//写buffer1
  68.   SPI_FLASH_Buffer1Read(Rx_Buffer, FLASH_WriteAddress, BufferSize);        //读buffer1

  69.   SPI_FLASH_Buffer2Write(Tx_Buffer1, FLASH_WriteAddress, BufferSize);//写buffer2
  70.   SPI_FLASH_Buffer2Read(Rx_Buffer, FLASH_ReadAddress, BufferSize); //读buffer2


  71.   SPI_FLASH_Buffer1ProgAutoErase(7);//buffer1写入flash
  72.   SPI_FLASH_Buffer1ProgAutoErase(8);//buffer1写入flash

  73.   SPI_FLASH_PageToBuffer2(1);       //flash页读入buffer

  74.    SPI_FLASH_Buffer1Write(Tx_Buffer1, FLASH_WriteAddress, BufferSize);

  75.   SPI_FLASH_Buffer1Read(Rx_Buffer, FLASH_ReadAddress, BufferSize);

  76.   SPI_FLASH_Buffer2Read(Rx_Buffer2, FLASH_ReadAddress, BufferSize);

  77.   SPI_FLASH_BulkErase(0); //块擦除
  78.   //SPI_FLASH_PageErase(1);//页擦除
  79.   SPI_FLASH_PageToBuffer2(7);       //flash页读入buffer
  80.   SPI_FLASH_Buffer2Read(Rx_Buffer2, FLASH_ReadAddress, BufferSize);

  81.   SPI_FLASH_PageToBuffer2(8);       //flash页读入buffer
  82.   SPI_FLASH_Buffer2Read(Rx_Buffer2, FLASH_ReadAddress, BufferSize);


  83.   while (1)
  84.   {}
  85. }

  86. /*******************************************************************************
  87. * Function Name  : RCC_Configuration
  88. * Description    : Configures the different system clocks.
  89. * Input          : None
  90. * Output         : None
  91. * Return         : None
  92. *******************************************************************************/
  93. void RCC_Configuration(void)
  94. {
  95.   /* RCC system reset(for debug purpose) */
  96.   RCC_DeInit();

  97.   /* Enable HSE */
  98.   RCC_HSEConfig(RCC_HSE_ON);

  99.   /* Wait till HSE is ready */
  100.   HSEStartUpStatus = RCC_WaitForHSEStartUp();

  101.   if (HSEStartUpStatus == SUCCESS)
  102.   {
  103.     /* Enable Prefetch Buffer */
  104.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  105.     /* Flash 2 wait state */
  106.     FLASH_SetLatency(FLASH_Latency_2);

  107.     /* HCLK = SYSCLK */
  108.     RCC_HCLKConfig(RCC_SYSCLK_Div1);

  109.     /* PCLK2 = HCLK */
  110.     RCC_PCLK2Config(RCC_HCLK_Div1);

  111.     /* PCLK1 = HCLK/2 */
  112.     RCC_PCLK1Config(RCC_HCLK_Div2);

  113.     /* PLLCLK = 8MHz * 9 = 72 MHz */
  114.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);

  115.     /* Enable PLL */
  116.     RCC_PLLCmd(ENABLE);

  117.     /* Wait till PLL is ready */
  118.     while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  119.     {}

  120.     /* Select PLL as system clock source */
  121.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  122.     /* Wait till PLL is used as system clock source */
  123.     while (RCC_GetSYSCLKSource() != 0x08)
  124.     {}
  125.   }

  126.   /* Enable GPIO_LED clock */
  127.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_LED, ENABLE);
  128. }

  129. /*******************************************************************************
  130. * Function Name  : GPIO_Configuration
  131. * Description    : Configures the different GPIO ports.
  132. * Input          : None
  133. * Output         : None
  134. * Return         : None
  135. *******************************************************************************/
  136. void GPIO_Configuration(void)
  137. {
  138.   GPIO_InitTypeDef GPIO_InitStructure;

  139.   /* Configure GPIO LED pin6 and pin7 as Output push-pull --------------------*/
  140.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  141.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  142.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  143.   GPIO_Init(GPIO_LED, &GPIO_InitStructure);
  144. }

  145. /*******************************************************************************
  146. * Function Name  : NVIC_Configuration
  147. * Description    : Configures Vector Table base location.
  148. * Input          : None
  149. * Output         : None
  150. * Return         : None
  151. *******************************************************************************/
  152. void NVIC_Configuration(void)
  153. {
  154. #ifdef  VECT_TAB_RAM
  155.   /* Set the Vector Table base location at 0x20000000 */
  156.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  157. #else  /* VECT_TAB_FLASH  */
  158.   /* Set the Vector Table base location at 0x08000000 */
  159.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  160. #endif
  161. }

  162. /*******************************************************************************
  163. * Function Name  : Buffercmp
  164. * Description    : Compares two buffers.
  165. * Input          : - pBuffer1, pBuffer2: buffers to be compared.
  166. *                : - BufferLength: buffer's length
  167. * Output         : None
  168. * Return         : PASSED: pBuffer1 identical to pBuffer2
  169. *                  FAILED: pBuffer1 differs from pBuffer2
  170. *******************************************************************************/
  171. TestStatus Buffercmp(u8* pBuffer1, u8* pBuffer2, u16 BufferLength)
  172. {
  173.   while (BufferLength--)
  174.   {
  175.     if (*pBuffer1 != *pBuffer2)
  176.     {
  177.       return FAILED;
  178.     }

  179.     pBuffer1++;
  180. ……………………

  181. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
AT45DB041读写正常V1.0.rar (45.35 KB, 下载次数: 40)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:346334 发表于 2019-2-27 19:44 | 只看该作者
不错啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表