第一章
1.1收到元件
1.2 ARM开发板DIY --采购元件
1.3
1.3.1 元件焊接
1.3.2 板子调试前的最后检测
第二章
2.1软件开发平台的安装及LED流水灯的实现
2.1.1keil MDK 及IAR for ARM, Evaluation version 5.50下的安装
2.2 LCD显示字符
第三章
3.1 DS18B20检测温度,LCD显示
3.2 DA产生正弦波
3.3 I2C模块读写,LCD显示
3.4定时器溢出,产生中断,使LED等闪烁
1.1收到器件
大家好 我是dqlu,想深入学习下ARM,所以参加了此次活动,让自己可以有所提
高,希望在这里可以跟大家好好学习,互相交流下经验,也希望自己可以帮助到别人,
嘻嘻 ,最后祝大家工作顺利,学业进步。每天给自己一个微笑。
先跟大家交代一下我的技术背景,2011年本科毕业,在校专业是测控技术与仪器,学过单片机,属于中等熟悉系列,即懂简单应用而已,也学过ARM,不过基本都忘了,所以可以说是从一开始学ARM, 到此为止。
下面开始我的DIY, 我将开发板开始正式使用之前成为 (一)系列,即包括收到器件、焊接元件、及开发板正式使用之前的一些活动。
此贴先来给大家看下我收到的 DIY基础包,有点小失望,以为可以不用去买器件了呢。可是。。。。
学习一下其他人用目录方式生成的连接方式,方便大家观看和查阅
刚学会的连接到楼层的方法,即在目标页的网址后加上#楼号就可以,比如http://forum.eepw.com.cn/thread/210099/3#21,连接到21楼,然后粘贴到超链接的网址就可以了
IAR for arm 关于STM32的软件开发平台从安装到下载,出现的问题请看11楼。
我会具体而详细的把遇到的问题及解决方法 告诉大家。在我的不懈努力,不断google下终于可以下载了。可以看到LED灯闪烁,先把源程序奉上。
只能到此为止了-dqluyanshu 之ARMDIY进程帖

关键词: 只能 到此为止 -dqluyanshu ARMDI


看到大家都已经热热闹闹的调起来了,心里开始有些着急了,现在有的只是基础包和PCB板,还缺电阻电容之类的,还有2.54mm的排插,于是上网查呀,深圳南山区与宝安区的赛格电子市场,打了两个电话,得到的结果是 一般六点会关门,这可急死我喽,没时间啊。
绝望之刻,淘宝网站上看下,嘿嘿, 没想到,天助我也,真让我找到一家,价格还是蛮便宜的,我找到是2.54mm的排插,这家店1*40的排插只买0.6元,于是又买了些 电阻电容啊,也不贵,100个才1块钱,我不是帮助做广告哦,我不认识他,只是这家店真的解了俺燃眉之急。我也希望给大家看下某些元件的价格,这样以后买东西就不会受骗了,这家店的淘宝地址是http://store.taobao.com/shop/view_shop.htm?user_number_id=751498154
深圳的我,明天就可以收到货了,开始很焊接喽



上周六就把视频录好了,可实在粗糙的很,花费很多时间来剪辑。第一次录,男朋友也不会拍,反正不好看,不过里面的焊接方法,大家还是可以学习,有问题的可以留言,虽然我懂的也不是很多,不过很愿意告诉大家。
焊接前,有几点要十分注意
1.在焊接时不可太用力,只有有足够锡,并且焊了一定的时间(这样可以保证锡彻底融化),元件才好移动,如果因不好移动,就用很大的力,很可能会把焊盘弄的脱落,这样以后就更不方便的。
2.一般情况下,刀型烙铁是最好用的,如果没有,可以去卖工具那里买一个刀头,我买过一个,大约五块钱左右,也很好用。当然几十几百的也有。

3.在焊接过程中,松香是比较重要的,松香是助焊剂,有了助焊剂来焊接,焊机就会更光滑,这样流动性会比较好,更易于焊接,
首先给大家传个我焊接0402电阻电容的视频,由于没有实验室没有0603的
电阻,只能用0402的来替代了。优酷地址是http://player.youku.com/player.php/sid/XMzgwMDQyODIw/v.swf
接下来,是我自己焊接LQFP144的视频。优酷地址是http://player.youku.com/player.php/sid/XMzgwMDQyMTAw/v.swf
PS:
我不是高手,只是去工厂里实习过,跟着焊接的师傅学习了下。呵呵,大家不要见笑,希望对大家有帮助。

上周六第一次通电测试,STM32主芯片很悲催的冒烟了,猛然想起录上贴的焊接视频时 没看第一脚,随便就放上去了,于是只好用热风枪吹下来,焊上了一块新的,幸好还好,没有I再冒烟,虽然很习惯板子上电前测试下,电源和地是否短路,但这次主IC烧毁 真是始料未及,
下次一定吸取教训,1.先看电源和地是否短路,比如电容是否焊错,某些端口是否接反。
2.一定在通电前确定,主IC的位置没有焊错弄反
虽然道理是简单的道理 ,但养成这个习惯可不简单

