OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3309|回复: 6

大神教教我怎么去ST官网下载对应的例程啊,一直找不找呢?

[复制链接]

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2014-12-15
在线时间
4 小时
发表于 2016-1-15 14:07:48 | 显示全部楼层 |阅读模式
求大神教教我怎么去ST官网下载对应的例程啊,比如需要STM32F0系列的FLASH模拟EEPROM的程序,如何下载啊?先谢过了~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

201

帖子

0

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2013-12-14
在线时间
125 小时
发表于 2016-1-15 14:41:38 | 显示全部楼层
http://www.st.com/web/cn/catalog ... 743/LN1939/PF257884
这个网站最下面  download库里面有各个模块的例程
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-1-15 20:09:20 | 显示全部楼层
授人以渔
首先你要的是例程,程序应当属于软件的范畴,所以去Software找:


res.png



STM32官方给的例程还是非常丰富的
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-16
在线时间
5 小时
发表于 2016-1-16 14:03:06 | 显示全部楼层
楼主,我最近也在弄FLASH读写。感觉里边有一句,不太懂,不知道是啥情况。
[mw_shl_code=c,true]               
                if(NumToWrite==secremain)
                        break;//D′èë½áêøáË
                else//D′èëÎ′½áêø
                {
                        secpos++;                                //éèÇøμØÖ·Ôö1
                        secoff=0;                                //Æ«òÆÎ»ÖÃÎa0          
                           pBuffer+=secremain;          //Ö¸ÕëÆ«òÆ
                        WriteAddr+=secremain;        //D′μØÖ·Æ«òÆ          
                           NumToWrite-=secremain;        //×Ö½ú(16λ)êyμY¼õ
                        if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//ÏÂò»¸öéèÇø»1êÇD′2»íê
                        else secremain=NumToWrite;//ÏÂò»¸öéèÇø¿éòÔD′íêáË
                }         [/mw_shl_code]
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-16
在线时间
5 小时
发表于 2016-1-16 14:03:35 | 显示全部楼层
嘿嘿,我刚玩,都会发代码了。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-16
在线时间
5 小时
发表于 2016-1-16 14:08:38 | 显示全部楼层
WriteAddr+=secremain;
这一句,我感觉没有必要加吧,因为,在写的过程中,每写一次,地址WriteAddr会自动加2的,现在另起一页,这个WriteAddr应该是刚好加到这个页的页首位置。这个地址为什么要加上secremain(上一个页的剩余空间大小(2个字节为一个单位))

搞不懂,
有大神没有,指教我。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-16
在线时间
5 小时
发表于 2016-1-16 14:10:16 | 显示全部楼层
本帖最后由 leizi163163 于 2016-1-16 14:11 编辑

