搜索
bottom↓
回复: 17

Linux下开发STM32,用Wine搭建环境,用STM32flash下载

[复制链接]

出0入0汤圆

发表于 2013-6-8 13:08:15 | 显示全部楼层 |阅读模式
我从2008年底就开始用Puppy圣诞版,一直到现在。下面的网址是我用Linux的图片:
http://www.minilinux.net/softwar ... %E6%AF%94nop?page=1  贴子号是#10765
去年买了一块普中HC6800的板子,因为提供光盘中的开发环境是Windows下的,而且看坛子上的例子也都是MDK的,所以就试着在LInux下用wine仿真执行,完全没问题,但我没钱买Jlink,另外,我习惯使用Gvim来进行软件编程,所以集成的开发环境对我来说就是鸡肋。在Window下提供了一个下载软件,但Wine后不能正常下载。Google后找到了下面的软件,是开源的,但不支持一键下载,也就是不能控制DTR、RTS。改编了一下源程序,增加了控制DTR、RTS的代码,增加了取消STM32读保护的功能。
软件在命令行运行时必须设置一些注册表项目,将下面的文字存成aa.rge
REGEDIT4

[HKEY_LOCAL_MACHINE]

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment]
"CPU_CLOCK"="0x00000000"
"CPU_TYPE"="STM32F103C8"
"CPU_VENDOR"="STMicroelectronics"
"PATH"="z:\\Keil\\ARM\\BIN40\\;C:\\windows\\system32;C:\\windows"
"RVCT40INC"="z:\\Keil\\ARM\\RV31\\INC"
"RVCT40LIB"="z:\\Keil\\ARM\\RV31\\LIB"
"UV2_TARGET"="HC6800-EM3"


[HKEY_LOCAL_MACHINE\Software\Classes\KA0.74H0Y.C]

[HKEY_LOCAL_MACHINE\Software\Classes\KA0.74H0Y.C\CXSID]
@=hex:96,e4,3e,98,e8,22,66,a7,fc,39,9f,d9,16,53,b4,13,63,9d,ee,55,92,cf,15,4f,\
  95,d2,0f,4c,89,c3,05,55,92,ed,50,5d,6a,77,84,91,9e,ab,b8,c5,d2,df,ec,f9,06,\
  13,20,2d,3a,47,54,61,6e,7b,88,95,a2,af,bc,c9,78,df,ec,f9,06,13,20,2d,3a,47,\
  54,61,6e,7b,88,95,a2,af,bc,c9,31,12,45,a2,eb,56,f6,f7,00,00,00,00,00,00,00,\
  00

[HKEY_LOCAL_MACHINE\Software\Classes\{4E50B08E-28CB-44DA-B5B4-EFC45C1EBE6B}]
"0A74H0YC"=hex:c6,14,6e,c8,18,52,96,d7,2c,69,cf,09,46,83,e4,43,93,cd,1e,85,c2,\
  ff,45,7f,c5,02,3f,7c,b9,f3,35,85,c2,1d,80,8d,9a,a7,b4,c1,ce,db,e8,f5,02,0f,\
  1c,29,36,43,50,5d,6a,77,84,91,9e,ab,b8,c5,d2,df,ec,f9,a8,0f,1c,29,36,43,50,\
  5d,6a,77,84,91,9e,ab,b8,c5,d2,df,ec,f9,31,12,45,a2,eb,56,f6,f7,00,00,00,00,\
  00,00,00,00

[HKEY_LOCAL_MACHINE\Software\Classes\KA0.8VU3G.C]

[HKEY_LOCAL_MACHINE\Software\Classes\KA0.8VU3G.C\CXSID]
@=hex:c4,12,69,c3,13,4d,92,f5,57,97,eb,25,80,bd,18,56,a6,e0,3d,82,bf,fc,3e,78,\
  bc,f9,36,73,b0,ea,27,8b,c8,0a,4d,5a,67,74,81,8e,9b,a8,b5,c2,cf,dc,e9,f6,03,\
  10,1d,2a,37,44,51,5e,6b,78,85,92,9f,ac,b9,c6,75,dc,e9,f6,03,10,1d,2a,37,44,\
  51,5e,6b,78,85,92,9f,ac,b9,c6,31,12,45,a2,19,66,9d,5e,00,00,00,00,00,00,00,\
  00

