历史上的今天
今天是:2024年11月07日(星期四)
2019年11月07日 | STM8S FLASH与EEPROM读写操作
2019-11-07 来源:eefocus
以下为FLASH操作:
#include "flash.h"
#include "stm8s_flash.h"
void Flash_Write_bytes(uint32_t Address , uint8_t * DataBuff,uint16_t length)
{
uint16_t Count=0;
for( Count=0 ; Count FLASH_ProgramByte_User(Address+Count,DataBuff[Count]); } } void FLASH_ProgramByte_User(uint32_t Address, uint8_t Data) //将库函数中u16改为u32,否则当地址超过10000H时出错 { /* Check parameters */ assert_param(IS_FLASH_ADDRESS_OK(Address)); *(PointerAttr uint8_t*) (uint32_t)Address = Data; } 注:写FLASH前需要解锁 FLASH_Unlock(FLASH_MEMTYPE_PROG); //FLASH解锁 以下为EEPROM操作: #include "EEPROM.h" #include "stm8s_flash.h" /******************************************************************************* * ==EEPROM初始化函数== * FLASH_DeInit(); --> 复位EEPROM的寄存器值 * FLASH_Unlock(FLASH_MEMTYPE_DATA); --> 解锁 对 Data EEPROM memory 进行操作 * FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); --> 标准编程时间 *******************************************************************************/ void EEPROM_INIT(void) { FLASH_DeInit(); FLASH_Unlock(FLASH_MEMTYPE_DATA); FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); } /**************************************************************************************** * Function: Derive_EPWrite * Object: 写EEPROM * 输入: 头地址(0~2048) 数据指针 数据长 * 输出: 无 * 备注: 2K EEPROM 不能超过 ****************************************************************************************/ void Derive_EPWrite(u16 Adr, u8 *pData, u16 Len) { u8 *p; //p指针指向EEPROM 对应的单元 p = (u8*)0x4000 + Adr; //解锁 FLASH_Unlock(FLASH_MEMTYPE_DATA); //写数据 for( ; Len > 0; Len--) { Refresh_WWDG_Window(); //喂狗 *p++ = *pData++; //等待写完成 while(!(FLASH_GetFlagStatus(FLASH_FLAG_EOP))); } //加锁 FLASH_Lock(FLASH_MEMTYPE_DATA); } /**************************************************************************************** * Function: Derive_EPRead * Object: 读EEPROM * 输入: 头地址(0~2048) 数据存放指针 数据长 * 输出: 无 * 备注: 2K EEPROM ****************************************************************************************/ void Derive_EPRead(u16 Adr, u8 *pData, u16 Len) { u8 *p; //p指针指向EEPROM 对应的单元 p = (u8*)0x4000 + Adr; //解锁 FLASH_Unlock(FLASH_MEMTYPE_DATA); //读数据 for( ; Len > 0; Len--) { *pData++ = *p++; Refresh_WWDG_Window(); //喂狗 } //加锁EEPROM FLASH_Lock(FLASH_MEMTYPE_DATA); }
下一篇:STM8S AWU低功耗模式
史海拾趣
|
磁盘的一直在转,而且磁道是完全对称的环形,怎么准确寻址扇区呢? 扇区的绝对地址是相对于第0个扇区来说的,可是磁盘的一直在转,而且磁道是完全对称的环形,没有任何一个扇区在物理上是特殊的,系统是怎么寻址磁盘的第0扇区的呢?… 查看全部问答> |
|
我系一在校学生,导师弄了块 techwell tw6802(似乎又象6805)的视频采集卡,让我写个linux驱动。 在官方网站上没有一点与技术相关的资料, 真奇怪。 请有做过这方面的朋友 能否发点 与tw6802/tw6805相关的资料(比如datasheet,代码都可)给 ...… 查看全部问答> |
|
我用的Sensor是200万的,芯片输出为1600×1200,而我在应用层只采取了 1600×1130,我不确定是不是这样引起图像不同步的原因,还是别的什么原因。 … 查看全部问答> |
|
本人是计算机专业的。由于现在快踏入大三的下学期了,大四下学期也就要找工作了,但我觉得现在自己学的东西还太片面了,也太广了。所以我想找一门自己感兴趣的专业方向作为自己这未来一年的奋斗目标,同时也为了将来的工作需要同,学一门精的课程。 ...… 查看全部问答> |
|
STM32具有12BIT ADC 确实很好,很强大!但也担心它的精度问题,听闻有3BIT线形误差。下面是AT91SAM7S64关于ADC误差的说明。… 查看全部问答> |
|
http://www.stmsky.com/bbs/viewthread.php?tid=1446&extra=网络版原理图==stm32核心板+w5100模块可以直接联网 ping 192.168.1.2直接打开 显示 hello world… 查看全部问答> |
|
Error[Pe065]: expected a ";"另一个程序就没有这个问题啊 #pragma vector=ADC_VECTOR __interrupt void ADC12ISR (void) { static uchar index = 0; results[index++] = ADC12MEM1; // Mo ...… 查看全部问答> |




