微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 抛个砖:在 stm32 上使用二进制字库的简单方法

抛个砖:在 stm32 上使用二进制字库的简单方法

时间:12-12 整理:3721RD 点击:

code sourcery的gnu工具链,已被mentor收购,并且不再提供免费的lite版工具链

也可以用yagarto
象我一样只用gvim+makefile方式工作的话,其实用哪个都差不多
我比较懒得学各种乱七八糟的IDE,用gnu工具链的好处就是不管做什么,基本操作都一样

实测:
#include <inttypes.h>
volatile const uint16_t buf[] = {1,2,3,4};
加volatile时,分别用mingw/avr-gcc/arm-none-eabi-gcc编译,buf都在.data
不加volatile, 则mingw和arm的在.text, avr的还在.data
avr要想存到.text,必须加PROGMEM宏才行,大概因为它的flash和ram是分开寻址的

和这个有关系么 https://launchpad.net/gcc-arm-embedded/ 我一般用这个

哈哈,版老大,我就用最古老的数组方式,要么就外挂字库flash
我看着你写的那些有点晕乎,那些启动代码啥的从来不爱看。
再次恭喜!

所以我觉得既然能同样实现,还是喜欢用我熟悉的方式,那一大堆命令和文件真不想去了解。可能是我不熟悉汇编等更底层东西的原因。
直接用gnu工具链编译也挺好,不用多学一些图形界面的东西,这点点那点点,还方便自动化编译下载什么的。配合自己喜欢的编辑器效率更高。也方便自己的代码组织。
但是开始的时候坑太多了,比如cflag可能需要这么一大坨参数
-mcpu=cortex-m0 -DSTM32F030 -mlittle-endian -mthumb -mthumb-interwork -Wall -g -Os --specs=nano.specs
连接的还有一些,还有.ld文件 还有个启动的.s文件, .ld .s文件可能官方还没有提供需要自己去找, 找到可能还要修改
就算是相同的stm32平台, 不同的型号这些参数也会略有变化。
还有stlink下载,当然这个参数少. 还有openocd调试,这个要找对配置文件.
更不方便的是,这样用的人可能较少,有问题不好交流,最初也不容易去收集那些参数。
虽然有这么多麻烦但我也还是喜欢这么搞,因为搞定一次后面真的很方便,就是一个makefile模板。
所以想问一下汤姆,有专门集中介绍这个东西的地方么

我是直接在github上找了几个用stm32f1, stm32f0的现成项目
然后把它的工程文件夹一点一点删东西,直到只剩下必要的东西为止
还有就是日本那个elm-chan,他比较生猛,不用库,都是直接操作寄存器。他的makefile写得很好,好几个库比如fatfs、pttfs、mmc、xprintf之类都写得很漂亮。
下载工具以前用jlink,某次手贱点了升级,变砖了,又买了一个。。。
后来发现stlink更好用还便宜,就改用stlink了。淘宝上才十几块钱。缺点大概就是没法支持lpc、lm3s之类了,不过估计也用不着了。

官方那些用啊,在那几个现成项目里都带了
不过把结构稍微简化了一些
用寄存器就是怕移植性不好,再就是st的手册写得实在垃圾,比avr差远了。
有空了我把我用的空项目文件打个包放上来

有博客吗?
多写点文章给大家看吧。

st.avros.net
也没多少。。

avr的官方手册写得就很不错,简洁明了,逻辑清楚,部分型号有中文版
avr的缺点就是太鸡贼,rom/ram都偏少,自己随便diy着玩的话应该以mega168/328为主
量最大的mega48,4k flash如果用了浮点或printf之一基本就满了,
8k flash的话如果同时用了两者,基本也不剩多少了。
便宜的都没有usb,有usb的比stm32f103还贵
tiny系列除了2313以外都没有uart, 部分型号没有完整的spi/i2c
主频最多20M,以前短暂出过24M的型号后来又取消了,估计是flash速度跟不上?

主频好像是因为良品率问题

elm-chan的东西确实不错,xprintf,fatfs,pttfs我都在用

官方库太臃肿了,小器件体会特别深。

LM358这个没搜到呢,当时怎么得到这个值的?

试出来的。。。

初始化完了打个断点,IDE中查看相关外设寄存器

直接把各个配置寄存器的值printf到串口或者LCD?
stm8可以这么搞,stm32的话得累死吧。。。

反证stm32 flash比较大

挂上st-link直接看。很方便,STM8是可以的。STM32一般FLASH比较大,直接用库也没什么问题。

不同厂子的LM358都试过得到的保守值? 真汗

那倒没有。。
google搜“LM358 输出 0.6V”,有不少结果

这样做后能节省很多空间么? 我用gcc加lto后感觉差别不大啊,那些初始化函数也简单都很啊

好. 谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top