[HKEY_LOCAL_MACHINE\Software\Classes\{4E50B08E-28CB-44DA-B5B4-EFC45C1EBE6B}]
"0A8VU3GC"=hex:f4,42,99,f3,43,7d,c2,25,87,c7,1b,55,b0,ed,48,86,d6,10,6d,b2,ef,\
  2c,6e,a8,ec,29,66,a3,e0,1a,57,bb,f8,3a,7d,8a,97,a4,b1,be,cb,d8,e5,f2,ff,0c,\
  19,26,33,40,4d,5a,67,74,81,8e,9b,a8,b5,c2,cf,dc,e9,f6,a5,0c,19,26,33,40,4d,\
  5a,67,74,81,8e,9b,a8,b5,c2,cf,dc,e9,f6,31,12,45,a2,19,66,9d,5e,00,00,00,00,\
  00,00,00,00
把MDK编译时的选项生成bat文件勾上,可生成如下的批处理文件
SET RVCT40INC=z:\Keil\ARM\RV31\INC
SET RVCT40LIB=z:\Keil\ARM\RV31\LIB
SET CPU_TYPE=STM32F103C8
SET CPU_VENDOR=STMicroelectronics
SET UV2_TARGET=HC6800-EM3
SET CPU_CLOCK=0x00000000
"z:\Keil\ARM\BIN40\ArmCC" --Via ".\obj\gdlcd.__i"
"z:\Keil\ARM\BIN40\ArmCC" --Via ".\obj\stm32f10x_it.__i"
"z:\Keil\ARM\BIN40\ArmCC" --Via ".\obj\i2c.__i"
"z:\Keil\ARM\BIN40\ArmCC" --Via ".\obj\2402.__i"
"z:\Keil\ARM\BIN40\ArmCC" --Via ".\obj\errarray.__i"
"z:\Keil\ARM\BIN40\ArmAsm" --Via ".\obj\stm32f10x._ia"
"z:\Keil\ARM\BIN40\ArmLink" --Via ".\obj\STM-1602.lnp"
z:\Keil\ARM\BIN40\fromelf.exe ".\obj\STM-1602.axf" --i32combined --output ".\obj\STM-1602.hex"
把相关的有用文件移到make文件夹下,把它改造成下面的sh文件:
#! /bin/sh
echo "start"
wine regedit ".\make\aa.reg"
wine "z:\Keil\ARM\BIN40\ArmCC" --Via ".\make\gdlcd.__i"
wine "z:\Keil\ARM\BIN40\ArmCC" --Via ".\make\stm32f10x_it.__i"
wine "z:\Keil\ARM\BIN40\ArmCC" --Via ".\make\i2c.__i"
wine "z:\Keil\ARM\BIN40\ArmCC" --Via ".\make\2402.__i"
wine "z:\Keil\ARM\BIN40\ArmCC" --Via ".\make\errarray.__i"
wine "z:\Keil\ARM\BIN40\ArmAsm" --Via ".\make\stm32f10x._ia"
wine "z:\Keil\ARM\BIN40\ArmLink" --Via ".\make\STM-1602.lnp"
wine "z:\Keil\ARM\BIN40\fromelf.exe" ".\obj\STM-1602.axf" --i32combined --output ".\obj\STM-1602.hex"
read -n1 var
以后需要编译时在Gvim下直接执行这个文件就行了。因为STM32工程文件是商业开发的,所以删除了一些源文件,附件中是编译时所有的源文件(包括下载,编译的角本,下载的源代码,ISP开发的pdf资料)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-8 13:14:52 | 显示全部楼层
牛逼,花哨但不实用。

出0入0汤圆

发表于 2013-6-8 13:23:50 | 显示全部楼层
那个系统下的STM32都是STM32开发。技术含量一样。
有时间就折腾,没时间还是别折腾了。

出0入0汤圆

 楼主| 发表于 2013-6-8 15:12:47 | 显示全部楼层
本帖最后由 okwhz 于 2013-6-8 15:16 编辑

说一下我用Linux的好处吧:
1、没有XP的蓝屏、黑屏现象。
2、没有XP的开机、关机升级各种补丁的现象。
3、在Linux下用淘宝买东西,心理踏实,不用担心木马盗号。
4、翻──墙后上网找资料方便。
5、资料安全,我的Linux机器上安装了gpg(最安全的公开密钥加密软件)、mutt(命令行电子邮件程序)开发完后用一个角本,能自动的调用备份程序,在半分钟之内能把我的工程打包压缩,用gpg加密,用mutt把它发送到我的139、126、gmail邮箱。我从来不担心我的资料会丢失。
6、Gvim在网上的评价是“神用的编辑器”,我是Gvim的骨灰级玩家了,现在只要是编辑文本、写wiki,我都会用它。使用任何集成开发环境对我来说都是一个花架子,用vim效率高。
我的机器在99%的时间里运行的都是Linux,在没有找到STM32flash这个软件时,我也是用虚拟机中的Linux编辑(从网止下载、解密、备份)程序,在Windows下编译、下载程序。
自己走自己的路,就象我选择了五笔做为输入法一样,可以盲打了,效率肯定比所谓的各种智能输入法高……。
在这个论坛上学了不少知识,做为反馈,把我的一点点经验分享一下。
主要的经验有两个,一个是STM32flash的改编,在串口下载前可设置DTR、RTS,加入了去掉读保护的功能。
二是命令行进行编译时对注册表的修改,如果不加入这个注册角本,在Linux下的wine是不能在命令行下正确编译的。
Linux能够实实在在的为我节约时间,所以我从实用的角度选择了它。绝对不是玩酷。

