新手不用库函数也能玩STM32

新手不用库函数也能玩STM32

ID:40844677

大小:85.50 KB

页数:4页

时间:2019-08-08

新手不用库函数也能玩STM32_第1页
新手不用库函数也能玩STM32_第2页
新手不用库函数也能玩STM32_第3页
新手不用库函数也能玩STM32_第4页
资源描述:

《新手不用库函数也能玩STM32》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、新手不用库函数也能玩STM32话说意法的STM32的库函数功能很强大,易用,等等。对新手来说确实很值得一用,省去了很多麻烦,但是库函数的一个缺点导致我们最终是不得不放弃的,那就是库函数的效率问题,稍微研究一下就知道他的效率还是蛮低的,这是为什么呢,原来STM32为了函数的通用性,大家都知道,编程序的时候存在时间和空间的平衡,有两种说法:      第一,以时间换空间。这种情况通常是FLASH不够用(但又不想用大的FLASH)的情况下需要做的,典型的做法是多用函数的调用。      第二,以空间换时间。这时候通常是对速度要求比较高,实时性要求较高的场合。尽量减少函数的调用。       所以S

2、TM32的库函数是属于第一种情况,当然不是为了省FLASH,想想STM32的FLASH那么大,不用省的。当然学习的时候,还是得用库函数的,实际应用的时候可能要自己写各个驱动函数的,这篇文章就是一篇LED的驱动例程,所有RCC初始化部分和PORT初始化部分都没有使用库函数,效率提高上还是很可观的。下面两个图片是仿真下的systemticktimer观察一个使用库函数,另个为自己编写的RCC初始化函数的运行情况,可以看出使用自己编写的程序,运行速度稍快,有人肯定会说,RCC初始化函数一般只会开机运行一次,后面就不会再调用了呀,何必在乎呢,确实,对于初始化函数可以使用库函数的,我只是以此例来明志而

3、已,说明库函数确实是效率(运行效率不是开发效率)有点低。另一对图片是编译容量的对比,可以发现不调用库函数的程序,代码量减少很多,这是因为库函数中有很多不被用到的函数,但仍然被编译进了工程。       以上两幅图片是运行效率的比较,第一张图是使用了库函数,明显看出使用库函数的效率要低点(点击图片可以查看大图片)        以上两幅图是编译时资源使用情况,因为使用库函数需要包含其他两个库文件,导致FLASH占用量比较大。(点击图片可以查看大图片) 下面贴出我的RCC初始化代码,新建工程,不会的话请参照我的前一篇文章,讲的就是在MDK下建立自己的STM32工程。//RCCconfigfunc

4、tion,useHSEclock//PLLis16xvoidRccInit(void){                                                       u32cnt=0;    //超时计数器//enableHSERCC->CR&=~(RCC_CR_HSEON);RCC->CR&=~(RCC_CR_HSEBYP);RCC->CR 

5、=(RCC_CR_HSEON);//waitforHSEtosetupDo{        cnt++;    }while((!(RCC->CR&(RCC_CR_HSERDY)))&&(cnt!=(u32)0x500

6、));//HSEisreadyif(RCC->CR&RCC_CR_HSERDY){        //flashprefechbufferenable        FLASH->ACR&=~(FLASH_ACR_PRFTBE);        FLASH->ACR

7、=FLASH_ACR_PRFTBE;        FLASH->ACR&=~(FLASH_ACR_LATENCY);        FLASH->ACR

8、=FLASH_ACR_LATENCY_2;         //HCKispllclock,AHBclock        RCC->CFGR&=~(RCC_CFGR_HPR

9、E);        RCC->CFGR

10、=RCC_CFGR_HPRE_DIV1;         //configAPB1clock,低速外设时钟        RCC->CFGR&=~(RCC_CFGR_PPRE1);    RCC->CFGR

11、=RCC_CFGR_PPRE1_DIV2;         //configAPB2clock,高速外设时钟        RCC->CFGR&=~(RCC_CFGR_PPRE2);    RCC->CFGR

12、=RCC_CFGR_PPRE2_DIV1;        //configPLLx16,HSEissourceofPLL,notdivid

13、eRCC->CFGR&=~(RCC_CFGR_PLLSRC

14、RCC_CFGR_PLLXTPRE

15、RCC_CFGR_PLLMULL);        RCC->CFGR

16、=(RCC_CFGR_PLLSRC

17、RCC_CFGR_PLLMULL16);        //enablePLL        RCC->CR

18、=RCC_CR_PLLON;        //waitforPLLready        wh

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。