打印
[STM32F1]

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

[复制链接]
292|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 | 只看该作者
只是学编程的话,那就根据数据手册看程序啊。

使用特权

评论回复
5
liliang9554| | 2020-10-11 13:24 | 只看该作者
新手看数据手册之类的资料,没太多帮助,不过可以看看STM的简单介绍。然后直接买开发板,先动手搞搞,然后在看资料,会比较容易理解,且**深刻。

使用特权

评论回复
6
wangzsa| | 2020-10-11 13:28 | 只看该作者
读代码 调试

使用特权

评论回复
7
xxrs| | 2020-10-11 13:32 | 只看该作者
多在实践中就成长的快

使用特权

评论回复
8
llia| | 2020-10-11 13:36 | 只看该作者
一边用一边学 这样上手快

使用特权

评论回复
9
wangzsa| | 2020-10-11 13:41 | 只看该作者

楼上正解 在加点压力 更快

使用特权

评论回复
10
huanghuac| | 2020-10-11 13:44 | 只看该作者

找个程序看 不懂了就百度

使用特权

评论回复
11
zhuhuis| | 2020-10-11 13:47 | 只看该作者
多看程序 多读读寄存器

使用特权

评论回复
12
zwll| | 2020-10-11 13:50 | 只看该作者
死皮赖脸的问明白人

使用特权

评论回复
13
llljh| | 2020-10-11 13:53 | 只看该作者
最重要的就是 先别上来就看书

使用特权

评论回复
14
shimx|  楼主 | 2020-10-11 14:02 | 只看该作者

嗯,预料中的结果,多谢大家啦

使用特权

评论回复
15
dengdc| | 2020-10-11 14:05 | 只看该作者
往里写数据时有时会死机

使用特权

评论回复
16
jiajs| | 2020-10-11 14:08 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
17
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();
}

使用特权

评论回复
18
wuhany| | 2020-10-11 14:16 | 只看该作者
主要看下,地址是否对齐和偶数地址开始写数据!

使用特权

评论回复
19
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)

使用特权

评论回复
20
jiahy| | 2020-10-11 14:22 | 只看该作者
什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

857

主题

10661

帖子

5

粉丝