出0入0汤圆

发表于 2013-6-8 15:17:20 | 显示全部楼层
okwhz 发表于 2013-6-8 15:12
说一下我用Linux的好处吧:
1、没有XP的蓝屏、黑屏现象。
2、没有XP的开机、关机升级各种补丁的现象。

个人初学linux,感觉linux还是很好用的!
apt-get获得很多软件,也非常好用!

出0入0汤圆

发表于 2013-6-8 15:32:09 | 显示全部楼层
现在ST-Link便宜了,可以不用wine了.就是GDB用起来有点麻烦.

出0入0汤圆

发表于 2013-6-8 15:33:53 | 显示全部楼层
okwhz 发表于 2013-6-8 15:12
说一下我用Linux的好处吧:
1、没有XP的蓝屏、黑屏现象。
2、没有XP的开机、关机升级各种补丁的现象。

全用linux的原生程序也能开发stm32吧,这wine一上就不那么美了
至于vim。。。jetbrains家的ide我觉得在java,python,ruby,javascript,html等各种语言上都完爆vim了,如果电脑不是太差的话。。。

出0入0汤圆

 楼主| 发表于 2013-6-8 15:57:06 | 显示全部楼层
本帖最后由 okwhz 于 2013-6-8 16:35 编辑
crysislinux 发表于 2013-6-8 15:33
全用linux的原生程序也能开发stm32吧,这wine一上就不那么美了
至于vim。。。jetbrains家的ide我觉得在ja ...


这次开发时用的LCD是没有汉字库的,在Vim中我把源文件选中,用几个指令就能把文件中所有的不同汉字选出来,我的文件中使用了5000多个汉字,经过vim的筛选后就剩下了308个汉字,而且是排序了的,在程序中能够用二分法十分快速的查找字库!
这个过程几分钟就行了,IDE能成吗?

做这个开发是收费了的,厂家要求用MDK开发,为了方便后继人员能在Windows下接手,所以用了Wine,但没有用Keil的集成开发环境,就像调用gcc一样,做了一个编译角本。我的程序编译后大概50多KB,在我的机器上用不了20秒(赛扬2.8单核,910的板子,2G内存),用gcc也省不了几秒……。
http://www.amobbs.com/thread-1637785-1-1.html 这个贴子中的程序就能够在Puppy中运行,已经测试过了。

出0入0汤圆

 楼主| 发表于 2013-6-8 16:07:19 | 显示全部楼层
笑笑我笑了 发表于 2013-6-8 15:32
现在ST-Link便宜了,可以不用wine了.就是GDB用起来有点麻烦.

开发没有用过调试器,就是用串口+printf来开发……

出0入0汤圆

 楼主| 发表于 2013-6-8 16:40:06 | 显示全部楼层
yanhaijian2005 发表于 2013-6-8 13:14
牛逼,花哨但不实用。

我接触Linux已经有十多年了,完全用Linux也差不多有5年了。这个开发环境对我来说就是最适合、最实用的了,已经用不惯Win了。

出0入0汤圆

发表于 2013-6-8 16:49:28 | 显示全部楼层
本帖最后由 crysislinux 于 2013-6-8 16:50 编辑
okwhz 发表于 2013-6-8 15:57
这次开发时用的LCD是没有汉字库的,在Vim中我把源文件选中,用几个指令就能把文件中所有的不同汉字选出来 ...


你还别说,有些ide是支持插件扩展的,vim能做的它大多数还真能做,至于某些实在难以实现的,我觉得用其他的诸如sed之类的工具组合单独处理就是了,这些就已经不是vim的功劳了,只能说vim能更好的嵌入这些外部工具,我想说的是像pycharm、rubymine、phpstorm这种ide的自动补全和错误提示非常智能,它们的效果已经远超ctags之类的正则匹配了

出0入0汤圆

 楼主| 发表于 2013-6-8 17:15:00 | 显示全部楼层
本帖最后由 okwhz 于 2013-6-9 07:44 编辑
crysislinux 发表于 2013-6-8 16:49
你还别说,有些ide是支持插件扩展的,vim能做的它大多数还真能做,至于某些实在难以实现的,我觉得用其他 ...