2.1.1keil MDK 及IAR for ARM, Evaluation version 5.50下的安装
这一个星期就在弄这个软件的安装了,还好,可以实现,自我鼓励一下,不要放弃,坚持下去,你就会成功。
言入正题,现有的硬件设备,我们的开发板,和实验室现有的JLINK for arm,即仿真器,买的话好像也不贵。一百元左右。不过我没买过。
首先 先安装J-link的驱动软件,可以去IAR公司官网上下载,但好像要输入J-link后面的S/N才可以
其次 软件与版本的选择
发现用于STM32的编译环境一般有两种,一种是Keil MDK,一种是IAR for arm
1.学单片机的时候用过Keil,于是费了好大劲把Keil MDK 4.12装上了
Keil MDK 4.12的安装文件及破解文件 下载地址http://www.cr173.com/soft/13698.html
接着 在论坛上下了一个LED程序,先试试编译及下载连接通路是否联通,
LED程序下载地址(不好意思,忘了哪位上传的啦)
http://shareupload.eepw.com.cn/201204/094215394f487614acfed72aca029c57.rar
可接下来出现了问题,缺少 agdirdi.dll

又折腾了一番,没办法,只好先安装 Keil MDK3.15b 然后把里面的ARM文件夹拷出来,然后卸载,继续装Keil MDK4.12, 然后把 agdirdi.dll拷到Keil MDK 的安装目录下的ARM文件夹中 ,然后就可以成功编译了。但连好下载器 准备下载的时候又弹出

所以 Keil MDK 下载STM32F103ZET正式宣告失败,也许是我自己没有设置好,也许是我的Jlink 仿真器不支持
于是,只好转型到IAR开发环境了
2.还是照旧,第一步安装IAR for arm 开发环境,我选择的下载地址是
http://zhidao.baidu.com/question/189652446.html?an=0&si=8
按照满意答案中说的下载第四个(安装文件)和第五个(破解文件)就可以了。
也可以去官网上下,然后去下面的地址 下载注册机。
http://www.ourdev.cn/forum.php?mod=viewthread&tid=4002630
啰嗦下安装步骤:1.先打开IAR.RAR 安装 IAR Embedded Workbench for ARM, Evaluation version 5.50,2.然后打开IAR注册机,安装完后选择PART——A。单击ITEM选择Evaluation version 5.50,之后generate就可以了,在安装IAR Embedded Workbench for ARM, Evaluation version 5.50时 把ID后放在lisence 一栏然后next,再把注册机的最后一大串数字 黏贴过来就可以安装了。也破解成功了

我现在最最想说是 百度太不给力了,还是google 好用。
呵呵 是真的好用

对于跟我一样的新手,建议大家还是用库文件,给个下载地址
http://dldx.csdn.net/fd.php?i=852137485171988&s=5b23f322e0aede6099068d114e81fc24
前面安装的Keil也不是没用,在其安装目录里也有STM32F10X的库文件 eg: keil/ARM/ INC/ST/STM32F10x.
嘻嘻 告诉大家一个小秘密。这些问题我能解决,首先是google 出的答案,另一个诀窍呢,是打开IAR提供的example, 两个IAR工程 比较、修改的,一般的example 在如下目录:
IAR/arm/ example / ST/ STM32F10x /
先说出现的第一个问题identitfier"GPIO_Pin_2" is undefined

很好解决,即程序中用到这个宏定义,但不能找到它的定义,只要添加#include "stm32f10x_gpio.h" 这个头文件即可。
需要把用到的头文件都拷贝到 建立的 工作区 目录中,这样才好设置。
第二个问题
“s32”has already been declared in the current scope

即 重复定义 在两个件都定义了 某个变量,选中此变量后
go to definition 可看到它在哪两个文件中被定义,把不用的头文件删掉即可。
第三个问题 link error
error[Li005] no definition for "GPIO_init"

最后 全部文件中查找 GPIO_init,发现其在 stm32f10x_gpio.c中使用了 GPIO_init这个函数,但把它定义的头文件,没有包含在.c文件中,所以连接错误。
在这里 有两点大家一定要注意,1.xxxx.c文件中如果包含了某个函数,一定要include 这个函数所在的头文件。
2.IAR开发环境中,头文件不需要添加,只需要放在工作区workspace文件下即可。只需要添加某些头文件涉及到的.c文件即可
第四个问题
显示:There were warnings while generating flash loader input.See the Debug Log window for details.
先说下工程设置的问题, option
首先要设置 general 里面的device
其次要设置c/c++ compiler里的preprocessor
再次要设置 defined symbols
这里的设置请参照
关于$PROJ_DIR$ 这里就是指你建立的工程所在文件夹
$PROJ_DIR$ \Hfile\就是指你工程文件夹下的Hfile 文件夹。
最后还要设置linker 下面的config
更改了这项,前面那个问题就解决了,其实这个是参照example中的LCD_DEMO工程里面的OPTION设置的。如果没有的话在浏览中把那个文件复制过来就好了。
在此 上传下 LED_DEMO程序
http://share.eepw.com.cn/share/download/id/69533
接下来开始真正进入嵌入式世界钻研

