OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13359|回复: 5

stm32L152工程模板及操作内部自带的EEPROM示例(测试开发板为stm32L discovry)

[复制链接]

13

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2011-8-16
在线时间
6 小时
发表于 2012-6-25 18:01:28 | 显示全部楼层 |阅读模式

/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2011
 *
 *    File name   : main.c
 *    Description : Define main module
 *    author: yang yongzhen
 *    qq:534117529
 **************************************************************************/

#include <intrinsics.h>
#include "stm32l1xx.h"
//总共4096Bytes,即4K
#define EEPROM_START_ADDR   0x08080000
#define EEPROM_END_ADDR     0x08080FFF

void LEDInit()
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Enable the GPIO_LED Clock */
  RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE);

  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 // STM32_LEDOff(Led);
  GPIO_SetBits(GPIOB,GPIO_Pin_7);
}
void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
  }
}
void write_eeprom(uint32_t address,uint8_t data)
{
    if(IS_FLASH_DATA_ADDRESS(address))
    {
        FLASH_UnlockProgram();
        while(FLASH_GetStatus()!=FLASH_COMPLETE);
        FLASH_WriteDataByte(address, data);
        FLASH_LockProgram();
    }
}
uint8_t read_eeprom(uint32_t address)
{
    uint8_t tmp=0;
    if(IS_FLASH_DATA_ADDRESS(address))
    {
        FLASH_UnlockProgram();
        while(FLASH_GetStatus()==FLASH_BUSY);
        tmp=*(__IO uint8_t*)address;
        FLASH_LockProgram();
    }
    return tmp;
}
/*************************************************************************
 * Function Name: main
 * Parameters: none
 *
 * Return: none
 *
 * Description: main
 *
 *************************************************************************/
void main(void)
{
//NVIC_InitTypeDef NVIC_InitStructure;
//TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

  __disable_interrupt();

  /* Setup STM32 system (clock, PLL and Flash configuration) */
  SystemInit();

  // NVIC init
#ifndef  EMB_FLASH
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

  // LEDs Init
  LEDInit();
  GPIO_SetBits(GPIOB,GPIO_Pin_7);
  Delay(0xFFFF);
  GPIO_ResetBits(GPIOB,GPIO_Pin_7);
  for(int i=0;i<16;i++)
  {
     write_eeprom(EEPROM_START_ADDR+i,i);
  }
  __enable_interrupt();
  char temp,temp1;
  temp=read_eeprom(EEPROM_START_ADDR);
  temp1=read_eeprom(EEPROM_START_ADDR+15);
  if((temp==0)&&(temp1==15))
  {
      GPIO_SetBits(GPIOB,GPIO_Pin_7);
      while(1);
  }
  while(1)
  {
     GPIO_SetBits(GPIOB,GPIO_Pin_7);
     Delay(0x0FFFF);
     GPIO_ResetBits(GPIOB,GPIO_Pin_7);
     Delay(0x0FFFF);
    
    
  }
}
//说明:看到开发板上LED3,黄灯闪烁,说明写入和读取不成功,否则黄灯一直亮,说明确实读写成功了。

stm32L152模板及操作内部EEprom.rar

119 Bytes, 下载次数: 1842

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2012-6-25 18:20:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-9-11
在线时间
0 小时
发表于 2014-1-1 20:35:38 | 显示全部楼层
是空的没文件
专业研发生产GPRS、有线、无线测温仪
回复 支持 反对

使用道具 举报

27

主题

309

帖子

1

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2012-6-19
在线时间
19 小时
发表于 2014-5-14 09:49:06 | 显示全部楼层
确实是空的,大家不要下了
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-8-26
在线时间
5 小时
发表于 2014-7-30 10:04:31 | 显示全部楼层
我上传一个IAR里面的MCD Application Team出品的代码和头文件吧。一个.c和2个.h,解压后放在main.c那个目录里面,projec里面include那个c文件即可使用该c文件里面的各种EEPROM函数。

STM32L1XX EEPROM.rar

53.27 KB, 下载次数: 1036

回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-8-26
在线时间
5 小时
发表于 2014-8-2 16:33:07 | 显示全部楼层
DATA_EEPROM_Unlock();//先解锁EEPROM,才能写eeprom
*(__IO uint32_t *)0x08080000=0x1111// 假设要存入eeprom的值为0x1111

a=*(uint32_t*)0x08080000;//将eeprom地址为0x08080000的内容,赋给a。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 13:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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