-
很好的资源,先下载了,估计能用上
-
/*******************************************************************************
Copyright (C), 2003-2009, winpark Electronics Co., Ltd.
Flie name: for STM8Sxxx--eeprom
Author: black.lu
Version: V1.00
Date: 2010-6-29
Description:对STM8系列单片机的内部EEPROM进行操作
*******************************************************************************/
#include "File_Include.h"
//----------------------------------------------------------
#define MASS_KEY1 0XAE //写操作密钥,注意FLASH与EEPROM的密钥相反
#define MASS_KEY2 0X56
//----------------------------------------------------------
/***********************************************************
* 函数:void STM8_EEPROM_Init(void)
* 说明:EEPROM的寄存器初始化
* 参数:无
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_Init(void)
{
//都初始化为默认值
FLASH_CR1=0X00;
FLASH_CR2=0X00;
FLASH_NCR2=0XFF;
}
/***********************************************************
* 函数:void STM8_EEPROM_MASS(void)
* 说明:对STM8的EEPROM写使能和写保护
* 参数:bool mass_en
0--写保护
1--写使能
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_MASS(bool mass_en)
{
if(mass_en) //写使能
{
FLASH_DUKR=MASS_KEY1;
FLASH_DUKR=MASS_KEY2;
while(!FLASH_IAPSR_DUL)asm("nop"); //等待硬件置位
}
else //写保护
{
FLASH_IAPSR_DUL=0;
}
}
/***********************************************************
* 函数:void STM8_EEPROM_Write_Byte(void)
* 说明:EEPROM写一字节函数
* 参数:uint16 address----写入数据的地址
uint8 dat----写入的一字节数据
bool mass_en----密钥开启选择
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_Write_Byte(uint16 address, uint8 dat, bool mass_en)
{
if(mass_en) //是否需要密钥
{
STM8_EEPROM_MASS(1); //密钥使能
}
*((uint8 *)address)=dat; //写入地址
// STM8_EEPROM_MASS(0); //禁止写入,直接在使用时将其禁止
}
/***********************************************************
* 函数:uint8 STM8_EEPROM_Read_Byte(uint8 address)
* 说明:EEPROM读取地址一字节函数
* 参数:address----需要读取的地址
* 输出:无
* 返回:uint8
***********************************************************/
uint8 STM8_EEPROM_Read_Byte(uint16 address)
{
uint8 lc_dat_buf;
lc_dat_buf=*((uint8 *)address); //读取偏移地址数据
return lc_dat_buf;
}
/***********************************************************
* 函数:void STM8_EEPROM_Write_NByte(void)
* 说明:EEPROM写N字节函数
* 参数:uint16 address----写入数据的起始地址的地址
uint8 *p----写入的数据指针
uint8 n-----写入的个数
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_Write_NByte(uint16 address, uint8 *p, uint8 n)
{
uint16 lc_adr_buf;
uint8 i;
STM8_EEPROM_MASS(1); //密钥使能
lc_adr_buf=address; //起始地址
for(i=0;i<n;i++)
{
*((uint8 *)lc_adr_buf)=*p;
lc_adr_buf++;
p++;
}
STM8_EEPROM_MASS(0); //禁止写入
}
/***********************************************************
* 函数:void STM8_EEPROM_Read_NByte(void)
* 说明:EEPROM读N字节函数
* 参数:uint16 address----读取的数据的起始偏移地址
uint8 *p----读取后存入的首地址
uint8 n-----读取的个数
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_Read_NByte(uint16 address, uint8 *p, uint8 n)
{
uint16 lc_adr_buf;
uint8 i;
for(i=0;i<n;i++)
{
*p=*((uint8 *)lc_adr_buf);
p++;
lc_adr_buf++;
}
}
-
;-------------------------------------------------------------------------
; STRUCTURE OF THE INITIALIZATION INFORMATION
; -------------------------------------------
; This section describes the initialization data generated by C51 for
; explicit variable initializations (in segment ?C_INITSEC).
;
; Explicit variable initilizations at C source level are stored by C51 in
; the segment ?C_INITSEC. All partial segments are combined at linker level
; to one segment. The segment end value DB 0 is taken from this library module
; INIT.A51.
;
; Structure of the ?C_INITSEC information:
; (see below) [BYTE] ----+ repeated
; [BYTES depend on Info] ----+ repeated
; 0x00 [BYTE]
;
; has the following format:
;
; Bit 7 6 5 4 3 2 1 0
; T T B L L L L L T=Type B=BIGBIT L=LENGTH
;
; If BIGBIT is set, another LENGTH BYTE FOLLOWS. The LENGHT
; info of the first byte is then the HIGH part.
;
; Typ is one of the following:
; 0 := IDATA init values; the following bytes follow:
; - 1 byte address
; - init data bytes according LENGTH specification
;
; 1 := XDATA init values; the following bytes follow:
; - 2 byte address (high byte first)
; - init data bytes according LENGTH specification
;
; 2 := PDATA init values; the following bytes follow:
; - 1 byte address
; - init data bytes according LENGTH specification
;
; 3, BIGBIT=0 := BIT init values; the followign bytes follow:
; - 1 byte for each bit according LENGTH specification
; this byte has the following format:
;
; Bit 7 6 5 4 3 2 1 0
; I B B B B B B B I := state of the bit
; B := bit address
;
; 3, BIGBIT=1 := HDATA init values; the following bytes follow:
; - another LENGTH byte (since BIGBIT is always 1)
; - 3 byte address (MSB first)
; - data bytes according LENGTH specification
;
;----------------------------------------------------------------------
-
补救方法1: 再找个微软的东西下载一次,那个软件就会自动跳出来,上次下载的会保存在列表中
方法2:等我晚上回去看看桌面上的快捷方式指向哪里,O(∩_∩)O哈哈~
-
怎么办~~?PPP跟UIP怎么融合 ,和怎么下载到单片机上啊?
-
可能是烧写芯片时把读写保护打开了。
-
用I/O模拟可以实现,用硬件i2c模块可实现8的整倍数个
-
引用 10 楼 fenglin515 的回复:
不知道动手的过程,需要买个示波器来用吗?
应该不需要
-
向高手
学习
-
高手来帮帮忙啊,弄懂了,高分感激。。
MMU也是嵌入式学习的一道坎啊,这个通了,才能顺行往下做。。。
-
谢谢你的回贴!
这个我知道,但我看到的例程中都在中断中喂狗,
按这样说,要喂狗一定的进中断,要不进不了中断,WWDG会使CPU复位,
我的意思在哪个地方给程序喂狗呢?
感觉这个WWDG很乱!
-
ACC+ACC,就是ACC*2,就是ACC
-
学习了
-
之前用的PIC的IDE一向存在中文兼容性的问题
相当郁闷。。。
-
引用 2 楼 great_bug 的回复:
控制器是什么? MCU?
也许是软件不正确.....在平稳运转时两相的电压该是相同的
是stc的单片机
-
每次关掉功放这种声音消除了,但是每次有音频文件播放时都有尾音,每次播放完后关闭音频TPA一会时间然后再打开还是有这种声音,怎么解决呀?
-
GoAHead,很好用,我一上午就移植好了
-
高通现在有1G的了....HTC的HD2采用,现在有货了吧..
-
haha,减去80就对了
-
帮楼主顶上去,支持.......