stm8s0stm8s103f3 eepromm写16位数据需要注意什么

FLASH内存芯片STM8S003F/图片/功能介绍/规格书_深圳华永泰供应商
热门搜索:&&&
今天是 日 星期四
客服电话:2&
电子邮箱:&
首页 > FLASH内存芯片STM8S003F/图片/功能介绍/规格书
&ST (意法半导体)
全芯原装 芯赖品质
价值线---16兆赫STM8S &&&&& ---8位、8 kb的Flash,128字节&&&&& ---数据EEPROM&&&&& ---10-bit ADC,3定时器,UART,SPI,I²C
特性:核心•16兆赫先进STM8核心•扩展指令集架构和号管道•程序内存记忆:8 kb的F&数据保留100次后20年55°C•RAM:1 kb•数据内存:128字节的真实数据&耐力100 000写/擦除周期
&#到5.5V工作电压•灵活的时钟控制,&4主时钟来源:――低功率晶体谐振器振荡器内部&-外部时钟输入,user-trimmable 16兆赫RC &-内部低功率128 kHz RC•时钟时钟监控安全系统•电源管理:&-低功率模式(等active-halt,停止)―&―关闸外围单独的时钟•永久活跃,接通电源的低消费和断电复位
•与32个中断嵌套中断控制器&#个外部中断向量&计时器•先进控制计时器:16位、4日本游戏公司渠道,&3互补输出,空载插入和灵活的同步•16位通用计时器,&与3日本游戏公司渠道(IC、OC或PWM)•8位和8位预定&标器基本定时器•汽车唤醒定时器•窗口监管机构和独&立的监督机构计时器.
•通信接口UART与时钟同步输出操作,智能卡,红外线,&林主模式•SPI接口8 Mbit / s•I2C接口400 Kbit / s&模拟到数字转换器(ADC)•10-bit±1 LSB ADC 5多路复用&通道扫描模式和模拟看门狗I / o&#-pin包包括21 I/ o&高水槽输出•高度健壮的I / O设计,对当前免疫注射开发支持•嵌入式单线接口模块(游泳)快速芯片上的编程和非侵入性调试.
功能表格:
1 & LQFP32 pinout and pin description 2 TSSOP20/UFQFPN20 pinout and pin description 3 TSSOP20 pinout and pin description 4 STM8S003F3&UFQFPN20 pinout 5 STM8S003F3 TSSOP20/UFQFPN20 pin description
姓名:吴小姐QQ:座机:2/邮箱:21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 816|回复: 9
STM8S003F3调试跳坑记录
&&未结帖(70)
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
主题帖子积分
专家等级:结帖率:55%打赏:0.00受赏:1.00
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
本帖最后由 aozima 于
13:50 编辑
1. CLK-&PCKENR1 使能 CLK_PCKENR1_UART1 无效
想降低功耗,单独打开 CLK_PCKENR1_UART1,但UART无输出。
核对资料发现:
解决方法: 不要使用 stm8s.h中的 CLK_PCKENR1_UART1
自己使能 bit3
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
主题帖子积分
专家等级:结帖率:55%打赏:0.00受赏:1.00
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
2. PD4 TIM2_CH1没有反应
同样的 PD3 TIM2_CH2则完全正常。
经各种跳坑调试后发现,为了使用 PC7 [TIM1_CH2] 和 PC6 [TIM1_CH1]
所以在option bytes里面启动了 AFR0
数据手册对 AFR0 描述如下:
AFR0 Alternate function remapping option 0(2)
0: AFR0 remapping option inactive: Default alternate functions(1)?
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =
TIM1_CH1; port C7 alternate function = TIM1_CH2.
也就是说 TIM2_CH1也被映射走了,换成 PC5 TIM2_CH1 就完全正常了。
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
主题帖子积分
专家等级:结帖率:55%打赏:0.00受赏:1.00
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
本帖最后由 aozima 于
13:48 编辑
3. 数据手册中有写 AFR0和AFR1不能同时使用,但他们的IO并不冲突呀?而且我目前就这样用了,而且调试正常。
但刚才翻资料看到这句就懵了。
AFR1 Alternate function remapping option 1 (2)
0: AFR1 remapping option inactive: default alternate function(1)?
1: Port A3 alternate function = SPI_NSS; port D2 alternate function =TIM2_CH3.
AFR0 Alternate function remapping option 0(2)
0: AFR0 remapping option inactive: Default alternate functions(1)?
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =TIM1_CH1; port C7 alternate function = TIM1_CH2.
1. Refer to the pinout description.
2. Do not use more than one remapping option in the same port. It is forbidden to enable both AFR1 and
这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:43.00
主题帖子积分
谢谢分享;
ST、机器人、电路欣赏等版主;感谢大家的支持;
电子工程师群(深圳):
电子工程师群1:1897584;
物联网群:;智能机器人群:; AGV及立体仓库群:;
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
主题帖子积分
专家等级:结帖率:55%打赏:0.00受赏:1.00
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
本帖最后由 aozima 于
22:36 编辑
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错
STM8的乘除法指令是8位的,做16位或以上乘法运算时,编译器实际上调用了一个函数(通用作法);
而这个函数竟然用到了几个编译器自定义的全局变量(猜测);
在进入中断时,这几个全局变量是不会被自动保存的,从而造成这个乘法运算函数不可重入;
当主程序和中断同时使用8位以上乘除法时,自然就出错。
从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。
主题帖子积分
技术总监, 积分 33309, 距离下一级还需 16691 积分
技术总监, 积分 33309, 距离下一级还需 16691 积分
主题帖子积分
专家等级:结帖率:100%打赏:15.54受赏:681.88
主题帖子积分
技术总监, 积分 33309, 距离下一级还需 16691 积分
技术总监, 积分 33309, 距离下一级还需 16691 积分
谢谢分享!
主题帖子积分
初级工程师, 积分 2201, 距离下一级还需 799 积分
初级工程师, 积分 2201, 距离下一级还需 799 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2201, 距离下一级还需 799 积分
初级工程师, 积分 2201, 距离下一级还需 799 积分
这在使用中的确是要注意的,容易搞不清
主题帖子积分
高级技术员, 积分 548, 距离下一级还需 452 积分
高级技术员, 积分 548, 距离下一级还需 452 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 548, 距离下一级还需 452 积分
高级技术员, 积分 548, 距离下一级还需 452 积分
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错
STM8的乘除法指令是8位的,做16位或以上 ...
我在中断中做过除法,也没出现你的问题呀?
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
主题帖子积分
专家等级:结帖率:55%打赏:0.00受赏:1.00
主题帖子积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
高级工程师, 积分 5640, 距离下一级还需 2360 积分
本帖最后由 aozima 于
09:19 编辑
我在中断中做过除法,也没出现你的问题呀?
建议改进你的测试用例,必须是多处且同时。
算一次时间也不长,必须专门写测试程序,让主程序一直算,中断频繁触发,然后程序自己校验结果。
这样才能很快复现出来。
或编译器升级后,这个函数改进了也有可能。
主题帖子积分
主题帖子积分
专家等级:结帖率:31%打赏:0.00受赏:13.00
主题帖子积分
楼主需要STM8烧录器吗、我有现货
深圳永晟达电子科技有限公司专业代理:CYPRESS,Microchip,NXP,ST,ATMEL,TI,LTC,等系列原装进口IC
可代客户开发程序&&QQ; 我的淘宝: /
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
技术领袖奖章
人才类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章STM8S学习笔记-STM8的EEPROM操作 - 北北的日志 - 电子工程世界-论坛
请完成以下验证码
STM8S学习笔记-STM8的EEPROM操作
已有 3783 次阅读 17:55
|个人分类:|
EEPROM可用于MCU断电时的重要数据的保存。以下为STM8S003F3的EEPROM程序代码,验证可行。#define EEPROM_HEAD_ADDR & &0x004000//当写EEPROM时,将此字节的数据写入到EEPROM的首地址,表示操作过EEPROM。//上电读EEPROM时,若检测到EEPROM的首地址的字节为此字节则读出内部数据。#define FLAG_VALIDDATA & & &0x55//------------------------------------------------------------------------------------------------------------// 名称: Read_EEPROM 。// 功能: 读EEPROM,若内有有效数据则读出 。// 调用:无 。// 返回: 无 。// 说明: 无。// 形参: 无 。// 形参取值范围: 无 。//------------------------------------------------------------------------------------------------------------void Read_EEPROM(void){
&//EEPROM解除保护。 FLASH_Unlock(FLASH_MEMTYPE_DATA); & //若EEPROM的首地址即第一个字节是标志字节,可知之前向EEPROM中写入过数据,应读出。&& & & &if(FLASH_ReadByte(EEPROM_HEAD_ADDR) == FLAG_VALIDDATA)& & & &{
&//将10组共60个字节的数据从EEPROM中读出 。 for(i=0; i&10; i++) { for(j=0; j&6; j++) { Timer_Setting[i][j] = FLASH_ReadByte(EEPROM_HEAD_ADDR+1+i*6+j); }
//EEPROM加上保护。 FLASH_Lock(FLASH_MEMTYPE_DATA);}//------------------------------------------------------------------------------------------------------------// 名称: Write_EEPROM 。// 功能: 将数据写入到EEPROM中 。// 调用:无 。// 返回: 无 。// 说明: 无。// 形参: 无 。// 形参取值范围: 无 。//------------------------------------------------------------------------------------------------------------void Write_EEPROM(void){
&//EEPROM解除保护。 FLASH_Unlock(FLASH_MEMTYPE_DATA);&
//STM8S003F3一共有128字节的EEPROM空间。 //写入前,全部擦除。 for(i=0; i&128; i++) {
FLASH_EraseByte(EEPROM_HEAD_ADDR + i); }
//在EEPROM的首地址写入标志字节,表示EEPROM被使用过,内有有效数据。 FLASH_ProgramByte(EEPROM_HEAD_ADDR, FLAG_VALIDDATA); & //将10组共60个字节的数据写入EEPROM中。& & & & for(i=0; i&10; i++)& & & &{ for(j=0; j&6; j++) {
&FLASH_ProgramByte((EEPROM_HEAD_ADDR+1+i*6+j), Timer_Setting[i][j]);& & & & & & & & & & & & & & & & } & & & &} & & & &//EEPROM加上保护。& & & &FLASH_Lock(FLASH_MEMTYPE_DATA);}
作者的其他最新日志
评论 ( 个评论)
EEWORLD 官方微信
EE福利 唾手可得
Powered by  本文介绍stm8s103f3这款单片机的eeprom的用法。
& & & EEPROM是单片机应用系统中经常会用到的存储器,它主要用来保存一些掉电后需要保持不变的数据。在以前的单片机系统中,通常都是在单片机外面再扩充一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠性。现在,很多单片机的公司都推出了集成有小容量EEPROM的单片机,这样就方便了使用,降低了成本,提高了可靠性。
&&&&&&& 1.介绍STM8S103F3的首地址及容量。
&&&&&&& STM8单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。最为特色的是,在STM8单片机中,对EEPROM的访问就象常规的RAM一样,非常方便。EEPROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。
&&&&&&& stm8s103f3的EEPROM存储结构如下:
&&&&&&& 由上图可知,EEPROM的大小为0x0000+1=0x280=640bytes。
&&&&&&& 2.介绍EEPROM的解保护寄存器。
&&&&&&& 向该寄存器先写入0XAE,然后写入0X56就可以解除解保护。想该寄存器读操作时,会返回0;
&&&&&&& 3.FLASH状态寄存器
&&& 需要注意的是bit3,bit3为EEPROM区域解锁标记,0表示保护使能,1表示保护失效。向FLASH_DUKR中写入解锁数据后通过查看FLASH_IAPSR寄存器的bit3来确定EEPROM区域已经解锁。
&&&&&&& bit2表示编程结束标志。对EEPROM区域进行写操作后需要判断该位来确定已经写操作成功。
&&&&&&& 下面设计两个程序程序,第一个程序给EEPROM中的004000H位置写入一个值01H,少写入Flash中。第二个程序先读出004000H位置的值,然后给该值加1,再写入到004000H位置,也即是说每次上电时,004000H位置的值会加1。同时为了观察现象,在第二个程序中设置了一个LED灯,通过灯的亮灭次数来表示当前004000H位置的值。
第一个程序:
#include "iostm8s103f3.h"
3 void main()
unsigned char *p;
unsigned int
p = (unsigned char *)0x4000; // 指针p指向芯片内部的EEPROM第一个单元
// 对数据EEPROM进行解锁
FLASH_DUKR = 0xae; // 写入第一个密钥
FLASH_DUKR = 0x56; // 写入第二个密钥
} while((FLASH_IAPSR & 0x08) == 0); // 若解锁未成功,则重新再来
*p=1; // 写入第一个字节
while((FLASH_IAPSR & 0x04) == 0); // 等待写操作成功
29 }第二个程序:
#include "iostm8s103f3.h"
unsigned char
void delay (unsigned int times)
unsigned int i,j;
for(j=0;j&j++)
for(i=0;i&65535;i++);
void main()
unsigned char *p;
unsigned int
p = (unsigned char *)0x4000; // 指针p指向芯片内部的EEPROM第一个单元
// 对数据EEPROM进行解锁
PD_DDR = 0x10;
PD_CR1 = 0x10;
PD_CR2 = 0x00;
FLASH_DUKR = 0xae; // 写入第一个密钥
FLASH_DUKR = 0x56; // 写入第二个密钥
} while((FLASH_IAPSR & 0x08) == 0); // 若解锁未成功,则重新再来
*p = *p+1; // 写入第一个字节
while((FLASH_IAPSR & 0x04) == 0); // 等待写操作成功
ch=*p; // 将写入的内容读到变量ch中
for(i=0;i&i++){
PD_ODR = 0x00;
PD_ODR=0X10;
第二个程序下载完成之后,对开发版进行断电和上电操作,上电后PD4所对应的LED灯就会闪烁,闪烁次数代表*p位置的值的大小。
阅读(...) 评论()}

我要回帖

更多关于 stm8s003 eeprom 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信