[STM32F1] 新手学STM32F,请大侠给些思路和方法

[复制链接]
784|26
 楼主| shimx 发表于 2020-10-11 13:10 | 显示全部楼层 |阅读模式
新手学STM32F,请大侠给些思路和方法
jiaxw 发表于 2020-10-11 13:13 | 显示全部楼层
楼主详细说说怎么回事啊,这么说太笼统了
spark周 发表于 2020-10-11 13:16 | 显示全部楼层
先自己运行例程,看结果
jiaxw 发表于 2020-10-11 13:19 | 显示全部楼层
只是学编程的话,那就根据数据手册看程序啊。
liliang9554 发表于 2020-10-11 13:24 | 显示全部楼层
新手看数据手册之类的资料,没太多帮助,不过可以看看STM的简单介绍。然后直接买开发板,先动手搞搞,然后在看资料,会比较容易理解,且**深刻。
wangzsa 发表于 2020-10-11 13:28 | 显示全部楼层
读代码 调试
xxrs 发表于 2020-10-11 13:32 | 显示全部楼层
多在实践中就成长的快
llia 发表于 2020-10-11 13:36 | 显示全部楼层
一边用一边学 这样上手快
wangzsa 发表于 2020-10-11 13:41 | 显示全部楼层

楼上正解 在加点压力 更快
huanghuac 发表于 2020-10-11 13:44 | 显示全部楼层

找个程序看 不懂了就百度
zhuhuis 发表于 2020-10-11 13:47 | 显示全部楼层
多看程序 多读读寄存器
zwll 发表于 2020-10-11 13:50 | 显示全部楼层
死皮赖脸的问明白人
llljh 发表于 2020-10-11 13:53 | 显示全部楼层
最重要的就是 先别上来就看书
 楼主| shimx 发表于 2020-10-11 14:02 | 显示全部楼层

嗯,预料中的结果,多谢大家啦
dengdc 发表于 2020-10-11 14:05 | 显示全部楼层
往里写数据时有时会死机
jiajs 发表于 2020-10-11 14:08 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
dengdc 发表于 2020-10-11 14:13 | 显示全部楼层
void EE_Program(void)
{        
        u32 EraseCounter = 0x00;        
        u32 NbrOfPage = 0x00;
        FLASH_Status FLASHStatus;
        u32 Address = EE_StartAddr;        
        u32 *pData;        
        u16 i;
        u32 Data;
        
        
//        OS_EXIT_CRITICAL();
        
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //开关预取指缓存
        FLASH_SetLatency(FLASH_Latency_2);  //设置代码延时2周期

        FLASH_Unlock();         //解锁

        NbrOfPage = (EE_EndAddr - EE_StartAddr) / FLASH_PAGE_SIZE;
        //清除FLASH待处理标志位
        FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);        

        //摖除页面
        FLASHStatus = FLASH_COMPLETE;
        for ( EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++ ) {
                FLASHStatus = FLASH_ErasePage(EE_StartAddr + (FLASH_PAGE_SIZE * EraseCounter));
        }
        
        Address = EE_StartAddr;        
        pData = (u32 *)&Ux[0][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);

        Address+=4;
        pData = (u32 *)&Ux[1][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);
               
        Address+=4;
        pData = (u32 *)&Ux[2][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);
               
        Address+=4;
        pData = (u32 *)&Ix[0][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);

        Address+=4;
        pData = (u32 *)&Ix[1][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);
               
        Address+=4;
        pData = (u32 *)&Ix[2][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);

        Address+=4;
        pData = (u32 *)&Ix[3][1];
        FLASHStatus = FLASH_ProgramWord(Address, *pData);
        
        Address+=4;        
        Data = Sys.LdAct;
        Data <<=8;
        Data |= Sys.LdActT;
        Data <<=8;
        Data |= Sys.LdVar;        
        FLASHStatus = FLASH_ProgramWord(Address, Data);
        
        Address+=4;        
        Data = Sys.In;
        Data <<=8;
        Data |= Sys.Bps;
        Data <<=8;
        Data |= Sys.InT;        
        FLASHStatus = FLASH_ProgramWord(Address, Data);
        
        Address+=4;        
        Data = Sys.Un;
        Data <<=8;
        Data |= Sys.UlT;
        Data <<=8;
        Data |= Sys.ChT;        
        Data <<=8;
        Data |= Sys.ChT_H;        
        FLASHStatus = FLASH_ProgramWord(Address, Data);
        
        Address+=4;        
        Data = Sys.Addr[0];
        Data <<=16;
        Data |= Sys.Addr[1];
        FLASHStatus = FLASH_ProgramWord(Address, Data);
        
        Address+=4;        
        Data = Sys.Uh;
        Data <<=16;
        Data |= Sys.Ul;        
        FLASHStatus = FLASH_ProgramWord(Address,Data);
        
        Address+=4;        
        Data = Sys.Uh;
        Data <<=16;
        Data |= Sys.Ul;        
        FLASHStatus = FLASH_ProgramWord(Address,Data);
        
        for(i=0;i<100;i++) {
                Address+=4;        
                Data = ErrData[i].ErrTime.Sec;
                Data <<=8;
                Data |= ErrData[i].ErrTime.Min;        
                Data <<=8;
                Data |= ErrData[i].ErrTime.Hour;        
                Data <<=8;
                Data |= ErrData[i].ErrTime.Day;        
                FLASHStatus = FLASH_ProgramWord(Address,Data);        
               
                Address+=4;        
                Data = ErrData[i].ErrTime.Week;
                Data <<=8;
                Data |= ErrData[i].ErrTime.Month;        
                Data <<=8;
                Data |= ErrData[i].ErrTime.Year;        
                Data <<=8;
                Data = ErrData[i].ErrType;
                FLASHStatus = FLASH_ProgramWord(Address,Data);        
               
                Address+=4;
                Data = ErrData[i].ErrVar;        
                FLASHStatus = FLASH_ProgramWord(Address,Data);                        
        }
        
        FLASH_Lock();
        
//        OS_ENTER_CRITICAL();
}
wuhany 发表于 2020-10-11 14:16 | 显示全部楼层
主要看下,地址是否对齐和偶数地址开始写数据!
dengdc 发表于 2020-10-11 14:19 | 显示全部楼层

#define EE_StartAddr  ((u32)0x0800F000)        //必须0x8000000+代码大小以上   73576  1b0
#define EE_EndAddr    ((u32)0x08010000)
#define FLASH_PAGE_SIZE    ((u16)1024)
jiahy 发表于 2020-10-11 14:22 | 显示全部楼层
什么意思?不是很明白你说的什么,能再解释一下这个现象吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

857

主题

10661

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部