我把这段完整的代码再粘一次。[mw_shl_code=c,true]#if STM32_FLASH_WREN        //èç1ûê1ÄüáËD′   
//2»¼ì2éμÄD′èë
//WriteAddr:Æeê¼μØÖ·
//pBuffer:êy¾YÖ¸Õë
//NumToWrite:°ë×Ö(16λ)êy   
void STMFLASH_Write_NoCheck(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)   
{                                           
        u16 i;
        for(i=0;i<NumToWrite;i++)
        {
                FLASH_ProgramHalfWord(WriteAddr,pBuffer);
            WriteAddr+=2;//μ&#216;&#214;·&#212;&#246;&#188;ó2.
        }  
}
//′ó&#214;&#184;&#182;¨μ&#216;&#214;·&#191;aê&#188;D′è&#235;&#214;&#184;&#182;¨3¤&#182;èμ&#196;êy&#190;Y
//WriteAddr:&#198;eê&#188;μ&#216;&#214;·(′&#203;μ&#216;&#214;·±&#216;D&#235;&#206;a2μ&#196;±&#182;êy!!)
//pBuffer:êy&#190;Y&#214;&#184;&#213;&#235;
//NumToWrite:°&#235;×&#214;(16&#206;&#187;)êy(&#190;íê&#199;òaD′è&#235;μ&#196;16&#206;&#187;êy&#190;Yμ&#196;&#184;&#246;êy.)
#if STM32_FLASH_SIZE<256
#define STM_SECTOR_SIZE 1024 //×&#214;&#189;ú
#else
#define STM_SECTOR_SIZE        2048
#endif                 
u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];//×&#238;&#182;àê&#199;2K×&#214;&#189;ú
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)       
{
        u32 secpos;           //éè&#199;&#248;μ&#216;&#214;·
        u16 secoff;           //éè&#199;&#248;&#196;ú&#198;&#171;ò&#198;μ&#216;&#214;·(16&#206;&#187;×&#214;&#188;&#198;&#203;&#227;)
        u16 secremain; //éè&#199;&#248;&#196;úê£óàμ&#216;&#214;·(16&#206;&#187;×&#214;&#188;&#198;&#203;&#227;)          
        u16 i;   
        u32 offaddr;   //è¥μ&#244;0X08000000oóμ&#196;μ&#216;&#214;·
        if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//·&#199;·¨μ&#216;&#214;·
        FLASH_Unlock();                                                //&#189;a&#203;&#248;
        offaddr=WriteAddr-STM32_FLASH_BASE;                //êμ&#188;ê&#198;&#171;ò&#198;μ&#216;&#214;·.
        secpos=offaddr/STM_SECTOR_SIZE;                        //éè&#199;&#248;μ&#216;&#214;·  0~127 for STM32F103RBT6
        secoff=(offaddr%STM_SECTOR_SIZE)/2;                //&#212;úéè&#199;&#248;&#196;úμ&#196;&#198;&#171;ò&#198;(2&#184;&#246;×&#214;&#189;ú&#206;a&#187;ù±&#190;μ¥&#206;&#187;.)
        secremain=STM_SECTOR_SIZE/2-secoff;                //éè&#199;&#248;ê£óà&#191;&#213;&#188;&#228;′óD&#161;   
        if(NumToWrite<=secremain)secremain=NumToWrite;//2&#187;′óóú&#184;&#195;éè&#199;&#248;·&#182;&#206;§
        while(1)
        {       
                STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//&#182;á3&#246;&#213;&#251;&#184;&#246;éè&#199;&#248;μ&#196;&#196;úèY
                for(i=0;i<secremain;i++)//D£&#209;éêy&#190;Y
                {
                        if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//Dèòa2á3y            
                }
               
                if(i<secremain)//Dèòa2á3y
                {
                        FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//2á3y&#213;a&#184;&#246;éè&#199;&#248;
                        for(i=0;i<secremain;i++)//&#184;′&#214;&#198;
                        {
                                STMFLASH_BUF[i+secoff]=pBuffer;          
                        }
                        STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//D′è&#235;&#213;&#251;&#184;&#246;éè&#199;&#248;  
                }
                else
                {
                        STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//D′ò&#209;&#190;-2á3yá&#203;μ&#196;,&#214;±&#189;óD′è&#235;éè&#199;&#248;ê£óà&#199;&#248;&#188;&#228;.                                   
                }
               
                if(NumToWrite==secremain)
                        break;//D′è&#235;&#189;áê&#248;á&#203;
                else//D′è&#235;&#206;′&#189;áê&#248;
                {
                        secpos++;                                //éè&#199;&#248;μ&#216;&#214;·&#212;&#246;1
                        secoff=0;                                //&#198;&#171;ò&#198;&#206;&#187;&#214;&#195;&#206;a0          
                           pBuffer+=secremain;          //&#214;&#184;&#213;&#235;&#198;&#171;ò&#198;
                        WriteAddr+=secremain;        //D′μ&#216;&#214;·&#198;&#171;ò&#198;          
                           NumToWrite-=secremain;        //×&#214;&#189;ú(16&#206;&#187;)êyμY&#188;&#245;
                        if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//&#207;&#194;ò&#187;&#184;&#246;éè&#199;&#248;&#187;1ê&#199;D′2&#187;íê
                        else secremain=NumToWrite;//&#207;&#194;ò&#187;&#184;&#246;éè&#199;&#248;&#191;éò&#212;D′íêá&#203;
                }         
        };       
        FLASH_Lock();//é&#207;&#203;&#248;
}
#endif[/mw_shl_code]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 03:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表