
STM32的DCode bus是连接到bus matrix的吗?参考手册描述和图片是不符吗?
stm32ide怎么正确的导出项目
STM32F105RBT6 2025年 ROSH REACH 报告
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
你好,我的setting里面设置都没有问题。但是显示failed download cortexm3
STM32F103C8出現找不到'STM32100B_EVAL/stm32100b_eval.h' file not found
stm32f407无法配置定时器2为全部dma
STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
评分
查看全部评分
评分
查看全部评分
新的主芯片,而且试了5、6片都一样。应该是10万次吧。
评分
查看全部评分
可是不断电的情况下是可以正常读取的(也就是说没有被清除)。
#define EEPROM_START_ADDR ((uint32_t)0x0800FC00) // 63/63
#define EEPROM_SIZE 256
/*
================================================================================
描述 : 读取模拟eeprom中的数据
输入 : start_addr--模拟的EEPROM地址,从0开始
输出 :
================================================================================
*/
void EEPROM_Read(u32 start_addr, u32 size, u8 *out_buff)
{
static u8 back_up_buff[EEPROM_SIZE]={0};
u32 i,read_data;
if(start_addr+size>EEPROM_SIZE)//范围检查
{
return;
}
for(i=0; i<EEPROM_SIZE; i+=4)
{
read_data=*(vu32*)(EEPROM_START_ADDR+i);
memcpy(&back_up_buff, &read_data, 4);
}
memcpy(out_buff, &back_up_buff[start_addr], size);
// printf_hex(back_up_buff, sizeof(back_up_buff));
}
/*
================================================================================
描述 : 往模拟EEPROM中写数据
输入 : start_addr--模拟的EEPROM地址,从0开始
输出 :
================================================================================
*/
void EEPROM_Write(u32 start_addr, u8 *buff, u32 size)
{
u32 i;
if(start_addr+size>EEPROM_SIZE)//范围检查
{
return;
}
FLASH_Unlock();//解锁
EEPROM_Read(0, EEPROM_SIZE, g_u8BackUp);//备份
memcpy(&g_u8BackUp[start_addr], buff, size);//复制替换
FLASH_ErasePage(EEPROM_START_ADDR);//擦除
for(i=0; i<EEPROM_SIZE; i+=4)
{
FLASH_ProgramWord(EEPROM_START_ADDR+i, *(vu32*)&g_u8BackUp);
}
// printf_hex(g_u8BackUp, sizeof(g_u8BackUp));
FLASH_Lock();//锁定
}
后来发现是 调试用的串口线在捣鬼,因为usb转TTL的串口线中TX是有一定的驱动能力的,如果设备断电后,但是串口线还插着,那么这时候的flash就会被擦除(固件的flash不会被擦除,仅仅是模拟eeprom那部分的flash)。我只是观察到有这个现象,但是根本原因不详。另外,解决的办法就是串口的TX、RX接上拉电阻就行了。