几个简单的STM32 汇编汇编程序

查看: 66464|回复: 460
学习使用32位微控制器STM32的汇报(20楼提供一个完整的,简单的DEMO参考)
新学期系里安排我给研究生上嵌入式系统原理与应用的课程。理论上当然没有问题了。但是这样的课程光是理论是没有用的,重要的环节还在于选择一个好的硬件平台,让大家能实践。
& & 给研究生上课好象不能使用8位机了,当然是32位的。我选择使用的是STM32,32位的“单片机”,一片芯片可以解决许多问题了。当然如果你要做更大的东西,比如GPS导航仪,STM32内部的资源可能紧张了。但不管是选择其它的32位ARM芯片,还是在STM32上扩展,我想问题不大了,基础已经有了。
& & 首先与ST公司以及相关的代理商取得了联系,得到了ST公司的支持,准备与我们建立STM32的联合实验室,并送我们一些开发学习套件。
& & ST公司送我们15套STM3210E-LK,我们自己购买15套,保证每个学生手中一套。另外还准备购买一套最新的MDV-STM32-107(使用最新的STM32F107,有USB HOST,以太网接口,TFT屏等)。
& & 硬件环境和平台准备好了,接下来选择使用那个软件开发平台:IAR 或 MDK(keil for ARM)。编写了一个最简单的控制STM3210E-LK上4个LED循环点亮的程序,完全不使用ST提供的STM32的库,在IAR540和MDK380a上做测试,两个都可以。但是MDK使用还是比较方便,考虑学生可能学习使用过51,对KEIL环境比较熟悉,决定使用MDK(还有一个重要的原因在下面介绍)。
& & 不过还是发现MDK的不足,在环境中不支持使用STM3210E-LK板上内嵌的ST-Link对芯片进行擦除和下载编程,只能过DEBUG的方式做这些事情。不知道是什么原因。问过ST的技术人员,说下个版本会UPDATE的,不知道是MDK还是ST-Link做UPDATE。不过能把代码下到芯片还是不影响目前的使用的。
=============================================================================================================================
我编写的测试代码如下:
#define GPIOF_CRL& &(*((unsigned int *)(0x40011c00)))
#define GPIOF_CRH& &(*((unsigned int *)(0x40011c04)))
#define GPIOF_ODR& &(*((unsigned int *)(0x40011c0C)))
#define RCC_APB2ENR (*((unsigned int *)(0x)))
void Delay(void)& & & & //延时函数,流水灯显示用
&&for (i=0;i&0x9FFFF;i++);
int main(void)
&&RCC_APB2ENR |=(1&&7); & & & & // 使能PORTF口的时钟
&&GPIOF_CRL &= 0x;& & & & // 将GPIOF_CRL高16位都清0,这样CNF为00,选择为推挽输出模式
&&GPIOF_CRL |= 0x;& & & & // MODE选择为11,即50MHz输出模式
&&GPIOF_CRH &= 0x;& & & & // 将GPIOF_CRL高16位都清0,这样CNF为00,选择为推挽输出模式
&&GPIOF_CRH |= 0x;& & & & // MODE选择为11,即50MHz输出模式
&&while(1)
& & for (i=6;i&=9;i++)
& && &GPIOF_ODR = (1&&i);
& && &Delay();
系统时钟采用初始化的配置,没有使用任何中断,所以只是配置了驱动LED使用的F口,并打开了F口的时钟。这是最原始的编程了。熟悉8位开发的一定不陌生。
但是STM32功能太多了,众多的寄存器,各种不同功能,比8位机翻了几翻。如何方便的使用呢,总不能对着手册一个一个的查吧?
ST提供的方法是采用ST提供的函数库。仔细研究了ST的STM32函数库,发现主要是实现了2个主要功能:1。芯片资源的初始化,2。各个部件的基本功能使用。这个库设计的太软件化,硬件出身的工程师恐怕要琢磨好长时间,还不一定能很好的使用。
我想目前先不使用ST提供的STM32库,那么如何跳过呢?
当我下载了MDK提供的例子后,发现找到了一个比较好的办法:就是使用MDK例子中的提供的STM32_Init.c
/*----------------------------------------------------------------------------
* Name:& & STM32_Init.c
* Purpose: STM32 peripherals initialisation
* Version: V1.27
* Note(s):
-------------------------------------------------------------------------------*/
采用这个文件,用户可以在MDK中,使用菜单选择方式进行配置,然后初始化代码会自动生成的,生成的代码也非常简洁。
同样的例子,使用了STM32_Init.c后变成:
#include &stm32f10x_lib.h&& && && && && && && && &// STM32F10x Library Definitions
#include &STM32_Init.h&& && && && && && && && && &// STM32 Initialization
void Delay(void)& & & & //延时函数,流水灯显示用
&&for (i=0;i&0x4FFFF;i++);
int main(void)
&&stm32_Init ();
&&while(1)
& & for (i=6;i&=9;i++)
& && &GPIOF-&ODR = (1&&i);
& && &Delay();
下面是整个工程代码:
点击此处下载
(原文件名:STM32_GPIO.rar)
注意里面的STM32_Init.c文件,在MDK打开后,编辑窗口的下面会多出一个“Configuration Wizard”选项,单击该按钮后,芯片资源的初始化就可以任意选择,STM32_Init.c会根据你的选择产生相应的初始化代码。
请大家仔细体会这个STM32_Init.c,最好研究它的写法,我把里面的个别选择提示改成了中文。希望有人能把这个文件的选择提示改成中文提示,这样就更方便国内工程师的使用了。
使用了STM32_Init.c后,编译的结果为:
assembling STM32F10x.s...
compiling STM32_Init.c...
compiling main.c...
linking...
Program Size: Code=244 RO-data=252 RW-data=0 ZI-data=512&&
&.\Obj\Gpio.axf& - 0 Error(s), 0 Warning(s).
而我最原始的代码编译结果为:
assembling STM32F10x.s...
compiling main.c...
linking...
Program Size: Code=432 RO-data=252 RW-data=0 ZI-data=608&&
&led1.axf& - 0 Error(s), 0 Warning(s).
两者比较,使用STM32_Init.c后生成的代码还要短。在原始代码中,初始化RCC_APB2ENR采用了移位,而且GPIOF_CRL和GPIOF_CRH用2句进行配置。这样对比以下,说明STM32_Init.c生成的初始化代码还是非常简洁的。要好与使用STM32提供的库。
===============================================================================
总结归纳一下:
1。STM32_Init.c中仍然使用了STM32函数库中定义的数据结构(#include &stm32f10x_lib.h&)
2。使用STM32_Init.c后,可以大大方便对芯片进行初始化的设置。这对于STM32的入门和编写一些基本的应用程序已经足够了。
3。如果你不想使用,或STM32库中的各个部件基本功能使用函数不适合你的应用,你完全可以抛开STM32的函数库,编写自己的代码。
4。由于STM32_Init.c中仍然使用了STM32函数库中定义的数据结构,因此它是兼容STM32函数库的。所以可以初始化使用STM32_Init.c,然后在使用STM32的库。
5。最后一点,不管是自己写初始化代码,还是使用MDK例子中提供的STM32_Init.c,还是使用STM32的库,你都必须认真看手册,了解STM32有哪些接口,有哪些功能,有哪些寄存器。这个是最基本的,没有这个基础,什么也不会用。使用MDK例子中提供的STM32_Init.c,只是不需要你去记住寄存器的地址,每个位的功能,方便初始化代码的编写。
=========================================================
以上是最近几天的学习汇报,都是个人的体会。尽管关注STM32一年多了,参加了ST在国内第一次的STM32发布会,但一直没有具体的玩一下,所以还是新手。
贴出本贴的目的,一是希望熟悉STM32的朋友和STM32的老手指正,二也是作为一个任务完成。因为在ST与我们建立联合实验室的协议中有这么一条,希望我们能帮助STM32的学习、应用和推广做点工作。
马老师开始搞STM32了,期待马老师以后的好帖
想做马老师的学生,可我只有专科学历
很好的资料,谢谢马老师。
想做马老师的学生,可惜我不想考研究生,特别是不想考&正治&.
谢谢马老师的帖子,给我们初学者很大帮助,期待您的STM32教程~~
清晰明了,把复杂的问题简单化,是老师的英雄本色。
学习了&&期待马老师的STM3210E-LK&&详细教程或例子在mdk下!
马老师的话“不过还是发现MDK的不足,在环境中不支持使用STM3210E-LK板上内嵌的ST-Link对芯片进行擦除和下载编程,只能过DEBUG的方式做这些事情。不知道是什么原因。问过ST的技术人员,说下个版本会UPDATE的,不知道是MDK还是ST-Link做UPDATE。不过能把代码下到芯片还是不影响目前的使用的。 ”
有点疑问,STM3210E-LK&&到底能否在MDK下用呢? STM3210E-LK&&在MDK下用 如何使用 能否详细介绍
我用三合一板,中间的jlink板灯闪。他不是仿真另外两个的吗?我是一只超级的萝卜鸟。太萝卜~~~汗汗的问问
谢谢马老师!期待有更多的东西。
什么时候也能搞上stm32 就happy了
马老师开始搞STM32了,期待您的STM32教程~~
强烈欢迎马老师教我们学习STM32,等了N久,终于等到马老师出面了。
太好了,我也是正在用STM32
谢谢马老师。
STM3210E-LK是一个学习开发板,上面集成了ST公司的ST-Link编程仿真器。STM3210E-LK在IAR和MDK中都可以用,只是目前MDK对ST-Link的下载编程操作支持的不到家。
三合一的我也有,中间的是ST-Link,用于对两边STM32和STM8进行下载和仿真调试。我试过了,在MDK中也是一样的,支持的不好。
======================================================================
& &我试过从网上下载了一个早期的支持ST-LinkII的驱动,装在MDK下,但不行。目前的ST-link好象是ST-LinkIII,但是在最新的IAR和MDK中已经没有后面版本的标记了,都是ST-Link。IAR对现在的ST-LINK支持的比较好,而在MDK中有问题,不知道是谁的原因。或者单独的ST-Link与集成的ST-Link有差别?学习板上集成的ST-Link是ST-Link的简易版?不过为什么在IAR下没有任何问题?
& &ST公司也是把STM32作为32位的微控制器(“单片机”),而不是微处理器。这样把单片机应用又提高了一个层次,原来使用8位机处理USB、SD卡、连网非常痛苦,资源不够,外面还要扩充许多接口芯片,使用STM32就方便了。
& &我原来设计了使用AVR的M128做USB、连网的实验,硬件上扩展许多片子,CH375、32KRAM等,看到STM32出来,我就放掉了。现在的STM32板是我原设计的实验板的1/4,但性能大大增强了。
& &STM32刚推出时功能还不最强,一年多后,107出来了,USB已经完整了,支持OTG,网络也有了,开发平台和工具也逐渐成熟了,问题也比较少了,到了入手学习和使用的时机。
&&入手前,要选择好适合的平台和工具,这样可以少浪费时间。所以我写了最简单的代码,主要是熟悉和挑选软件平台和工具性能。
1、STM3210B-LK上集成的ST Link存在两个版本,差异仅是JTAG接口电路部分,与驱动无关。
2、STM3210B-LK上集成的ST Link应该叫“ST Link II”(万利的命名),在IAR与MDK下均以版本支持,且不同的版本,驱动也不相同,且均需手工安装。
3、STM3210E-LK上集成的ST Link猜可能是“ST Link III”(按照万利的命名),我没有这块板,不确认,如需要可问ST确认。
4、三合一的板上集成的应该是ST Link,等同于“ST Link III”(万利的命名),IAR和MDK下在对于的版本中无需另行安装驱动。
5、上文提到的ST Link非万利的“ST Link”。万利早先是有推出一个ST Link 工具,但支持的仅是ST ARM7,不知道现在还有没有在卖。
6、ST的sale code中ST Link的明确P/N为:ST-Link/A,去ST订购ST-Link,必需使用这个,人家才知道你要的是什么。这个ST Link是包含有外壳的。
7、ST销售的ST Link与三合一上简装的ST Link本质没有任何差别。仅有一个地方稍有不同。ST自己的ST Link是不支持对外供电的,但三合一板带的ST Link在未掰开的状态下,是可以向STM8S供电的。
至于MDK对ST Link的支持就不清楚了,没用过。MDK下都只用ULink 2,IAR下只用JLink。ST Link仅偶有在STM8S调试时当编程器用,这东西毕竟比RLink小很多,携带方便。
谢谢楼上的解释和说明。一个“ST-Link”引出这么多的DD,初学者和一般人肯定会搞糊度的。
我是最近开始上手STM32的,手上有一块STM3210E-LK和一块STM8/STM32三合一的板,都是ST公司今年送的。由于板上都集成有“ST-Link”,所以没有特别关注其它的编程仿真工具。
这几天写了个简单的代码,在IAR(540)和MDK(380a)上做测试,都可以跑起来的。不管是STM3210E-LK,还是三合一的板,在两个软件环境中都是选择“ST-Link”,也都无需另行安装驱动。只是在MDK中,只能在DEBUG过程中将代码下到板上,而它里面专有的删除和下载功能却不能用。执行也不保错,就是板上的代码既没有擦除,也没有更新。
这是比较奇怪的事情。因为在相同的软件环境下,既然DEBUG可以把代码下到板上,而专用的下载功能却不行。驱动应该是相同的吧,或许我漏掉了某个设置?
依我的经验,STM32的优点就不必说了,反正用它做项目的人自然明白
说说缺点:
1、RAM/ROM比普遍不合适:通常 1:4 的比例应该是效率最高的,但STM32貌似从来没有达到过这个比例……
2、没有MPU:阉割版的CM3就真的只能当高速单片机用了,实际上性能利用率相当低——虽然据说后期版本会补上这个,但我还没见到过
3、数据手册写的一塌糊涂:如果假设STM32的硬件规划者是博士毕业水平,则它的手册编写者充其量是个高中在校生水准——而且还是濒临开除边缘的文科班在校生……我真的很怀疑这些手册是否有人做过整理?抑或仅仅只是把硬件设计师的草稿本和内部BBS发言拿来装订成册结集出版?
4、官方库编写的令人哭笑不得:同样按照上面的比喻,官方库的编写者大概勉勉强强算是个三流半大学的大一学生吧……那库函数编的……直接点说,微软的能耐没学到半点,微软的渣滓全捞了个十足十还带沤臭沤酸的……正常三五行汇编/C语句就能搞定的东西,活活要折腾出几十上百行汇编代码量……而且也亏得现在的C编译器都使得是扩展标准,若是早期点的ANSI C,恐怕上手就会被那些又臭又长的标识符整死吧……
整体而言,我得到的结论就是:
ST公司,怕是根本没有合格的软件人才在里面供职……
正常,现在招聘都需要能说会道的,会干的人家看不上
上传一个完整的DEMO,供初学者参考。
点击此处下载
(原文件名:STM32_Demo1 for MDK.rar)
================================================================
我在网上找过很多的参考资料,包括国内和国外,个人认为这个方式(或摸版)是最简洁的,同时也兼容ST的STM32库。
在MDK中建立这个摸版只需要以下4个文件:
STM32F10x.s& &&&==& 该文件在新建project时,MDK会从系统库中拷贝到你的工作目录下
STM32_Init.c& & ==& MDK的初始化芯片配置及代码生成文件,提供使用菜单方式进行配置
STM32_Init.h& & ==& 上面文件的头文件
STM32_Reg.h& &&&==& 补充ST提供的寄存器定义文件中没有给出的寄存器(主要是位)的定义
用户只要将后面3个文件拷贝到自己的工作目录下就可以了。具体请参考示例STM32_Demo1 for MDK。
几点体会和注意事项:
1。使用STM32_Init.c进行初始化配置,生成代码非常方便,但是否能满足更多的需要还在摸索中,比如中断优先级的配置等。
2。使用STM32_Init.c进行初始化配置时,是可以选择是否允许中断(只是目前还没了解中断优先级如何在里面配置的)。一旦允许了某个中断后,在STM32F10x.c中找到该中断服务的函数名称,拷贝到你的代码中,然后在下面编写你的中断服务代码。
3。systick中断服务中不需要清中断标志位,而在其它的,大多数的中断服务中,首先要把本中断的中断标志位软件清除。
4。开始学习使用STM32时,最好不要配置RCC,采用其上电缺省值,主要为:使用8M内部HSI,HSI作为系统时钟,AHB为8M,FLITFEN“Flah时钟”,SRAMEN“SRAM时钟”(其它看手册吧)。
5。等有一定的基础后,再尝试设置RCC,使用PLL,让STM32在72M高速运行。
6。如果设置STM32运行在72M,还必须正确设置FLASH_ACR寄存器。在STM32_Init.c中为Embedded Flash Configuration项:LATENCY选择2 wait states(操作FLASH的速度慢,需要加等待时间);以及Prefetch Buffer Enable(允许使用BUFF缓存,提高读指令的效率)
7。ST的STM32手册写的不好,非常零乱,有些重要的东西没有明确给出,比如:
& &与FLASH操作相关的寄存器的具体位功能说明,与SYSTICK相关寄存器的具体说明等,我都没有找到(也许没有看仔细)。
& &GPIO可以设置成输入方式,上拉/下拉有效,这个到是说明了。但到底是上拉,还是下拉?如何设置却没有明确说明。国内2本介绍STM32的书上更是没有了。最后我在手册的一个表格中找到了答案:当设置成输入方式,上拉/下拉有效后,还要看ODR(口输出寄存器)的值,为1为上拉有效,为0为下拉有效。还好这点与AVR的I/O口类似的,我一看就明白了。
8。更加坚定和坚持我自己的观点:对于嵌入式硬件工程师(软件工程师就不好说了,看你写什么层次的软件了),如果没有深厚的8位基础,还是不要赶时髦学32位系统。目前学习8位机,最好是AVR或STM8。至于应用,STC51也可以。学和使用不一定都是相同的系统,但学习要学最好的。
to 18楼watercat:
知道你是这方面的高手,欢迎参加交流。对于你的几个问题我有些个人的观点,大家讨论。
首先讨论的基础是把STM32作为“单片机”看,ST公司也把它叫微控制器,而不是微处理器。因此它主要为“控制”设计,而不是为了“处理”“运算”。从这个角度出发:
1、RAM/ROM比普遍不合适:通常 1:4 的比例应该是效率最高的,但STM32貌似从来没有达到过这个比例……
& &标准51/52内部是128/256,太少了。现在的改良51已经增加了,如STC的51,内部增加了1K自由的SRAM(XDATA)。AVR的内部的RAM也在1K-4K范围。STM32F103最大为64K/512K(SRAM/FLASH),为1:4。从控制的角度看,1:4不需要,我个人认为在1:8到1:16合适(片内)。注意最新推出的STM32F105和107到是1:4(64K/256K),但确是减少了FLASH。我不明白为何是减少FLASH,而不是增加SRAM。105、107 支持USB OTG(HOST),网络等,应该是增加DRAM的。但不管如何,就是有128K,256K的RAM,处理图象也是不够的。充其量做个数码像框,放个MP3吧。
2、没有MPU:阉割版的CM3就真的只能当高速单片机用了,实际上性能利用率相当低
& &实际上就是32位的高速单片机,没有MPU对于跑OS有点麻烦。但要跑OS,其它的资源也受到限制了。跑OS玩玩可以,实际做东西还是选ARM微处理器吧。至于性能利用率就看如何选择和使用了。能用8位解决的,当然还是用8位的(最近刚设计完成了一个设计,使用STC51兼容芯片,功能比标准51强多了,价格也便宜)。如果系统需要USB、SD卡、等,8位不行了,这时考虑STM32吧。
3、数据手册写的一塌糊涂:如果假设STM32的硬件规划者是博士毕业水平,则它的手册编写者充其量是个高中在校生水准——而且还是濒临开除边缘的文科班在校生……我真的很怀疑这些手册是否有人做过整理?抑或仅仅只是把硬件设计师的草稿本和内部BBS发言拿来装订成册结集出版?
& & 这点比较认可。不过新的东西总要有个过程才能成熟的。不过就是这些“高中在校生-文科班”写的东西,国内很多人也消化不了的。都一样拉。
4、官方库编写的令人哭笑不得:同样按照上面的比喻,官方库的编写者大概勉勉强强算是个三流半大学的大一学生吧……那库函数编的……直接点说,微软的能耐没学到半点,微软的渣滓全捞了个十足十还带沤臭沤酸的……正常三五行汇编/C语句就能搞定的东西,活活要折腾出几十上百行汇编代码量……而且也亏得现在的C编译器都使得是扩展标准,若是早期点的ANSI C,恐怕上手就会被那些又臭又长的标识符整死吧……
& &提供函数库是个不得计的办法。内部东西太多了,许多人望而生畏,那么给你个库吧。
& &而实际上目前提供KU只是一个“噱头”。看这个KU比看手册还要化费时间。
& &作为初学者想通过KU走捷径,实际上往往是行不通的。ku只能做参考,是给有经验和高手使用的,因为要真正使用还必须做过测试验证,只有有经验的高手才知道这个库是否能真正的使用,以及如何使用。
& &另外写这些库的人,大多数是学软件的出身,实际控制系统做的很少。编写API都是单一、通用的,能实现功能,但效率就打问号了,更不考虑与系统中其它的东西的配合了。最好的例子就是键盘扫描加消抖的代码,众多的入门书、参考书、教课书上都给出的采用软件延时20ms消抖,连32位系统的教课书上也是这样。如果这样的例子代码做为一个库函数,那它的效率就不要谈了,如果再配合一个类似的采用软件延时的8位LED数码管动态扫描库函数在系统中一起使用,你的LED显示就好看了。
& &更能说明问题就是PRINTF函数,以及GETCHAR。这个C的标准库已经在多数嵌入式C平台中做了改动,指向了一个UART。它通常采用轮循的方式发送和接收字符,效率是非常差的,在调试中使用还可以,在系统中正式使用就需要考虑了。对于这点,CVAVR就做的比较好,你可以使用它的向导,建立一个采用中断加缓冲的低层驱动函数:putchar()和getcha()。
& &因此对于学习使用一般的单片机系统,开始最好不要依赖什么KU,学会自己从低层开始编写是最实在的本领,也是扎扎实实的功底。
ST-LINK:我自己试验看来,MDK下面,只有两种,一种是199万利上的ST-LINK-II,其余的都是ST-LINK,MDK里很明显,ST-LINK-III的驱动对应的是ST-LINK和ST-LINK-III,而ST-LINK-II是另一种驱动。MDK380A里只有ST-LINK-III的驱动,这个驱动是同时用在ST-LINK和ST-LINK-III上,在MDK380A里面用ST-LINK-II,需要拷贝以前的ST-LINK-II的驱动
也就是说ST-LINK-III和ST-LINK可以看成一种东东
199板子上面的ST-LINK-II则是另一种东东
22楼,你手上有ST-LINK也就是ST-LINKIII吗,在MDK380A里的Flash选项的DOWNLOAD和Erase功能能正常使用吗?请测试一下。我的2个集成的ST-LINK只能在DEBUG中Download。
马老师,抱歉,我手上没有ST-LINK,之前是帮别人调试的时候,测试过ST-LINK,但没有使用MDK的下载功能。ST-LINK-II的DOWNLOAD和ERASE也是没法使用的。程序只能DEBUG进去。网上反映的情况来看,ST-LINK(ST-LINK-III)也是不能DOWNLOAD和ERASE的
下载了,就要支持下
不管有无结果还是要谢谢楼上提供的信息。
=========================================
我的demo2准备打通STM3210E-LK上的128*64的点阵液晶屏,有了它方便后面的调试。
基础代码:STM3210E-LK中DEMO例程的LCD代码。
重点学习FSMC、GPIO的第2功能映射。
离开学还有10天的时间,现在做背课的准备工作,既学到东西,又是为了工作,两不误。
马老师.购买STM32-107开发板.请考虑这个..http://item.taobao.com/auction/item_detail-db2-becf28adde7e1b9c4169c90e.htm&&其实也没有什么考虑了..网上现在有卖的就几家店
东西我看到过。是你设计的DD么?
问2个问题;
1。是否配套有下载编程调试工具,或集成在版上。是什么类型的,支持的情况如何?
2。提供什么样的参考DEMO源代码?
如果合适,我考虑可以购买几套。
看样子板上不带调试工具。这个DD也不是我的,我只是去店家那买过东西,最近看到他那出了107的开发板就去看了下。
STM3210E-LK上的128*64点阵LCD已经打通,明后天贴上。
【21楼】 machao
&&to 18楼watercat:
&&知道你是这方面的高手,欢迎参加交流。对于你的几个问题我有些个人的观点,大家讨论。
&&首先讨论的基础是把STM32作为“单片机”看,ST公司也把它叫微控制器,而不是微处理器。因此它主要为“控制”设计,而不是为了“处理”“运算”。从这个角度出发:
&&&&1、RAM/ROM比普遍不合适:通常 1:4 的比例应该是效率最高的,但STM32貌似从来没有达到过这个比例……
&&& &标准51/52内部是128/256,太少了。现在的改良51已经增加了,如STC的51,内部增加了1K自由的SRAM(XDATA)。 AVR的内部的RAM也在1K-4K范围。STM32F103最大为64K/512K(SRAM/FLASH),为1:4。从控制的角度看,1:4不需要,我个人认为在1:8到1:16合适(片内)。注意最新推出的STM32F105和107到是1:4(64K/256K),但确是减少了FLASH。我不明白为何是减少FLASH,而不是增加SRAM。105、107 支持USB OTG(HOST),网络等,应该是增加DRAM的。但不管如何,就是有 128K,256K的RAM,处理图象也是不够的。充其量做个数码像框,放个MP3吧。
=======================================
对于绝大多数具备高速运行能力的MCU来说,RAM的意义不光是用来存数据,更重要的是拿来跑程序,因为以目前的技术水平,正常价格的Flash很难运行到50MHz以上;
所以相对来说,启动时把Flash中的程序搬移到RAM中运行,Flash反而拿来存大量数据(静态数据),这种情况是更能发挥器件性能的;
并且对于带OS的应用(实际OS对于高速MCU并非鸡肋功能)来说,还可以借此实现更广泛意义上的多道程序和动态加载;
同时,程序跑在RAM中还能带来更多的好处,比如加密性能能得到极大的提升等等;
而这些,都需要有一个合理的RAM/ROM比例;
当然,你可以说这种情况下应该直接考虑用ARM9,不过关于这个,我的意见是:一方面,ARM9由于cache的存在,导致了实时性极大降低;另一方面,内置大RAM的ARM9常见,内置Flash的ARM9……PRC市场上常见么?更不用提封装尺寸、布线难度、抗干扰性、功耗以及综合成本等多方面因素了……
&&&&2、没有MPU:阉割版的CM3就真的只能当高速单片机用了,实际上性能利用率相当低
&&& &实际上就是32位的高速单片机,没有MPU对于跑OS有点麻烦。但要跑OS,其它的资源也受到限制了。跑OS玩玩可以,实际做东西还是选 ARM微处理器吧。至于性能利用率就看如何选择和使用了。能用8位解决的,当然还是用8位的(最近刚设计完成了一个设计,使用STC51兼容芯片,功能比标准51强多了,价格也便宜)。如果系统需要USB、SD卡、等,8位不行了,这时考虑STM32吧。
=======================================
关于ARM的意见同前;
再说到这个MPU,最简单的举个例子:
如果做一个类PLC引用,允许用户自由上载预编译后的程序模块,没有MPU的器件,能最大限度保证运行安全么?能最大限度避免无授权用户对器件程序的恶意窥探么?或者更直接的说,以PRC现状而论,能保证用户不会借此盗我的版么?
&&&&3、数据手册写的一塌糊涂:如果假设STM32的硬件规划者是博士毕业水平,则它的手册编写者充其量是个高中在校生水准——而且还是濒临开除边缘的文科班在校生……我真的很怀疑这些手册是否有人做过整理?抑或仅仅只是把硬件设计师的草稿本和内部BBS发言拿来装订成册结集出版?
&&& & 这点比较认可。不过新的东西总要有个过程才能成熟的。不过就是这些“高中在校生-文科班”写的东西,国内很多人也消化不了的。都一样拉。
=======================================
这个我觉得,若IC公司自己都做不到对产品精益求精,就更不用指望其它人了……
最简单的举个例子:ATMEL的IC产品,在工程样片放出来之前就已经有精准的数据手册挂在网站上了,这个如何解释?
之前AVR32还不稳定的时候,我曾经用STM32做过几个项目,得到的结论就是:
再好的器件,没有般配的数据手册,使用起来都是对自己对项目的不负责
&&&&4、官方库编写的令人哭笑不得:同样按照上面的比喻,官方库的编写者大概勉勉强强算是个三流半大学的大一学生吧……那库函数编的……直接点说,微软的能耐没学到半点,微软的渣滓全捞了个十足十还带沤臭沤酸的……正常三五行汇编/C语句就能搞定的东西,活活要折腾出几十上百行汇编代码量……而且也亏得现在的C编译器都使得是扩展标准,若是早期点的ANSI C,恐怕上手就会被那些又臭又长的标识符整死吧……
&&& &提供函数库是个不得计的办法。内部东西太多了,许多人望而生畏,那么给你个库吧。
&&& &而实际上目前提供KU只是一个“噱头”。看这个KU比看手册还要化费时间。
&&& &作为初学者想通过KU走捷径,实际上往往是行不通的。ku只能做参考,是给有经验和高手使用的,因为要真正使用还必须做过测试验证,只有有经验的高手才知道这个库是否能真正的使用,以及如何使用。
&&& &另外写这些库的人,大多数是学软件的出身,实际控制系统做的很少。编写API都是单一、通用的,能实现功能,但效率就打问号了,更不考虑与系统中其它的东西的配合了。最好的例子就是键盘扫描加消抖的代码,众多的入门书、参考书、教课书上都给出的采用软件延时20ms消抖,连32位系统的教课书上也是这样。如果这样的例子代码做为一个库函数,那它的效率就不要谈了,如果再配合一个类似的采用软件延时的8位LED数码管动态扫描库函数在系统中一起使用,你的LED显示就好看了。
&&& &更能说明问题就是PRINTF函数,以及GETCHAR。这个C的标准库已经在多数嵌入式C平台中做了改动,指向了一个UART。它通常采用轮循的方式发送和接收字符,效率是非常差的,在调试中使用还可以,在系统中正式使用就需要考虑了。对于这点,CVAVR就做的比较好,你可以使用它的向导,建立一个采用中断加缓冲的低层驱动函数:putchar()和getcha()。
&&& &因此对于学习使用一般的单片机系统,开始最好不要依赖什么KU,学会自己从低层开始编写是最实在的本领,也是扎扎实实的功底。
=======================================
1、内部东西太多-&很多人望而生畏——这是数据手册的过错……
2、就以STM32而言,没有官方库,凭它数据手册的搞法,恐怕真的只有在校研究生能玩它了——做项目的人可没那么多米国时间用在替ST整理资料上,更遑论有些东西手册上到底有没有还未可知……
其实归根到底,ST官方库的问题本质上还是数据手册问题的延伸
支持马老师
贴上一个比较完整的DEMO2,在DEMO1的基础上把LCD点阵屏挂上了。
点击此处下载
(原文件名:STM32_Demo2 for MDK.rar)
1。 使用STM32_Init.c进行初始化的配置和代码生成,但是在STM32_Init.c中没有对FSMC部分的配置,所以这个部分是采用ST提供函数库中的stm32f10x_fsmc.c来完成的(LCD需要使用FSMC功能,作为SRAM挂在FSMC总线上)。
2。STM32_Init.c中也没有对FSMC时钟允许的设置,所以在程序中专门写了一句语句“RCC-&AHBENR |= 0x0100;”使能FSMC时钟。(我做这个DEMO,就是卡在这里多达3、4个小时,查看了不少的资料,最后就是这一句代码解决了问题)
3。这个DEMO证明STM32_Init.c是可以与ST提供的库一起使用的。
4。由于手中没有LCD控制器的具体资料,所以LCD部分基本上是从原STM3210E-LK板上的DEMO拷贝的,去掉了一些不必要的代码,以及对GPIO设置的部分(设置12个GPIO为第2功能,作为外扩总线使用,这部分配置采用STM32_Init.c统一配置的)。
==================================================
发现和需要注意的问题:
1。STM32上的一些新的外设接口与功能,如FSMC、SDIO等,仅在片内FLASH在256K-512K的片子上才具有的。要使用这些功能时,千万注意先到官方网下载最新的参考手册。老的手册、以及国内一个中文版的翻译(好象是万利做的),还有市面上的2本介绍STM32的书都没有这部分的内容(STM32最精华的东西,国产化还有段时间,没有深厚的硬件功底,不深入了解各种器件的接口与性能的话,是看不懂的。纯学(写)软件的就不谈了)。
2。ST公司最新的库为V3.1.0(),上一个 V2.0.3(09/22/2008),但最新版的MDK V3.80A中所包含的STM32的定义头文件还是V2.0.1(06/13/2008)。要知道MDK V3.80A是刚推出的,怎么更新这么慢。
3。如上的原因,STM32_Init.c中并不包含许多新功能的甚至,比如上面提到的FSMC、SDIO等。这样只能针对一些常用的功能了。不过这个办法到是比使用ST提供的库方便,我看过源代码后,发现生成的初始化代码肯定比使用ST提供的库要简洁,效率也高, 而且是自己可以填加的。如果你以使用STM32为主,不仿自己修改STM32_Init.c,把需要的加上。写代码不难,就是要非常熟悉STM32的各个寄存器,手册可能要仔细看上N遍。
4。到是建议ST公司好好看看这个STM32_Init.c。如果按它的方法和思路,给出一个专用的官方软件,让用户通过菜单设置,就能产生相应正确的、简洁的初始化代码部分帖到自己的程序中。我个人感觉,这个STM32_Init.c比ST的库要好的多。
顶,我是新手,但觉得库的使用也有有其存在的一些道理。官方例子中要实现一些功能,用库知道如何操作寄存器(看源代码),知道怎么用库了之后在一些要求高速执行的代码中可以直接操作它定义的结构体啊,如GPIO翻转,SPI的读写。。。另外在IAR中C代码和反汇编的代码,可以在一个窗口中观察,要优化也是挺方便的。
以上是本人的一些愚见,之前只学过一学期的51。。
不客气的讲,的确是“愚见”。你说的如何操作寄存器、GPIO翻转,SPI的读写等应该是手册,而不是看库。
至于“高速执行的代码中可以直接操作它定义的结构体啊”,为什么不直接操作寄存器?你只要用了“手杖”,就永远依赖它的。
是偷懒的办法。
stm32& &的宣传口号是releasing your creativity&&嘛
如果库能够足够完善,丧失一些性能也是可以接受的,毕竟stm32的功能已经非常强大了,stm公司是为了让大家能够将想法用算法快速实现,而不是在寄存器操作配置上纠结
另外提供库函数直接降低了入门的门槛,让我这样的学机械的也有可能玩几把32单片机,哈哈
不过话说回来,如果不是对寄存器结构有足够了解的话,就是看库函数也是一头雾水
但是对于专家级应用来说当然将整个stm32结构熟稔于心,直接操纵寄存器当然有十分快意
菜鸟才上路,还等大侠们多多指教
说到STM32_Init.c,感觉飞思卡尔的CW软件中的处理器专家做得很完美,CW这软件做得非常完善,仿真也很好用,试用了一下三合一板和MDK,真的是差远了,所以还是先在飞思卡尔的阵营里待着吧。
“如果不是对寄存器结构有足够了解的话,就是看库函数也是一头雾水”说到点上了。
可是要注意是先有鸡还是先有蛋。要对寄存器结构有足够了解的话,就需要认真仔细的看手册,看懂手册,而不是从看库得到的。如果你已经对寄存器结构有足够了解了,那么看库就没有什么困难了。
怕就怕少看或不看手册,就是库也不会认真去理解,就是照葫芦画瓢,搬别人的代码。那么永远也做不到releasing your creativity。
【40楼】 dxdq&&
我和你的想法相同。飞思卡尔的仿真软件和编译软件是分开的,当调试发现问题修改时直接修改,不向STM8那样还的关闭仿真环境在修改很麻烦的。
继续汇报一下,有高兴的,有沮丧的。
& & 昨天收获很大,仔细看了N遍STM32最新手册,然后把STM32_Init.c文件进行了扩充,把STM32的FSMC功能相关的(仅NOR SRAM部分)选择配置、自动生成FSMC初始化代码的功能加了进去。然后在DEMO2中使用(见35楼),非常成功,现在DEMO2也完全不使用ST提供的库了。
& & 但是上床前发现LCD还是有问题:当STM32工作在72M时,LCD是工作正常。但一旦把STM32频率降低,LCD工作就不正常了,而且STM3210E-LK学习板自带的DEMO也不能工作。这就非常奇怪了。一般情况下,频率降低后,LCD应该工作的更加稳定呀,然后就开始找原因。
& & 先找LCD的资料,在STM3210E-LK学习板配套的资料中没有提供LCD的资料,只有在DEMO例程中发现叫“ZYMG12864”,还有STM3210E-LK学习板的电路图上有LCD的连线图。
& & 按这两个线索开始在网上找LCD的资料,首先发现“ZYMG”只是深圳的一个公司产品编码,该公司上所有“ZYMG12864”的LCD使用的驱动芯片都与STM3210E-LK学习板的电路图上的不符。又把国内几家生产LCD屏常用的驱动芯片都找了一遍,发现都不是。这条路走不通了。
& & 再看STM3210E-LK原理图上LCD连线图,发现使用的LCD驱动器还可以采用串口通信,所以在网上以关键字:LCD 串口等查找,找到了一片Sitronix公司的ST7565R,把手册下来一看,正是STM3210E-LK板上的LCD所使用的驱动芯片,不但引脚相同,对照STM3210E-LK的LCD例程,所使用的命令也相同。
& &接下来就仔细看ST7565R手册,突然发现STM3210E-LK上LCD的硬件设计有问题。
& &ST7565R与MCU的接口可以采用并行方式和2线串口方式。STM3210E-LK为了让学习者使用STM32的FSMC功能,把与ST7565R的接口设计成并行方式驱动,把它作为外扩的RAM类型器件操作的。可是ST7565R并行操作方式还分成两种方式:8080总线上的读写是分开的,为NRD(读)和NWR(写),而6800采用的是E(有效)和R/W(读/写)。可是STM32的FSMC接口并不支持6800方式,但STM3210E-LK的硬件上确把ST7565R设计成6800方式了(见下2个图)。
(原文件名:未标题-1 拷贝.jpg)
(原文件名:未标题-2 拷贝.jpg)
& & 用8080的方式读6800的器件?问题应该是出在这里了(软件已经看多N遍,没有发现大问题)。然后想动手改STM3210E-LK上的线,由于天热加上星期六,就在家里动手改的。但是由于工具不合手,把LCD的接口插座给废掉了。
& & 真是不顺,等星期一到电子市场找座换吧。弄好了再汇报。
& & 这也说明,不要相信什么大公司的DEMO、KIT、例程,问题和BUG也是多多的,做个演示,忽悠人可以,用到你的产品设计上就有的苦吃了。
& & 不说了,把两个原始文件帖上,供需要的参考。
点击此处下载
(原文件名:st7565r.pdf)
点击此处下载
(原文件名:STM3210E-LK_UM.pdf)
即是Demo,自然不过是提供一个学习的途径或是方法罢了。就算产品都有bug,何况演示的东西。重要的是自己用的自己明白就行。
我买了EM-STM3210E的板子,里面的Demo例子大半都编译不过,能编译过的,想改成自己想实现的功能,看了快一周了,什么库函数说明,头都看晕了。既然卖学习板,也不提供下:学习思路,学习步骤。现在真后会买英贝特的东西。
按照老师门的方案,我也采用了初始化的方法,改了下STM32_Init.c 里的
#define __GPIOC_CRL& && && && && &0x
#define __GPIOC_CRH& && && && && &0x
程序如下:
#include &stm32f10x_lib.h&& && && && && && && && &// STM32F10x Library Definitions
#include &STM32_Init.h&& && && && && && && && && &// STM32 Initialization
#define GPIOC_BSRR& &(*((unsigned int *)(0x)))//这个初始化里面没有,就添加了
void Delay(void)& & & & //延时函数,流水灯显示用
&&for (i=0;i&0x4FFFF;i++);
int main(void)
& && && &stm32_Init ();
& & & & while(1)
& & & & GPIOC_BSRR=(1&&6);
& & & & Delay();
& & & & GPIOC_BSRR=(1&&22);
& & & & Delay();
编译后软件仿真是对的,烧写到EM-STM3210E学习板(STM32F103ZE芯片)里,可是led灯不亮。
学习板上的led接口原理图如下
led对应的103ZE的端口 (原文件名:456.jpg)
STM32F103ZE的引脚对应端口如下
(原文件名:123.jpg)
不知道是错在那里。望老师指点。
至本拦斑竹Grant:
& &&&作为斑竹,您对您在44楼的发言不觉得脸红吗?
& & “重要的是自己用的自己明白就行”这句话如何理解?STM3210E-LK本身就是提供学习和入门的KIT板,板上硬件有问题(就不说提供的DEMO软件了)让别人怎么使用?学习者本身就是不明白才买板用于学习的,你叫这些不明白的人明白什么呢?如果他已经明白这个板有问题,或者明白了STM32,还买这块板做什么?前后矛盾。
& &&&在这里以学习和讨论技术为主,不要把商业利益看的太重,作为斑竹应该明白这个,不管你是否在ST公司,或与ST相关的公司工作,应该注意这点。在这里重要的是为大家提供技术服务和支持。
不知我应该如何脸红呢?
& 这也说明,不要相信什么大公司的DEMO、KIT、例程,问题和BUG也是多多的,做个演示,忽悠人可以,用到你的产品设计上就有的苦吃了。&
板子有问题,说出来就是,人何况都无完人。44楼发言没说你指出板子硬件有错是不该说,只是想表达凡事不要动不动就上纲上线,否定提供学习板、Kit、Demo的目的和这些东西能起的作用。
我也相信你不至于傻到直接将Demo用于实际的产品设计,而不加任何风险评估,并将这些言传身脚告诉你的学生吧,所以我说“重要的是自己用的自己明白就行”。难道你认为自己做的项目,自己应该不知道自己应该明白的东西吗?所以不矛盾,我看问题在于你片面的理解我了的话语,别太敏感了。我没兴趣和你争这些我根本不感兴趣的“道理”,现在自己在乎的是尽快将置顶的三个帖子早日完成,与你做得也是一样,让不明白的人明白怎么用。
EM-STM3210E不是我做得,也没有用过,对它是否真的存在硬件错误,我没有发言权。
还有我在这里本就是把学习放在第一位,你哪见到我在这里发帖叫卖开发板了?我又何时不是在努力的发帖介绍入门的内容,尽量帮助大家减少入门的不必要时间消耗?不要出来在你后面接个话就给我一定高帽子带,我受不起。
【48楼】 Grant
呵呵!作为本拦斑竹Grant ,老许倒希望你能搞块像样一点的 STM32 板在 ourDEV 上叫卖,推广号称世界第一的 cortex-M3 产品。AVR 斑竹kingofkings 总有一点 AVR类小作品在 ourDEV 上叫卖,你没有,被人感觉是能力次人一等。
祝你早日推出 STM32 板在 ourDEV 上叫卖,老许先预订 5块,支持一下。
期盼马老师的STM32S书,学起来易懂。
最近刚开始学习stm32,看了楼主的讲解,一下了明白了好多,感激不尽。
你注意几点:
1。你的电路中,LED是接在PF6-PF94个口上的,可你为什么定义PC口?第2张图对我不起任何作用,接什么都不知道。
2。基本的应用和学习,是不需要改STM32_Init.c的,我的DEMO1你直接可以用,只是按键不起作用(不知道你的按键接在哪个口上),但LED应该会循环点亮的,只是方向不能控制。
3。其它我也不能说什么。只是问你8位的基础如何,如果没有比较好的8位基础,32位还是先放一放,因为比8位的复杂多了。比如时钟系统配置不对,系统也是不工作的。从你问的问题来看,我感觉你还不具备学习32位的基础。
造一座漂亮的大厦,基础非常重要,没有坚实的基础,楼是盖不起来的。做这个行当,硬件就是基础,没有这个基础,软件做的再好也跑不起来的。从你贴的图看,硬件基础好象实在太差了,可能图都看不懂:怎么会出来的GPIOC?还有22?(GPIOC_BSRR=(1&&22);),这个22是什么?
我是实话实说,如果不符合实际,就当我没说吧。
斑竹Grant:
& & 我们两个都是明白人,也知道自己在做什么。
& & 这里有很多人知道我的职业,我是个教师,教学生的,当然自己需要先学习,尽量弄明白些,否则对不起学生的。
& & 你的主要职业我不清楚,从本栏制定的3个贴中,有两个是间接带有宣传开发板([原创] STM32 & STM8 开发工具 & 开发板使用介绍 and [原创]ST MCU MiniKit(三合一开发板)使用参考)的效果的。好象我说的有问题的板,不是涉及贴子中的东西。
& & 我并没有“上纲上线”,也没有“否定提供学习板、Kit、Demo的目的和这些东西能起的作用”。因为我自己也需要这些东西,我也设计过AVR的学习板,我在本贴中传上的DEMO2中也参考了STM3210E-LK中的DEMO例程,我教学开课也需要学习板。
& & 问题是STM3210E-LK是ST公司推荐给我的,不是其它的公司或个人。在楼主位已经说明了,我是直接到ST公司在上海的总部与他们联系的,是非常尊重和相信他们的。可是作为生产STM32的公司推荐的学习板,在硬件设计上出现这样的“低级”错误,这是不应该的。
& & 因此我的目的只有两个:一是ST公司以及帮ST公司做宣传和推广的公司和人员,要认真和负责。二是对于学习者讲,要踏踏实实的,从基础认真学起。
& & 明白的人一看就明白了,不明白的人恐怕要吃过许多苦头后才会明白。最可恶的是那些知道自己实际是不明白的,却要装出明白的样子去忽悠不不明白的(或许我会不自觉的成为这种的可恶的,所以我要尽量的弄明白)。
& & 好了,我们两个可以称为是明白的人还是各自做自己的事吧。
那板子我弄了一段时间,一会亮一会不亮,咨询他们,说我软件 有问题。
我那想到他们硬件会做错。。
ST的推广确实差劲。。。。
数据手册,开发板。。。。
都糊弄人。。。。。。。。
其实ZLG早期的开发板也都是这样子,如果照他们的例程来开发用在产品上,肯定要吃苦头
现在ZLG据说有改进(因为我没有再买他们的板子了),而且配套从书也作的不错,只是推出的速度很慢,一延再延
上回在二姨那看到有网友用ST库的串口出了问题,一看原厂的例程居然是在发送前没作检查TXREADY,反而在发送后检查TXC的作法
真的认为ST是随便找一些没经验的人来作一个演示用的库,就算是演示性质的,不方便用中断或队列,也不该犯这种错
&&造一座漂亮的大厦,基础非常重要,没有坚实的基础,楼是盖不起来的。做这个行当,硬件就是基础,没有这个基础,软件做的再好也跑不起来的。从你贴的图看,硬件基础好象实在太差了,可能图都看不懂:怎么会出来的GPIOC?还有22?(GPIOC_BSRR=1&&22);),这个22是什么?&&
&&我是实话实说,如果不符合实际,就当我没说吧。
46楼的网友是误用了STM3210B这片板子的例程,在STM3210B上没有PF,LED是接在PC4-PC7上
GPIOC_BSRR=1&&6;& &是 SET PC6
GPIOC_BSRR=1&&22;&&是 RESET PC6 , 22 ==(6+16)
【49楼】 xuyiyi 许意义
如果说做出开发板出来卖就是高手,算了你放过我吧,不要这个虚名,况且本来也不是。倒是你这话叫我觉得自己过去把你看高了点。和来这里的大部分人一样,我也一直在学,通过看别人的提问和回复,和来这里的大多数人自己仅仅是早点用上东西而已。
被人如何看我的水平一点都不关心,只在乎自己是否能解决客户遇到的问题,这是饭碗,不可不认真。
手上的开发板、开发工具太多,ST全系列从ST6、ST7一直到STM32,还有Microchip、NEC,看见板子就烦。做一些功能堆砌的开发板没有任何意义,我可没兴趣做个“打字机”,况且现在STM32的开发板已被搞得一点空间都没有。
单片机吗,做来做去不就是一个寄存器的操作顺序吗,重点还是应用。个人认为做个板不难,难得是如何写一个大家都可以能看得懂,觉得有价值的文档!这也是现在市面上大部分叫卖的开发板不能做到的,包括ST自己出的板也是一样。
【54楼】 machao
置顶帖子只是为了介绍工具的使用,算是入门,原装的工具没多少人会买的,谈不上我为了商业利益存在什么动机,何况这些板子都不是我做的。一个在卖芯片的地方混饭的,能有什么利益,想多了。因我会借给自己的客户使用原装工具,本身也是需要一些文档来告诉客户如何使用开发板,发帖子权当是自己写文档练手吧,不可能每个客户都跑去一个一个手把手教板子怎么用,在时间安排上根本无法做到。
呵呵,争这个没意义,是也好,不是也罢,管他呢,我不关心。站出来接个话而已,没打算要和你争什么,不过是表达一下自己的看法,别介意。
大家都消消气。呵呵。
如果说要做一块STM32学习板,大家认为需要提供哪些资源?
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=1566638
在论坛里做个Brushless DC (BLDC)控制板,大家发表一点建议
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=637041
----------------------------------------------------------------------------------------
说实话 Grant 这两个帖子的结局让人感觉 。。。
准备换开发学习板了。已经定购的一套红牛开发板((STM32F103ZET6)配置3.2寸TFT真彩触摸屏模块 428.00元),明天应该到手了。
具体信息:http://store.taobao.com/shop/view_shop-b83c024ab0a6b38d4ec350f61fac8f32.htm
等到手试用后再做汇报。如果试用下来感觉不错,以后的DEMO会按此板做了。
==========================================================================
贴上我做过扩展的STM32_Init.c,供有兴趣的朋友测试、使用和参考。
点击此处下载
(原文件名:STM32_Init.rar)
1。只适合在MDK下使用,方法见上面相关的帖子和DEMO。
2。包中是STM32_Init.c和两个配合的头文件,我只是增加了FSMC的NOR/RAM(BANK1)的设置和代码自动生成功能,其它未做任何改动。
3。有了STM32_Init.c基本上可以抛开ST提供的库做初试化了,使用不仅方便,而且生成代码也简洁。
4。STM32_Init.c本身的代码也不复杂,比看ST的库方便多了。
5。这个STM32_Init.c与ST提供的库完全兼容,因为他的寄存器的定义与相关数据结构的定义就是使用原ST的定义。你可以用它生成初始化代码,而在其它部分仍然使用ST的库操作寄存器。
6。STM32_Init.c中还缺少对STM32一些东西的配置部分,比如中断、SDIO、FSMC(我只补上了FSMC的NOR/RAM(BANK1))等。有空我会细细的学习和琢磨。也希望比较熟悉STM32的朋友能补充完善,提供大家使用。
最后在次声明和强调:不管是使用ST提供的函数库还是使用STM32_Init.c,你自己必须是有一定基础的,至少8位机的使用以及C语言和编程基础要过的去,还要认真看STM32的手册。类似上面的点不亮LED的问题,或者C当中“&&与&”、“!与~”不清楚如何正确使用,指针与结构体都也不清楚的话,那么就像小学还没毕业,就要到大学学习一样,贪吃了。把苗助长是没有用的,今天看的长的很快,2天后就死光光了。尽管以上我说的全是实话,还是请各位自己斟酌。如有得罪,请多多包含。
开始学习使用ST的ISP下载方式了,因为我一般不使用在线仿真调试(类似上面我发现LCD控制器硬件设计连接的问题,我还真不知道怎样使用在线仿真调试如何能找到问题,它仿不到LCD控制器里面呀),所以最方便的是使用ISP方法了。
下了一个ST提供的1.1版,可惜不认F103。马上到ST官网下了2.0的,认了(09版,感觉ST英文官网比较慢)。国内还有几个自己编写的ISP软件,最新的一个是8月份的,都下来试试,看哪个好用。
马潮老师,我AVR是看着你的例程成长起来的。但是我觉得你对STM32是有点偏见。我入门算是比你早几天。目前在官方的3.10库下工作得比较好。细细说下
1.官方的库更多的是为了快速开发时候减少平台迁移时间所用。因为STM32寄存器过多,所以不如用函数的方式进去初始化操作和设定。
2.对于常用的GPIO.的确是认为定义方式过于烦了,直接操作可以方便定义和提高效率。
3.老实说我认为JLINK是一个非常好的调试方式,USB,不用串口,可以方便现在很多没有串口的电脑,速度也快。更多的是,2个断点调试真的很方便找出BUG所在。当你不知道自己的程序是如何跑飞或者锁死的时候用JLINK的断点模式可以很方便的找出。当一个工程越来越大,你就需要仿真调试了。
准备使用STM32很久了,以后要常关注马老师的这个贴子,
想使用STM32实现一个测频功能;就是类似使用 51的那个门控功能测量信号的周期,使用定时器的计数功能测量单位时间内的脉冲次数,以测量不同频率的信号。现在还没有搞懂使用 STM32F103要怎么设置以进行测试。
63楼:我没有对STM32有偏见,它是比较好的东西,否则我也不会选择它在教学中应用的。
我实际真正上手STM32只有一个星期,当然还是不熟悉的。但由于我有一定经验,所以还是先从开发的工具入手,因为开发工具不熟悉,或者使用不便的话,会大大影响对STM32本身的学习和了解,许多新手开始,就会被工具、环境等问提搞的不知所以然了。大大增加了学习的难度。
我发的这个帖子,就是这个星期熟悉STM32的过程记录。我想STM32本身的优点不需要去说了,如果你认为不好,何必玩它呢?是吧。那么省下的就是如何能更快,更好的进入STM32的世界。我面对的学生,尽管是“研究生”,可能有50%,甚至更多的人连8位的东西都没有玩过,也没有真正使用C去写过一点实际的东西。让他们马上面对STM32的手册?结构?库函数?你会如何教这门课?所以我所提出的问题,都是关于工具的使用,学习板,和采用方法等,并不是对STM32有偏见。
所谓偏见,实际不是偏见,是实际的情况:STM3210E-LK学习板是ST上海总部推荐给我的,我们学校与ST上海总部隔一条马路,我已经去过2、3次了。作为官方推荐的,应该相信吧?可是刚上手2天就发现板上LCD的设计问题,才刚刚开始呀,同时,这个学习板的资料非常少,除了STM32的手册,和DEMO例程,其它所使用的芯片一点资料也没有提供,而且有的DEMO例程,比如对SD卡的操作就走不通(ST方面的解释是,由于是DEMO程序,兼容型不好,有的非标卡不能读。这意思我明白,是我的2G的KINGSTON卡不好。也可能我买的假货,不过这张卡在我的PC上,在我的GPS导航仪上都没有出现过问题)。
& &今天ST方面已经与我沟通过了,并且我也问过,这块STM3210E-LK不是国外设计的,是ST公司委托国内某个公司设计的,并说已经知道是有这个问题了,准备修改做第2版,并提供更多的支持。这个公司的网站我访问过,在它的论坛中,也有人问所使用LCD控制器芯片的事情,结果,管理员说,就是采用常用的一般芯片,你只要参考一下代码就行了(这算什么技术支持?)。实际上我是从代码中看到了“ZYMG12864”字样,按ZYMG找到是深圳一家做LCD的,他们有不同的ZYMG12864屏,但是给出的所使用控制器根本与STM3210E-LK的不同。后来我是根据原理图中标的LCD控制器有2个串口信号,才找到所使用的型号,才能基本确定是硬件设计错误的。
& & 这不是说STM32不好,实际是其它的原因,是人的原因,是做事情的态度问题。作为ST的官方,或中国部分实际是不应该的。如果让这些人,以这样的态度去宣传、推广STM32的应用,做技术支持的话,恐怕会毁了STM32好的名声。
& & 实际上我真不想说这些的,因为这样会得罪一大批在ST下吃饭、做事的人。但实际情况就是如此,不但ST公司,我接触多个大公司,知道他们下面普遍的FAE的真实水平,与这些公司的高层也有比较好的接触,他们不是不知道,是没有办法。因为在目前国内的教育体制下很少培养出真正合格的电子工程师。
接下来讨论技术问题。
1.官方的库更多的是为了快速开发时候减少平台迁移时间所用。因为STM32寄存器过多,所以不如用函数的方式进去初始化操作和设定。
& &我想,我已经说的很明白了,使用STM32_Init.c并不与STM32的库矛盾,它使用的本身也是ST定义的H头文件,产生的代码也是标准C的源代码,我想如果你认可我写的AVR书的话,不仿看看STM32_Init.c,体验一下。这个也不是我的东西,是从KEIL MDK的STM32例程中拿到的。都是标准化的东西。花2-3个小时就明白了,如果你真的对STM32很熟悉了,那么1个小时就明白了。所以你试用一下再发表意见。没有实践就没有发言权。就算你比我早玩几天STM32,但我可以不客气的夸口,我的经验决不是你几天的工夫能比的。
& & 至于到底是使用库还是选择其它的方法,是个人的习惯和感觉。我推荐STM32_Init.c,是因为对于开始学习STM32它已经够了,比从读库开始要方便(当然最先是看手册的)。至于往后,看你的体会和感悟了。
2.对于常用的GPIO.的确是认为定义方式过于烦了,直接操作可以方便定义和提高效率。
到底用库好还是不好?你自己都矛盾。我可以明白的告诉你,使用STM32_Init.c也比用函数的方式进去初始化操作和设定要方便,效率也高多了。
3.老实说我认为JLINK是一个非常好的调试方式,USB,不用串口,可以方便现在很多没有串口的电脑,速度也快。更多的是,2个断点调试真的很方便找出BUG所在。当你不知道自己的程序是如何跑飞或者锁死的时候用JLINK的断点模式可以很方便的找出。当一个工程越来越大,你就需要仿真调试了。
& & 不管是对STM32,还是对于AVR的学习,我都不提倡使用JTAG硬件仿真调试。我还是坚持我的观点:硬件仿真调试是高手使用的,对于初学者,什么东西都晕在鼓里,STM32本身的结构不了解,硬件也不了解,库也不熟悉,去学习使用硬件调试仿真?仿什么东西呀?
& & 我上面提到的LCD硬件设计问题,你说如何仿真?它整个代码中不读LCD,只是写,频率降下来LCD就不工作了,LED和按键到都工作正常,你如何仿真?我一开始就是用硬件仿真单步走的,LCD就是不亮,把频率调到72M,单步走它就亮,你说仿什么?你能看到STM32是否把数据正确的写到LCD驱动器的RAM中吗?如果你说使用逻辑分析仪的看总线时序的话,到还着边,可那也是在有了LCD驱动芯片的手册,在知道应该的正确时序后,去验证的。
& &&&所以要真正用硬件仿真的应该是高手,是熟练的工程师使用的。一旦到了这个技术水平程度,硬件仿真不用学习,也不用别人讲,自己就会了。而且真正的系统调试,也不都是要靠什么LINK来硬件仿真的。我也没有这样的水平,写的代码,设计的硬件不用调试,一次就能成功。我也需要调试,难道把调试数据写到LCD上,或通过RS232送到PC上,最简单情况下,利用几个LED灯的指示都可以知道程序跑到那里了,调试完成,把这些多余的代码去掉就行了,这不也是仿真调试吗。多写几次FLASH没什么问题。到目前为止,不管我使用51、AVR还是其它的,还没有把FLASH写失效过的。
& & 你开发使用汇编吗,还使用EPROM吗?还需要用紫外线擦除15分钟,才能烧程序吗。紫外线擦除器,见到过吗,或许听都没听到吧。或许是你的老师用过,但估计最可能的是你的老师的老师用过。然后就这么一代一代的教下来了,“要用仿真器去仿真,看看内存中的数据对不对,程序执行的跳转是否正确”。
& & 由于现在写代码基本都是采用C,因此软件的调试基本上硬件仿真器的(在PC上写个数据库,还使用硬件仿真?)到是现在的系统越来越大,功能越来越多,但频率越来越高,PCB的面积越来越小,逻辑分析仪是需要的,主要是看硬件的问题,这个靠什么LIK也是做不到的。
觉得IAR ARM+JLINK,学习STM32比较方便。
不用库,库繁琐,而且有错。
库有好的地方,也有不好的地方。我认为用库配置功能是比较舒服的,至少比自己背寄存器清晰的多,但是GPIO的部分写得不好,导致定义的困难。IAR是没有STM32_Init.c的,所以我需要用到库。库本身就是一个大的DEMO,有利有弊,作为一个参考。
我就具个例子把,官方的库有很多地方时设定着出错的时候会停下来的( while(1)&&);在初始化的时候我的外部晶振焊接不好,导致外部时钟没有起振,那么 程序会一直停在那边,这时我用JLINK停下来一看我就知道我的程序死在什么地方。配合示波器一测就能发现问题所在了。如果你没有这么用,你怎么发现自己是问题出在哪里。代码错了?硬件问题?一点点分析会花很多时间的。
我调试一般就是断点加GO,很少单步。主要是看程序死在上面地方,出了什么问题。我的3.10版的库文件中,一个LINK文件有问题,IAR编译后会导致中断全部无效,我是开了SysTick做延时函数的,我用JLINK一跑就发现一到中断的地方后面全是一样的了,完全错误,没有JLINK,你怎么办。同是硬件仿真,AVR和JLINK的并不是一样的东西。
没人和我讲过硬件仿真该怎么用,都是靠自己试出来的。虽然身在杭电,但是老师们一般不直接教单片机,AVR全是自学。STM32我就买了JLINK,然后自己设计了最小系统版,看着库就进来了。
抓到一个杭电的师弟还是师兄.......
BTW: 个人没看到马老师的书 不知道他水平怎么样 在这里不予评论
不过就发言来看&&MS有一点点固执和偏激& &
.对于常用的GPIO.的确是认为定义方式过于烦了,直接操作可以方便定义和提高效率。
到底用库好还是不好?你自己都矛盾。我可以明白的告诉你,使用STM32_Init.c也比用函数的方式进去初始化操作和设定要方便,效率也高多了。&&
常用GPIO使用直接寄存器操作 不使用库&&与其它地方使用库函数 没有丝毫矛盾&&
谁都知道直接对寄存器操作效率高 但对于一个要求开发进度的项目 不可能在短时间内就熟悉和掌握所有寄存器位&&这个时候&&对于需要获得高速率的GPIO口直接采用寄存器操作&&其它地方仍然采用库函数 显然是最佳选择&&相信这也是目前国内使用STM32的开发工程师都普及的一个办法。
马老师你力荐的init.c文件 其实也就是介于库函数和直接操作寄存器之间的一个东西&&可是仍然是使用了STM32函数库中定义的数据结构&&这也注定了 同样摆脱不了库函数升级等一系列问题& &如果下一版库函数再升级 数据结构名变换&&使用init.c还是需要自己去理清库函数中对应的结构体&&除非你能在每次库函数升级的时候 也将init.c文件保持同步升级&&否则如果有人使用了你的工程文件&&而升级了其它库函数 编译的时候查错要查到手断.....
不鼓励使用仿真器调试&&或许也就是搞教学类的 跑跑小程序 弄几个跑马灯&&几百行代码的这种小工程的老师们的想法吧
个人觉得真正做过工程以及软硬件系统设计的人 是很难说出只靠一个逻辑分析仪&&完全不用硬件仿真器调试的&&当你的板子装在成品机箱里&&你还拿个示波器或逻辑仪表笔去把那些壳子全部拆掉 再把PCB板翻过来对着原理图一个一个去找那些测量点吗.... 当然大学实验室里那些天天摆在桌子上的开发板不会有这些问题是可以忽略的吧..
最后“你开发使用汇编吗,还使用EPROM吗?还需要用紫外线擦除15分钟,才能烧程序吗。紫外线擦除器,见到过吗,或许听都没听到吧。或许是你的老师用过,但估计最可能的是你的老师的老师用过。然后就这么一代一代的教下来了,“要用仿真器去仿真,看看内存中的数据对不对,程序执行的跳转是否正确”。“
个人觉得 现在还在讨论EPROM和紫外线擦除器并不能让别人觉得那是你多么有经验和资格多么老的表现&&相反只让人觉得还活在上个世纪的辉煌里.....
以上个人观点 欢迎拍砖..
如果你使用MDK,你觉的STM32_Init.c的方法是否有优点呢?
& & 是的,STM32_Init.c的选择功能只能在KEIL中使用(我已经明确说明了),但它的思路和方法是好的,并且与ST库兼容。我已经向ST公司的有关人员做了建议,建议他们能否按这个思路做个辅助的环境:可以让用户直接选择配置,然后生成标准的C初始化代码,这样拷贝到你的代码中就可以了。这也符合推STM32的口号。
& & 我并不是说不要硬件仿真,而是不提倡依赖它。这样你就会不断全面提高自己的能力。至于如何使用,里面的窍门和经验,正如你说的,是教不会的,需要自己的实践和不断总结。现在的老师,真正有动手经验和能力的不多,没有自己的实践和体会,就没有提高,如何能教这些课程?我上课面对5、60个学生,一出问题,我用仿真帮他找问题的话,那就不用上课了。我用51、AVR设计过N个东西,自从使用C后,基本上都是不用硬件仿真的。32位的没做过实际的设计,说不好。但刚开始上手就发现LCD连接问题,也不是依赖硬件仿真找出的。系统调试是你的基础和综合能力的体现,而不是仿真器的功劳。当你知道硬件电路设计的重要性,软件设计结构的合理与严整,积累了经验,你会发现渐渐的硬件仿真离你越来越远了。这是我个人的体会。
& & 刚拿到红牛的103板,接上电源看到2.8TFT屏上的DEMO感到比较舒服。晚上可以开始玩了。红牛的板需要外部的LINK,尽管代码可以通过ISP方式下去,我还是同时买了他们配套的J-LINK。我也不是拒绝硬件仿真的,手里武器要装备全,都要会熟练的使用。至于打仗的时候,哪个合适用哪个。同样的情况下,你可能需要使用冲锋枪扫射了,但可能我只需要使用手枪,一发子弹就解决了。这个比喻就是说我使用手枪的能力比你好,瞄的更准,所以有把握,有自信,不用冲锋枪。要知道,冲锋枪也有发挥不出威力的地方,如果要化装到对方占领的城区侦察,背者冲锋枪好象就不合适了吧。我如果是公_安局负责培训现在新的警校学员,可能先安排他们学习空手搏斗、匕首和短枪的使用,在他们有基础,熟练后,再培训长武器的使用。正常情况下执行正常公务是不带长武器的,碰到一二个,应该能解决的。但如果的大的事件,团伙黑帮,就要全副武装了,长的短的都要。这就是我的理念。开始教学生,是要把基础认真学好,等他们有基础了,很快就会使用硬件调试的工具了。如果基础不好,就是给他最好的调试工具也是没用的。如果我自己没这个能力,我也只能采用大部分老师的做法踢皮球了:不是有LINK吗,可以去调试一下,看看问题在哪里。
对于常用的GPIO.的确是认为定义方式过于烦了,直接操作可以方便定义和提高效率。&&
到底用库好还是不好?你自己都矛盾。我可以明白的告诉你,使用STM32_Init.c也比用函数的方式进去初始化操作和设定要方便,效率也高多了。& &
=====================================================================================
库有参考价值,初始化的代码能不用就不用。我的DEMO2中使用了库,原因是我简单的拷贝的原代码做测试,而原代码中使用了库,并且STM32_Init.c中对FSMC的部分没有。第2天我就已经在STM32_Init.c中增加了对FSMC的配置功能,新的代码中也不使用库了。新的STM32_Init.c我已经贴上来了,你没看吧。
常用GPIO使用直接寄存器操作 不使用库&&与其它地方使用库函数 没有丝毫矛盾& &
谁都知道直接对寄存器操作效率高 但对于一个要求开发进度的项目 不可能在短时间内就熟悉和掌握所有寄存器位&&这个时候&&对于需要获得高速率的GPIO口直接采用寄存器操作&&其它地方仍然采用库函数 显然是最佳选择&&相信这也是目前国内使用STM32的开发工程师都普及的一个办法。
马老师你力荐的init.c文件 其实也就是介于库函数和直接操作寄存器之间的一个东西&&可是仍然是使用了STM32函数库中定义的数据结构&&这也注定了 同样摆脱不了库函数升级等一系列问题& &如果下一版库函数再升级 数据结构名变换&&使用init.c还是需要自己去理清库函数中对应的结构体&&除非你能在每次库函数升级的时候 也将init.c文件保持同步升级&&否则如果有人使用了你的工程文件&&而升级了其它库函数 编译的时候查错要查到手断.....
=============================================================
自己矛盾。既然“不可能在短时间内就熟悉和掌握所有寄存器位”,那么就已经会使用库了?只能说明是搬别人的代码,跑通就行,还做什么验证。而且我知道,不仅是STM32,就是使用ARM,国内的开发工程师80%都是这样的(这就生活在“辉煌”的新世纪的特点吗)。
任何一个公司推出一款芯片,都会给出一个标准定义的的头文件,里面包括了寄存器的标准定义或结构定义,如果这个变了,不管你使用库也好,还是使用STM32_Init.c也好,你的代码都的改动。我刚拿到的扳子中代码,明确写者是在那个版本的库支持下的,换了库代码就不需要动吗?如果不需要,为什么还要明确写呢。这个与使用STM32_Init.c是相同,没有区别。在某种程度上(如果对寄存器了解),修改STM32_Init.c可能更加方便。因为你依赖库后,就不会全面的了解它,到时都不知道那里要做调整。
不鼓励使用仿真器调试&&或许也就是搞教学类的 跑跑小程序 弄几个跑马灯&&几百行代码的这种小工程的老师们的想法吧
个人觉得真正做过工程以及软硬件系统设计的人 是很难说出只靠一个逻辑分析仪&&完全不用硬件仿真器调试的&&当你的板子装在成品机箱里&&你还拿个示波器或逻辑仪表笔去把那些壳子全部拆掉 再把PCB板翻过来对着原理图一个一个去找那些测量点吗.... 当然大学实验室里那些天天摆在桌子上的开发板不会有这些问题是可以忽略的吧..
=========================================================================
可能吧。但我并没有说“完全不用硬件仿真器调试”,这是误解。另外,我承认没做过“大”的工程项目,但我决不会把有问题的“板子装在成品机箱”,我会在装之前消灭到它们。我手里的版子可能也是小东西,但不是学校做的,也是ST公司委托一家国内公司做的,这个公司应该有许多你们这样做“大”工程的工程师吧。把硬件有问题的板子推出做学习板,是为了考验学校的老师,还是考验入门者的技术?
最后“你开发使用汇编吗,还使用EPROM吗?还需要用紫外线擦除15分钟,才能烧程序吗。紫外线擦除器,见到过吗,或许听都没听到吧。或许是你的老师用过,但估计最可能的是你的老师的老师用过。然后就这么一代一代的教下来了,“要用仿真器去仿真,看看内存中的数据对不对,程序执行的跳转是否正确”。个人觉得 现在还在讨论EPROM和紫外线擦除器并不能让别人觉得那是你多么有经验和资格多么老的表现&&相反只让人觉得还活在上个世纪的辉煌里.....
=======================================================================
这个世纪的辉煌是什么?就是买块板子,搬点DEMO例程?然后拿出来炫耀掌握了新的技术,新的东西?这是高级“傻瓜”。如果这样的话,我上课太方便,买现成的KIT,把光盘交给学生,让把里面的DEMO下到版上跑一下,告诉学生,不需要对寄存器做学习和了解。噎!这样他们就都活在“本世纪的辉煌”里面了。
如果这样就算活在辉煌里,那么靠者我烧EPROM的经验,我在几天里就从上世纪转到了本世纪,进入了本世纪“辉煌”的STM32世界,而且还能找一个出于自豪自己活在辉煌世纪的工程师或公司推出的学习版上一个低级的错误。我活的太“辉煌”了,能不骄傲和自豪吗?
对了,,好像也是上世纪的DD,怪不的,活在本世纪的人不需要懂上世纪的东西(你懂吗)。
没有上个世纪的老土,有这个世纪的辉煌吗?扯淡
=======================================================
忘掉了,正是由于上世纪的开发使用汇编,使用EPROM,调试系统不方便,才出现了硬件仿真器的东西。“硬件仿真器”也应该是上世纪的辉煌东西。也应该是我这个还活在上个世纪的辉煌中老朽放不掉的。现在我都能放掉它,而怎么你这个活在本世纪的“辉煌”者却放不掉了?这好象是你还活在上个世纪的辉煌里吧,而且还认为上世纪的辉煌就是本世纪的辉煌,死死抱着不放呢。
&&这块STM3210E-LK不是国外设计的,是ST公司委托国内某个公司设计的
&&对了,,好像也是上世纪的DD,怪不的,活在本世纪的人不需要懂上世纪的东西(你懂吗)。
000.. 用的都是 E + R/W , 和 6/8 ..X86 的 RD+WR 是不一样的, 这也难怪
这些上世纪的DD,受ST公司委托,位在南京的&国内某个公司&的工程师大概也不懂
的差别,才会犯了这个错误
。。。。。
马老师做事的风格像一个老师,做事刨根问底。
记号,学习。
呵呵&&马老师还是个急性子
已经解释过 直接对寄存器和使用库的区别了&&只是为了更好的程序可读性和可移植性&&您搬出一大堆国内80%开发工程师之类的云云&&请问您见过国内8%的开发程师吗&&您见到的工程师都是这样的吗?如果您连8%的工程师都没见过&&又怎么搬出80%的工程师都是这样做工程的结论?
我们做项目是要赶时间的&&老板开工资& &当然是要以最快的时间做出最快的活&&正所谓边做边学&&有库可以看&&肯定可以边做边开工了 您老是学校拨款的 每年国家那么多个亿的所谓“创新”资金扔给你们这些学校教授&&又没人催着你出项目 当然可以慢慢地不急地搞& &慢工出细活么&&虽然这么多年来&&也没见哪个学校搞出什么真正的创新东西&&各个教授院士 嘴皮子工夫倒是都见长....
有问题的板子不能装在机箱里调试了是吗&&一定要做到万无一失了才能装在机箱里
那请问您做板子都是一板成功的吗?您老画的PCB板 您老设计的软件&&都从来只有ver1.0 从来不见ver1.1啊.....&&微软多大公司啊&&出个系统还天天打补丁了& &做个项目&&有许多事情当然要到现场工地 或者真正联调实验的时候才会发现问题& &这个很奇怪吗?
您不说出来 不见得就没人知道你了解
如果LCD是用IO模拟的 确实参考一下就行了
&结果,管理员说,就是采用常用的一般芯片,你只要参考一下代码就行了(这算什么技术支持?)&
但既然是接在FSMC上面的 还专门加个电阻设置成6800就说不过去了 (奇怪的是这个LCD能点起来??)
而且,上次口水战好像也是因为这个厂生产的STM32学习板焊工不好而引发纠纷....
77楼好像是某人的马甲,积分才2
不是马老师故意要提上世纪的 6800 和 8080 ,而是&这个世纪&的很多LCD控制芯片和外设芯片上,就是有这个管脚
不过国内的许多公司,的确都是到了现场,才在调试改程序,很难等完全调试完才装进机箱
这和国内的工程师养成教育有关,是学校和老师的问题
也和国内企业的领导的想法有关,对搞技术的相当不看重,宁可去请客户应酬喝酒,也不愿意花钱在公司里建立测试环境
ourAVR.com从来不是一言堂
不要因为别人发表了不同的意见就这么激动
说别人是马甲的同学......
你让版主查一下IP地址就知道了.
&& 77楼好像是某人的马甲,积分才2
&& ourAVR.com从来不是一言堂
&& 不要因为别人发表了不同的意见就这么激动&&
我说了 &好像是&, 又没说 &一定是&
我也对马老师说的,&不会把有问题的板子装在成品机箱&,也作出了我的批判
到底是谁激动,请大家评评理
不骂人,随便争论啊。
库,我认为就是垃圾。
可能其他人认为很好用。
也来挺一下马老师。 马老师的水平与人品,在我们论坛是有目共睹的。国内的AVR推广工作,我认为马老师是当之无愧的第一人。
至于上面质疑马老师卖板子的人,我再澄清一次,这些板子全部是我们邮购部卖的。马老师无私的向我们提供了设计,没有收过一分钱。
上面有些不客气的评论我已经编辑过。 请大家只讨论技术问题,而不要涉及人身攻击字眼。
如果马老师搞 STM32, 对国内的STM32 用户来说,绝对是一个好消息。 我第一个表示支持。
阿莫,这些解释是没有用的。我已经知道,当我贴出STM3210E-LK这块板的硬件设计可能有问题,并说明是国内某公司设计的后,会得罪人的,比如ST公司、生产这块板的公司、或至少是设计这款产品的工程师吧。
你知道在STM32上有多少“寄居蟹”吗。还好确实如lincen529所说,我是给国家打工的,不拿老板的工资,所以敢说点实话和实情,不怕得罪人,不怕拿不到工资。其实就是不拿国家的工资,也不会没有地方给工资的,这个我不担心,除非我不做了。
我到希望lincen529不属于我所比喻的那种人,能到这里传授的自己的经验,让我们大家学习学习。至少也要指出我应该推出哪个软件的v1.1吧?我在本站就推出过PSoC简易编程器的软件(其它都是推荐别人的,就是推荐德国人的AVRISP,我还是找到了和贴上了在VISTA下的驱动,这样的支持肯定是到家的),也是第3次改动过的,我到是想看是否有人用过,提出问题,看来,好象,或者lincen529用过的吧?
lincen529,积分:3?! 应该是针对我来的,有准备的,我还没有落伍,心里有数。
lincen529,你不要生气,实际上我也是STM32的“寄居蟹”,选择它做教学平台,也是因为它有许多优点,除了比较好的体现的技术的发展方向,也便于我的教学工作。
lincen529,你愿意的话,请在这里多介绍的技术,传授些经验。社会上的那些“项目是要赶时间的&&老板开工资& &当然是要以最快的时间做出最快的活&&正所谓边做边学&&有库可以看&&肯定可以边做边开工”我是知道,但我不希望都是这样,不希望生活在“辉煌”本世纪的人都是这样做事情。
& & 如果当你在医院做治疗,而用的设备仪器是:“要赶时间的、为了工资,是以最快的时间做出最快的活,而且还是所谓边做边学,有库可以看,边做边开工”的东西的话,哪就是上天的回应。
& & 看来STM3210E-LK这块板看来就是这样的产品了,还好,只是一个学习KIT(LK)。
回78楼的疑问:“但既然是接在FSMC上面的 还专门加个电阻设置成6800就说不过去了 (奇怪的是这个LCD能点起来??)”
我也是奇怪的,可能72M速度太块,加上8080写的时序上和6800比较接近,对于比较慢的LCD分辨不出了。不过ST的工程师已经确定的说是不对了,如果读LCD的状态标志器的话,肯定读不到东西的。我本来要改线的,但由于技术不高,废掉了LCD座。等我换上好的,我还会进行验证的。
如果这种问题发生在我今天拿到的红牛板,我是不会到这里说的,因为它是个小的公司,或个人的设计。区别在与,我拿到的板是ST公司推荐的东西,这个不太应该。
马老师也买了红牛板啊..到时候例程可以直接试了..哈哈
初始化代码还是用库比较好。
初始化这点代码,能节省多少空间,这点空间对stm32可以忽略不计。
用库可阅读性,可移植性都更好。
void Delay(void) //延时函数,流水灯显示用
&&for (i=0;i&0x4FFFF;i++);
另外,马老的延时怎么不加volatile,从严谨的角度来讲,是必须加上volatile的。
这个只是我的第一个STM32入门,随手写的,不用中断,代码简单点,不会出错,为了熟悉工具和开发环境,任何优化也不用。
我面对的是学生,可能8位的基础都没有,越简单越好,多了东西还要解释半天,但可能学生还不会明白的。
仿真器用JLINK。
ST LINK 2不是正中的ST LINK。
不要错误的认为ST LINK 2是ST LINK的升级版。
如果不仿真stm8,用JLINK比ST LINK更好。
顶马老师一下! 呵呵! 也想学stm32,在经过个人的小小比较后,发现还是一款挺好的单片机的! 但就datasheet和库来说,和ti的真是没有可比性啊!
习惯了看ti的430系列的datasheet和user guider,再看st的,感觉真是凌乱。
不过crotex-m3这个内核真不错,st公司的推广也不错! 先跟马老师后面学吧。
还有回77楼:虽然这么多年来&&也没见哪个学校搞出什么真正的创新东西&&各个教授院士 嘴皮子工夫倒是都见长....
虽然你说的现象也许有,但大部分的老师和教授还是挺用心的。我们学院的院长就是一个牛人。就做出了一些创新的东西,恩,是地学仪器方面的。
不要因为少数人而伤害大多数人,我感觉国内对少数不好的宣传要过于对多数好的宣传。有些偏激了点。
好久没看到马老师的贴了,顶一个,以后有空慢慢消化
点击此处下载
(原文件名:STM32_Init_o.rar)
点击此处下载
(原文件名:STM32_Init_m.rar)
& & 贴上2个STM32_Init.c,带o的是从MDK站上STM32例子中剥出的原始文件代码,带m的是我刚整理过的,在里面增加了部分FSMC设置和初始化代码生成的改动的文件。
& & 如果你是新手,建议你使用原始的文件,但注意不要随便或无意中改动源码,只要点鼠标配制就可以了。
& & 我改过的,只是一个测试,不保证完全正确,所以只能作为想仔细了解STM32_Init.c,以及想自己增加功能的做参考。
& & 本贴上面我贴的DEMO或一些参考代码中,打在包里的是我正在改,或改过的代码,可能还是有BUG的。所以强烈建议新入门者,如果要尝试和体验STM32_Init.c是否方便的话,还是直接使用原始的文件。
======================================================================
& &&&做了一件错事,先道个不是啦。
& &&&前2天贴的DEMO中和一些参考代码中,打在包里的STM32_Init.c是经过我改动的,可能会有点问题。我是一面做,一面测试的。可是这个测试只是测试自己加的部分,不是全面的,今天做了一个比较全面的整理,发现我把原代码中的一个判断条件无意删掉了,本想换掉上面的上传的东西,可是已经过了时间,不能换了。
& &&&请本栏斑竹,或阿莫帮助把本贴90楼以上我上传的东西屏蔽掉(帖子保留,只是把上传的代码连接去掉就可以),后面我会重新上传这些DEMO,并主要使用原始STM32_Init.c。
路过,顶一下。。STM32自己也在耍
晚上开始对红牛的STM32板做测试和入门,使用环境是MDK + J-LINK(买板配的,应该是山寨版)。
测试代码非常简单,循环点亮板上面5个LED。
测试使用J-LINK下载代码(DEBUG功能下),单步硬件调试执行,使用RS232对STM32使用ISP方式的编程,目前都能正常的使用。
测试使用的DEMO_0在下面:
点击此处下载
(原文件名:STM32_Demo_o.rar)
感觉到的不足和问题都还是与工具相关:
1。可能由于J-LINK是山寨版的,在光盘中没有使用说明,如果想通过JTAG给实验板供电,则要用命令打开J-LINK里面的开关。可是我在它的WINDOWS操作界面中没有找到这个控制的地方,红牛的资料中对于用JTEG供电只是提到打入一个命令。在J-LINK的DOS命令行下试了一下,是可以的,但这样处理好象太麻烦了点,等会再找找,或许有方便的方法。
2。使用J-LINK还需要另外安装驱动软件,MDK中有J-LINK的选项,怎么不带驱动,还要另外安装?ST-LINK就不用另外安装倾动了。不过安装了驱动后,在MDK中到也不需要做特殊的配置,只要选择J-LINK就可以了。
3。同使用ST-LINK一样,使用J-LINK后,在MDK中也不能直接进行擦除和编程的工作,只能通过DEBUG方式下载。奇怪了,难道是MDK的毛病?
4。每次使用J-LINK进入DEBUG时,计算机会白屏闪一下,然后再回到DEBUG的窗口,时间大约1秒,好在不是死机。我是从这个现象判断J-LINK是山寨的,正版的可能会在进入DEBUG时显示LOGO或版权什么,山寨的就“闪”掉了。
马老师,注意休息啊 。。。。
再次表明本人非马甲和专为针对马老师而来
我从未在ST以及任何与ST相关的公司呆过&&与ST也没有任何利益关系
目前供职于江浙一家做火灾报警的公司 主要负责探测器和控制器的研发 只是曾经有产品有用过STM32的芯片而已
刚注册不久&&到论坛的全部发言都在此贴&&难免会让人产生误解&&
到avr论坛 只为学习和讨论&&如果前面有言语上的不妥 希望马老师不要见意& &期待您关于STM32的新作!
现在的研究生真的不敢恭维啊,连8位机都不懂的,居然也可以考得上研究生。
我从接触stm32到用stm32做项目不到一周,用的还是免费的H-JTAG。
不明白有些人为什么去抵触函数库,这可以为很快上手提供方便。
ST能做出这个库来,也不是一般工程师能做出来的,难道一个刚入手的还比他们更了解Stm32?
ST的效率足够高了,72M的速度比avr快4、5倍了,要对库函数做精简也没多大意义,相反一个好的程序架构、模块化才是很重要的。
IO口初始化那块我觉得不错,主要为了保持程序前后的一致性和可读性,没必要去记忆那么多寄存器,也方便移植,为了提高那么点效率,去损害程序的一致性、可维护性,我觉得没必要。
如果你为了这么一点速率都去计较,要么你选型没选好,要么你陷入死胡同了。其实现有速率可以做很多事的,大部分项目都用不完的。
其实,库文件有些编程风格和模块化的理方式,还是值得我们学习的。熟悉库文件也可以更好的理解datasheet。
当然,什么都要灵活运用,就要看个人实力了。
【95楼】 machao
感觉到的不足和问题都还是与工具相关:
1、通过JTAG给实验板供电
我的J-LINK是绝对的山寨版,坛子里坛友奉献的元器件自己焊的,不过似乎和你的电路板不是一个版本,我当时就没焊供电的部分,安全第一,如果发生短路事件倒霉的就是主板USB口。
2。使用J-LINK还需要另外安装驱动软件,MDK中有J-LINK的选项,怎么不带驱动,还要另外安装?ST-LINK就不用另外安装倾动了。不过安装了驱动后,在MDK中到也不需要做特殊的配置,只要选择J-LINK就可以了。
的确有这个问题
3。同使用ST-LINK一样,使用J-LINK后,在MDK中也不能直接进行擦除和编程的工作,只能通过DEBUG方式下载。奇怪了,难道是MDK的毛病?
在MDK Flash菜单里面有擦除和下载阿!难不成因为我的J-Link升级过
4。每次使用J-LINK进入DEBUG时,计算机会白屏闪一下,然后再回到DEBUG的窗口,时间大约1秒,好在不是死机。我是从这个现象判断J-LINK是山寨的,正版的可能会在进入DEBUG时显示LOGO或版权什么,山寨的就“闪”掉了。&&
这个不清楚每遇到过
阿莫电子论坛, 原"中国电子开发网"
, 原www.ourdev.cn, 原www.ouravr.com

我要回帖

更多关于 汇编 子程序 的文章

 

随机推荐