STM32芯片选型

      很多初学者使用的的是现成的开发板,芯片型号已经选好!但是实际工程项目时,可能需要涉及到选型的问题了,比如是否低功耗,是否支持视频流等等,然后是选用多少PIn引脚,最后多少FLASH和ROM等;


       首先根据特殊功能要求选择不同芯片厂商和不同芯片,比如想用ST的芯片设计智能穿戴设备和纽扣电池供电的设备,一般推荐STM8L系列和STM32L系列了,同时价格和技术支持力度当然也要考虑;


       其次根据项目具体功能和器件,细化逐一罗列出需要的GPIO数量和特殊资源,比如产品中使用了电机同时又有速度和方向反馈需求,那么至少需要两路PWM用于驱动电机,两路TIM检测编码器,这样一个这样的电机需要4个GPIO,同时至少4个TIM通道,依此汇总所有的资源,同时考虑到扩展性(后期产品经理可能会修改需求,添加功能)预留一定的资源;


      最后就是FLASH和ROM的选择,这个过程一般是根据软件工程师根据经验预测,这个预测的经验是怎么来的呢?下面重点介绍这部分;

     本人采用的是即keil的MDK编译器,当所有的程序编写完成后编译时会出现以下提示:

      Program Size: Code=43812 RO-data=1608 RW-data=1280 ZI-data=72172  

      Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型,RW-data是(Read Write) 初始化了的可读写变量的大小,ZI-data是(Zero Initialize)

      没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化。

简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code+RO Data+RW Data;
程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data;


那么根据计算:FLASH = 43812 +1608+1280 =46700, 以上单位为B,除以1024换算45.6kB;

                           ROM = 1280 + 72172  = 73452,换算为71kB;

那么选择FLASH大于45.6kb,ROM大于71kb的芯片即可!


补充知识:

 1. C中的指令以及常量被编译后是RO类型数据。
 2. C中的未被初始化或初始化为0的变量编译后是ZI类型数据。
 3. C中的已被初始化成非0值的变量编译后市RW类型数据。


参考文献:

http://blog.sina.com.cn/s/blog_618b45a00101g3il.html


你可能感兴趣的:(STM32,stm32,rom,产品,设计,选型)