学前小序
浅谈初识-STM固件函数库
也是最近两天才接触STM32固件函数库的,这几天休息,看了些程序源代码及固件库的中文说明,觉得大致有了实质上的理解,虽然细节不太懂。
STM32固件库函数的中文说明下载地址
http://share.eepw.com.cn/share/download/id/68119
在这里说下我的简单理解,希望给大家一定认识上的帮助
我们可以认为STM32系列嵌入式IC是51单片机的复杂化,功能速度上都在单片机上有一定的提升,相应的程序也会变得多而杂,最大的变化可能就是其硬件上可以跑个系统,来管理它的一些基层程序。
在实际应用中,嵌入式系统实现的功能越多,控制的东西越多,STM32上的程序也会变的数量多而且不好记。而ST厂家技术支持还是做得不错的,于是就有了STM32固件函数库,可以让开发者不需要考虑去设置哪个寄存器,而只相应的调用哪个函数即可,也就是说,ST已经把一些声明 ,和一些基层函数,都包装成库函数让你直接来调用,你只需要调用函数并且传递函数的参数 即可,这极大方便了,一些嵌入式系统开发的研发公司。,但也由于开发环境的通用性,程序的大小和执行速度不是最优的,所以一些人也不应用固件库函数。
本人只求简单理解,请大侠们不要拍我

2.2 LCD 显示字符
忙活了三个星期,终于让TFT 的LCD显示出字符了,最后发现还是程序不对,幸亏参考了以下网址中的字库程序,修改了源程序,才得以显示。http://ishare.iask.sina.com.cn/f/23404264.html?retcode=0
先上图,再附议主要的源程序。
此程序只能显示字母、数字,关于汉字显示,还不行。
主要源程序:
void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c,uint8_t width)
{
uint32_t index = 0, i = 0;
uint8_t Yaddress ;
Yaddress = Ypos;
LCD_SetCursor(Xpos, Ypos);
for(index = 0; index < 16; index++)
{
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
// for(i = 15; i >0; i--)
for(i = 1; i <width; i++)
{
if((c[index*(width/8)+i/8] & (0x80>>(i%8))) == 0x00)
{
LCD_WriteRAM(BackColor);
}
else
{
LCD_WriteRAM(TextColor);
}
}
Yaddress++;
LCD_SetCursor(Xpos, Yaddress);
}
}
void LCD_DisplayString(uint16_t Xpos, uint16_t Ypos, uint8_t *ptr)
{
uint32_t i = 0;
uint8_t code1;
uint8_t code2;
uint32_t address;
/* Send the string character by character on lCD */
while ((*ptr != 0) & (i < 50))
{
code1 = *ptr; /* ascii代码 或者汉字代码的高字节 */
if (code1 < 0x80)
{ /* Display one character on LCD */
LCD_DrawChar(Xpos, Ypos,&Ascii16[code1 * 16],8);
/* Decrement the column position by 16 */
Xpos += 8; /* 列地址+8 */
}
else
{
code2 = *++ptr;
if (code2 == 0)
{
break; /* Point on the next character */
}
address = ((code1-0xa1) * 94 + (code2-0xa1)) * 32 + HZK16_ADDR;
LCD_DrawChar(Xpos, Ypos, (const uint8_t *)address, 16);
Xpos += 16;
}/* 列地址+16 */
ptr++; /* Increment the character counter */
i++;
}
}
MAIN函数
void main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC
| RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG
| RCC_APB2Periph_AFIO , ENABLE);
/*------------------- Resources Initialization -----------------------------*/
/* GPIO Configuration */
GPIO_Config();
/* Initialize the LCD */
STM3210E_LCD_Init();
/*------------------- Drivers Initialization -------------------------------*/
LCD_Clear(Magenta);
LCD_SetTextColor(Blue);
LCD_SetBackColor(Magenta);
while(1)
{LCD_DisplayString(50, 50, "Hello");
LCD_DisplayString(50, 80, "A R M D I Y");
LCD_DisplayString(50, 100, "Happy every day");
}
}
除了这两个程序之外,还需要字符库文件(即Ascii16为首地址的数组),可直接调用上面网址中的fonts.H文件即可,
此程序只适合驱动芯片为SS1289的LCD。
如你需要帮助,请留言