这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 只能到此为止了-dqluyanshu 之ARMDIY进程帖

共32条 2/4 1 2 3 4 跳转至
菜鸟
2012-04-20 15:17:32     打赏
11楼
                                    2.1软件开发平台的安装及LED流水灯的实现

 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,再把注册机的最后一大串数字 黏贴过来就可以安装了。也破解成功了


菜鸟
2012-04-20 17:09:39     打赏
12楼
2.1.2     实现流水灯效果中出现的问题(IAR for arm中出现的问题)

我现在最最想说是 百度太不给力了,还是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
接下来开始真正进入嵌入式世界钻研


院士
2012-04-20 21:48:35     打赏
13楼
楼主我也是使用IAR的IDE软件


不过,看了楼主的帖子,貌似是keil与 IAR 双线作战啊~~

菜鸟
2012-04-22 08:49:06     打赏
14楼

     学前小序
 浅谈初识-STM固件函数库 
也是最近两天才接触STM32固件函数库的,这几天休息,看了些程序源代码及固件库的中文说明,觉得大致有了实质上的理解,虽然细节不太懂。

STM32固件库函数的中文说明下载地址
http://share.eepw.com.cn/share/download/id/68119

在这里说下我的简单理解,希望给大家一定认识上的帮助

我们可以认为STM32系列嵌入式IC是51单片机的复杂化,功能速度上都在单片机上有一定的提升,相应的程序也会变得多而杂,最大的变化可能就是其硬件上可以跑个系统,来管理它的一些基层程序。

在实际应用中,嵌入式系统实现的功能越多,控制的东西越多,STM32上的程序也会变的数量多而且不好记。而ST厂家技术支持还是做得不错的,于是就有了STM32固件函数库,可以让开发者不需要考虑去设置哪个寄存器,而只相应的调用哪个函数即可,也就是说,ST已经把一些声明 ,和一些基层函数,都包装成库函数让你直接来调用,你只需要调用函数并且传递函数的参数 即可,这极大方便了,一些嵌入式系统开发的研发公司。,但也由于开发环境的通用性,程序的大小和执行速度不是最优的,所以一些人也不应用固件库函数。

本人只求简单理解,请大侠们不要拍我


高工
2012-04-22 09:40:16     打赏
15楼
刚欣赏过LZ的2段视频,遗憾地发觉:主芯片放错了,所以才有后来的杯具。
截图如下(主芯片多转了90度啦!~):

助工
2012-04-24 11:50:29     打赏
16楼
我的那个keil错误更多啊。

菜鸟
2012-05-16 14:42:23     打赏
17楼

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。
如你需要帮助,请留言


院士
2012-05-16 16:26:51     打赏
18楼
楼主的LCD已经点灯了。恭喜啊~~~

我的还没有点亮呢~~

菜鸟
2012-05-17 10:14:46     打赏
19楼

加油啊 ! 我调了好几个星期,坚持不懈的去解决问题啊,支持你


菜鸟
2012-05-22 12:52:04     打赏
20楼
那样子焊接,焊盘还不都脱落了呀,我的LCD是YZ200单片机开发板用的8位数据模式的ILI9325驱动IC,目前我用GPIO口点亮了,可以显示英文字符,中文字符,图片了,不知LZ的LCD是用GPIO驱动的么?

共32条 2/4 1 2 3 4 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]