楼主: wangkj

跟我学嵌入式(arm fpga 原理图 pcb verilog 焊接 调试 软件硬件)

[复制链接]
 楼主| 发表于 2013-1-29 14:28:18 | 显示全部楼层
记得在项目的选项中,把Create Hex File 选中,这是我们将来烧写的文件。

1.jpg

2.jpg

 楼主| 发表于 2013-1-29 14:29:39 | 显示全部楼层
从软件的标题,可以看到我们这个工程文件所在的位置,
将来,我们烧写文件的时候,根据这个线索,就能找到烧写文件。

1.jpg

 楼主| 发表于 2013-1-29 14:30:13 | 显示全部楼层
点击编译图标,完成项目的编译。

1.jpg

 楼主| 发表于 2013-1-29 14:30:45 | 显示全部楼层
拔下SB2跳线,重新上电或者按复位键B2。
我们这个板子的usb接口比较小,表贴,插拔一定要小心,不用用力过猛,
如果野蛮操作,弄不好这个usb接头就掉了,很难补救。

1.jpg

 楼主| 发表于 2013-1-29 14:31:22 | 显示全部楼层
这是复位键,记住,旁边的SB4跳线,跳上,复位才能有效。

1.jpg

 楼主| 发表于 2013-1-29 14:34:29 | 显示全部楼层
烧写状态的板子,led1是亮的,led3,led4是灭的。
点击烧写软件Flash Loader Demo

1.jpg

 楼主| 发表于 2013-1-29 14:35:19 | 显示全部楼层
这是启动之后的烧写界面。

1.jpg

 楼主| 发表于 2013-1-29 14:36:23 | 显示全部楼层
一般来讲,我们应该选择UART口中数字最大的一个,如果没有把握,可以在系统中查看。

1.jpg

 楼主| 发表于 2013-1-29 14:37:56 | 显示全部楼层
在 我的电脑->属性->设备管理器->端口 中就能找到我们的pl2030驱动的串口

1.jpg

2.jpg

3.jpg



 楼主| 发表于 2013-1-29 14:39:44 | 显示全部楼层
确认串口正确了,点击next,开始我们的程序烧写。

1.jpg

 楼主| 发表于 2013-1-29 14:49:24 | 显示全部楼层
如果顺利的话,会出现烧写器件正常的提示,
包括你的器件的flash 容量。
如果出现其他错误提示,请注意烧写跳线跳开没有,
多按几次复位,反复点击next。
如果多次都不正常,请拔掉usb接口断电,然后重新上电,按复位按钮。
注意,上电之后,要等3-5秒,然后再启动烧写软件,
有些电脑反应慢,usb来不及初始化,会造成出错。
如果经常出错,请把Timeout时间设置为3秒以下,省的等的心烦。
我的经验是,如果正常,不会超过1s,超过一秒没响应,肯定就不正常了。

1.jpg

 楼主| 发表于 2013-1-29 14:52:26 | 显示全部楼层
Target自动选择的是64k型号,我们这个就是这个型号。

1.jpg

 楼主| 发表于 2013-1-30 14:38:24 | 显示全部楼层
点击"..."按钮,选择我们的烧写文件

1.jpg
 楼主| 发表于 2013-1-30 14:39:14 | 显示全部楼层
文件类型选择HEX,
文件名是Demo.HEX。

1.jpg

 楼主| 发表于 2013-1-30 14:39:46 | 显示全部楼层
烧写正常的话,很快完成,一般这里很少出错,但也不是没有。
如果出错的话,请重新复位,重新打开烧写软件重复上述过程。

以前,有第三方的烧写软件,能自动烧写,比这个官方的好用一些,
但目前,我没找到支持stm32f0的,如果哪位对软件比较热心,
可以去下载这个烧写软件的源码,自己改写。

1.jpg

 楼主| 发表于 2013-1-30 14:40:34 | 显示全部楼层
插上SB2的烧写跳线帽,让板子进入正常工作模式。
这时候,可以重新上电或者复位,板子就正常工作了。
这时候,可以看到LED电源灯亮,LED3,LED4闪烁。

1.jpg

 楼主| 发表于 2013-1-30 14:41:31 | 显示全部楼层
Keil自带的程序很简单,虽然能够足以说明板子已经正常工作了,
但我们需要更多的信息显示,如果能把更复杂的信息显示出来就更好了。
我们想到了串口,我们既然能串口烧程序,我们也应该能通过串口,把stm32的
内部信息或者采集的其他信息通过电脑显示出来。
打开我改版的官方样例程序。

1.jpg

 楼主| 发表于 2013-1-30 14:42:11 | 显示全部楼层
解压到当前文件夹,然后到STM32F0-Discovery_FW_V1.0.0\Project\Demonstration\MDK-ARM
目录中,双击 STM32F0-Discovery_Demo.uvproj 打开这个工程文件

1.jpg

 楼主| 发表于 2013-1-30 14:43:02 | 显示全部楼层
我在main.c中增加了这些内容:

//#pragma import(__use_no_semihosting)
                           
struct __FILE
{
        int handle;
};

FILE __stdout;
         
int _sys_exit(int x)
{
        x = x;
        return 0;
}

/** @addtogroup STM32F0-Discovery_Demo
  * @{
  */
int fputc(int ch, FILE *f)
{
  /* Write a character to the USART */
  USART_SendData(USART1, (uint8_t) ch);

  /* Loop until the end of transmission */
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
  {
  }
  return ch;
}
/**
  * @brief  Inserts a delay time.
  * @param  nTime: specifies the delay time length, in 1 ms.
  * @retval None
  */
/****************************************************************************
* Ãû    ³Æ£ºint fgetc(FILE *f)
* ¹¦    ÄÜ£ºÖض¨Òåfgetcº¯Êý£¬printfº¯Êý´ÓÖÕ¶ËÊäÈëÊý¾Ý
* Èë¿Ú²ÎÊý£ºÎÞ
* ³ö¿Ú²ÎÊý£ºÎÞ
* ˵    Ã÷£ºÎÞ
****************************************************************************/
int fgetc(FILE *f)
{
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
        return (int)USART_ReceiveData(USART1);
}

void delay(void)
{
        int i,j;
        for(i=0;i<2000;i++)
                for(j=0;j<2000;j++);
}
这些只是关键内容,其他内容比如串口初始化,大家自己打开工程文件去看。
还有,target的option中,一定要使用micro lib库。

1.jpg

2.jpg



 楼主| 发表于 2013-1-30 14:43:45 | 显示全部楼层
这种办法,fputc,fgetc,把标准输入输出重定向到了串口,如果需要重定向到屏或者键盘,可以修改者两个函数。
从理论上讲,函数中,可以同时支持多种设备。
比如,同时支持串口和屏的输出,同时支持串口和键盘的输入等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表