没有用sed等东西,全部是vim中的命令,
把所有的行连接成一行
2000J
将菜单中所有的ascii码删除
:%s/[\x0-\x7e]//
把每个汉字独立成一行
qqa<enter><esc>2000@q
排序并删除相同的汉字
sort u
……
还想问一下,你说的那么牛的IDE哪可以下载,想试一下。估计我已经是骨灰级的Gvim用户了,用有模式编辑器已经习惯了,我想也只有Vim有有模式这个概念……
看了一下,那个IDE,是商业版的,要钱的……


出0入0汤圆

发表于 2013-6-8 22:23:01 | 显示全部楼层
okwhz 发表于 2013-6-8 17:15
没有用sed等东西,全部是vim中的命令,
把所有的行连接成一行
2000J

能指点下vim怎么进阶吗?现在完全停留在x,dd,y,p,v的水平上 .

出0入0汤圆

发表于 2013-6-8 23:13:03 来自手机 | 显示全部楼层
记号一下兼膜拜vim高人

出0入0汤圆

 楼主| 发表于 2013-6-9 08:01:06 | 显示全部楼层
本帖最后由 okwhz 于 2013-6-9 08:10 编辑
笑笑我笑了 发表于 2013-6-8 22:23
能指点下vim怎么进阶吗?现在完全停留在x,dd,y,p,v的水平上 .


常用即可,比如最简单的,我开发工程时收集的文本资料,及开发进程,问题反馈等等,都用Vimwiki做。分门别类后非常清楚。用vimgrep在所有的文章中搜索关键词,也很好用,能自动的区分UTF8或CP936编码。
编程时把VIM设置成IDE的方法网上有很多的介绍,我就不罗嗦了。说一下我自己的体验(网上没有的):我把常用的命令定义成快捷键,把只在本文件中可能使用的命令写成单独的一行,比如我的主文件的第一行开始是这样写的
/*
:!./cc.sh && /TaskDisplay/stm32flash/stm32flash -w /TaskDisplay/obj/STM-1602.hex -v -g 0x0 /dev/ttyUSB0 -b115200
:!/TaskDisplay/stm32flash/stm32flash -U  /dev/ttyUSB0
:!/TaskDisplay/stm32flash/stm32flash -g 0x0  /dev/ttyUSB0
:!cd /TaskDisplay/ && /TaskDisplay/bak.sh
*/
在我的.vimrc中做了下面的映射
map <f8> <esc>V"fy@f<esc>
imap <f8> <esc>V"fy@f<esc>
这样我的光标定位到第二行按“F8”后就能够编译本工程并下载到STM32
定位到第三行按“F8”就能够去掉STM32的读保护
定位到第四行按“F8”就能够复位STM32
定位到第五行按“F8”就能够把工程中所有的文件打包用gpg加密后发到我的三个邮箱
我记得是从99年开始接触Linux,开始学用vi。到了现在,开发时首先想到的是怎样解决在命令行上用make编译,然后开个Gvim就可以开始编程了,开发单片机从来没有用过硬件调试仿真器,都是用串口发出信息进行调试……

出0入0汤圆

发表于 2013-6-9 11:29:53 | 显示全部楼层
okwhz 发表于 2013-6-9 08:01
常用即可,比如最简单的,我开发工程时收集的文本资料,及开发进程,问题反馈等等,都用Vimwiki做。分门 ...

那么是怎么把USART和标准IO流连接上的呢?自己要重写那些函数呢?

出0入0汤圆

 楼主| 发表于 2013-6-10 10:58:36 | 显示全部楼层
/*******************************************************************************
* Function Name  : fputc
* Description    : Retargets the C library printf function to the USART.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int fputc(int ch, FILE *f)
{
    /* Place your implementation of fputc here */
    /* e.g. write a character to the USART */
    //下面的注释的程序是查询方式输出,速度慢
    if (GPIO_ReadInputData(GPIOA) & 0x100)DIR1_485(1);//转换到发送方向
    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//禁止接收中断
    USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//禁止发送中断
    USART_ClearFlag(USART1,USART_FLAG_TC);
    USART_GetFlagStatus(USART1, USART_FLAG_TC);
    USART_SendData(USART1, (u8) ch);
    /* Loop until the end of transmission */
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    {
    }
    //  使用中断的方式输出数据
    //USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
    //USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
    //if(TxBuf_Len1 < 255 ) RxBuffer1[TxBuf_Len1++] = (u8) ch;
    //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    return ch;
}
只要把上面的函数加上,把串口设置好就行了,文件的开始加上#include "stdio.h" 就行了

出0入0汤圆

发表于 2013-12-25 13:48:29 | 显示全部楼层
即然都用LINUX了,为什么还有用WINE,这个有点不明白
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 13:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表