OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 674|回复: 2

《使用JavaScript简单高效开发STM32应用》配套JSDuino开发板介绍

[复制链接]

  离线 

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
612
金钱
612
注册时间
2013-9-23
在线时间
80 小时
发表于 2017-6-14 19:23:50 | 显示全部楼层 |阅读模式
正点原子公众号
本帖最后由 edmund 于 2017-6-15 15:36 编辑

JSDuino开发板介绍:


JSDuino是基于stm32f103设计的开发板,致力于让大家简单写几行JavaScript代码就能完成STM32应用的快速开发。
JSDuino开发板内置了一套超小型版的JavaScript引擎和固件, 帮助大家远离繁琐的底层特殊功能寄存器的配置,


不用去看漫天英文的芯片手册,也不用操心电路原理图和时序图等等死板枯燥工作。

你只需尽情放飞你的想象,关于万物互联的未来,你想打造什么样STM32应用,

写好一份超简单的JavaScript代码描述你天马行空的想法,剩下的交给JSDuino开发板,

一个命令就能实现。恭喜你,你的第一个应用诞生了!!!


更多内容可以加入QQ群: 383422454


0. 简单起步走

举个栗子:
某天突然苏醒的 Neo 同学想点亮黑暗的物联网世界的第一盏led灯,照亮真实的世界。

NEO这么想的:
[JavaScript] 纯文本查看 复制代码
var led = require("led");//我得有一个灯
var flag = 0; //灯灭了还是没灭的记录

function led_flash(){  //灯闪烁功能
if(flag == 0){
                led.turnOn("led0"); //打开led0
                flag= 1;
        } else {
                led.turnOff("led0"); //关闭led0
                flag = 0;
        }
}

setInterval(led_flash, 500);  //每隔500ms调用一次led_flash函数

function loop(){ //做个循环
        while(true){

        }
}

loop(); //开始无限循环


Neo将写好的JavaScript代码保存,用usb线连上JSDuino开发板,敲了一行命令:         rapid.exe -d COM2 ..\tutorial\led.js
然后按下开发板上的复位键(RESET),
帅气搞定!!LED灯已经开始闪烁!!

JSDuino除了能快速搞定LED这样的简单应用,
还能快速搞定以太网TCP,以太网DNS,WIFI模块,GPRS模块,HTTP客户端,ADC数模转换等复杂应用。




1.1 开发板资源初探

先看一下JSDuino开发板的靓照吧:

JSDuino开发板资源介绍图

JSDuino开发板资源介绍图

开发板的外形尺寸为100mm * 90mm大小。
板子的设计充分考虑到单片机的资源和开发板应用领域,并结合多年的设计经验,将不常用的资源进行裁剪。

JSDuino开发板资源描述如下:

  •   CPU:STM32F103RET6,FLASH:512K,RAM:64K。
  •   一个红色电源指示灯。
  •   两个用户LED灯,LED0为红色,LED1为绿色。
  •   一个RS232接口。
  •   一个RS485接口。
  •   一个WIFI模块。
  •   一个5V电源接线端子。
  •   一个USB转TTL串口接口(USB供电),可用于程序下载、代码调试和固件升级。
  •   一个USB Slave接口(USB供电)。
  •   一个以太网接口,带指示灯。
  •   一个Micro SD卡接口(背面)。
  •   一个SIM卡接口(背面),配SIM卡套。
  •   一个标准的JTAG/SWD调试下载口。
  •   一个CAN总线接口。
  •   三个用户自定义按键,其中WKUP建用于固件升级和程序下载。
  •   一个复位按键。
  •   一个RS232/RS485跳线口。
  •   一个USB/CAN跳线口。
  •   一排IO引脚,引出其它常用IO。


1.2  开发板硬件资源说明

资源说明分为两个部分:硬件资源说明和IO引脚说明。

1.2.1   硬件资源说明


1. RS485/RS232跳线

这是选择485或者232的跳线接口(P2),工业上一般很少出现RS232和RS485同时使用的情况,所以这样设计节约了单片机串口资源。

      两个跳冒根据开发板上面的指示来选择功能,上方为232,下方为485.
2. USB/CAN跳线
      这是USB或者CAN总线的跳线接口(P4)。因为单片机的CAN和USB共用一组IO,所以需要跳线来实现不同功能选择。
      上方为USB功能,下方为CAN总线功能。

3. USB转TTL串口
      该接口提供5V电源。在使用USB转串口时,如果要复位单片机,则需要先停止串口通信(例如关闭上位机串口通信),然后再复位。
      否则单片机复位后不会执行程序。
4. 复位按键
      复位按钮RESET用于单片机的复位。注意,该复位不能复位WIFI、以太网和GPRS模块。
5. WKUP按键
      当单片机开始复位后,三秒钟内按下WKUP按键可以进入程序下载状态。如果没有按任何按键,则进入运行程序状态。
      进入程序下载状态时,LED0红灯常亮。
6. 5V电源端子
      考虑到工业领域经常使用端子接线,所以JSDuino开发板在取电方面增加了端子接线方式。
      JSDuino开发板最大工作电流为1000mA。


1.2.2   IO引脚分配
661> href="th
  编号
  
  引脚
  
  描述
  
  编号
  
  引脚
  
  描述
  
  32
  
  PC10
  
  串口4_Tx
  
  31
  
  PC11
  
  串口4_Rx
  
  3c脄}i醦;&nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.B3t>
  
  串口
  
  31
  PC11  串口4_Tx<>4_Rx
  
  73c脄}i醦;&nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.Biley/default/vic;   串口
  
  31
  PC11  串口4_Rx
  
      &nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.B    &nbsnbsp; 串口
  
  31
    3c脄}i醦; 串口编号
p;31

  
sow('login', 'mb/-si&nb穤}i岬奶//www.openedv.B6    &nbssnbsp; 串口
  
  31
编号
  
   &nbssp;串口
  
p;31

  
  PC103c脄}i醦;&nbsnbsp; 串口
  
  31
  PC11
  
  串口
  
31
3c脄}i醦;&nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.Cstyle="font-size:10.5pt">引脚
  串口引脚  31
  PC11
iley/default/vic; 
&p;串口
  
31
3c脄}i醦;&nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.Cnt>
  
  串口
  
  31
  PC11
3t>
  
&p;串口
  
31
 &nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.Cstyle="font-size:10.5pt">编号
  串口编号  31
    编号&p;串口4_Rx
  
 &nbs>3t>
  
sow('login', 'mb/-si&nb穤}i岬奶//www.openedv.C3t>
  
  串口
  
  31
编号
  
    串口4_Rx
  
 &nbsont>
  
sow('login', 'mb/-si&nb穤}i岬奶//www.openedvGND    &nbsnbsp; 串口<地="font-size:10.5pt">4_Rx  31
  PC11  串口4_Tx<>4_Rx
  
 &nbs;3c脄}i醦;&nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv3.3V    &nbsnbsp; 串口<3.3vt>4_Tx<>4_Rx  31
  PC11
  
  串口3c脄}i醦;&nbp;31
3c脄}i醦;&nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.Ailey/default/vic; 
  串口4_Rx  31
  PC11
引脚
  
    31
 &nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.A    &nbsnbsp; 串口
  
  31
      串口 &nbp;31
  
 &nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.A6    &nbssnbsp; 串口
  
  31
    &p;串口p;31
 &nbsow('login', 'mb/-si&nb穤}i岬奶//www.openedv.A73c脄}i醦;&nbsnbsp; 串口
  
串口<0红灯常亮。
串口
串口






/>
mp;searchs_579500">md width= <<<---/a>[复制链接]<
d="ct" cla
籹="wpin/use2 开 id="pg
金莋 in/t" c extra=page%3D1>612 in/us
注册时间="发新n/onlin约尤隥Q群:lpadding="06px;布试此得骱ma">;www.o;rumiled_:ret;&iva hre!-- Baidu B>

闾炻硇锌盏膕/lass-kit-sp-5font> <

ame="srhlocality" mgc_span> 2 le cellspacing=c="static/i="1">> colo谰遪/onliutter: true"> varrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrdbt">
金莋 id="p=, get=, -1);pan>on/star_ty" mgc_span> 战舰 STM32 开 mgcmn发板
8阿波罗STM32F767&F429&蕆etoadB7%A2checkmgcmn('span> [复制链接]<
80604> href="th

  离线 

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
612金钱
612
注册时间
2013-9-23
在线时间
80 小时
ck="showWindow('sendpm661>his.href);" title="发5:49 class="xi2">发消息
发表于 2017-6-14 19:23:50 显示全部FF层 <【ef="】点击免费r>
ead-105197-1-1.html" ta "_blank" style="font-size: 15px"><<<<<----【正点原子】劲爆:MiniF661>h-si顶 t代码描述你天马行空的想法,剩下的交给敕ǎ琽lor="#ff0000">J1uino开发板, <661> href=" m闹岱尚衅get="_bl岱尚衅髅媸绍rate_髅鎖niF661>h苂et="_bl嵘行苖p;searchs_579500">md width= <<<---/a>h苂th= < dv-开源电子网')" >[1粗屏唇覿<
d="ct" cla
籹="wpin/use2 开 id="pg
金莋 in/ush:e612 in/us
注册时间="发新n/onlinalass="plin/us"ay(); d="cmi la
籹="wpt" creellpy"> 金莋 /a> lovat
注册时间= /* Set the font sit>
admo >
d="cmi la
籹="wpt" creellpy"> 金莋 /a> lovat
注册时间= /* Set the font sit>
反对 >

ame="srhlocality" mgc_span> <661> 2
le cellspacing=c="static/i="1">> colo谰遪/onliutter: true"> varrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrdbt">
am-rumttmessaging="0" cellpadding="0" class="ad">
ian
edmund
edmund 当前离线
积分
612
amp;do=profile" target="_blank" title="查看详细资料">查看详细资料
嬖黾恿硕板 籹="wslity" m=">籹="wsllekeynpu轘TM32F7hidden正namiv>scrmhash" valuiv>61e894c/td/lekeynpu轘TM32F7hidden正namiv>opt =, script> d="ct" cla籹="wpnlp g id="p&speci15=3')"t">
201新帖arget="_blank" class="xi2">edmunpn_spane cell1501301新帖a>
amp;do=ptd>v id="fat!--[d="y]; :12px;子】緄nchars:80parseInt('6'); :12px;子】綼xchars:80parseInt('2层_pand= href="th bm=bmw;> :1tscrm meind m-rumtscrmd=1籹="wp/script> d="ct" cla
籹="wpin/use2 开 id="pg
金莋 extra=page%3D1>612612612 m-rumtlassSubmit="pan><< < id="开源电子网')nt-size: 1 d w i
<45157&extra=page%3D1ile" target="_bla >微信公众平台细资義i2">发消息 2px;cnzz_protoanl = ((a"19:s2" == docuiptn.toc=s="w.protoanl) ? " "19:s23:":: " "19:23:"); docuiptn.write uniscape("%3C
%3Fid%3D1257047916'STM32F'67&F429&'%3E%3C 9&%3E"));<
2px;_hmc =0_hmc ||0[]; (fun籹="w() { 2px;hm = docuiptn.ctd>teEleiptn("29&); u ;hm.src = "//hm.baidu src=ome="cc49232a8be82d37340e295f04cb9cf85"; 2px;s =0docuiptn.getEleiptnsByTagNami("29&)[0]; s.parptnN举.insertBescre(hm, s); })(); u点原子新作:阿波罗> (fun籹="w(){ 2px;src = (docuiptn.toc=s="w.protoanl == /查看") ? ""19:23:js.pass.qihucdn src=11.0.1e="c5e1f2c3454d4f92f2dee859404<418ad":a"19:s23:jspass.ssl.qhet= src=11.0.1e="c5e1f2c3454d4f92f2dee859404<418ad"; docuiptn.write '喊⒉轘 (fun籹="w(){ 2px;bp = docuiptn.ctd>teEleiptn('29&'); u ; 2px;curProtoanl = wdd> .toc=s="w.protoanl.splin(':')[0]; u ; if (curProtoanl =880'"19:s') { bp.src = '"19:s23:zz bdk" cla src=linksubmit/pushe="'; } else {qu bp.src = '"19:23:pushezhanzhang.baidu src=pushe="'; } 2px;s =0docuiptn.getEleiptnsByTagNami("29&)[0]; s.parptnN举.insertBescre(bp, s); })(); u点原子新 tptargpnk" stylxslt; GMT+8, ortswait19 16:27r
tptargm&op=sho绍rt">>
ml clas :!-- "_blank" stylvk_ft_bg;ac=pm&o; d=d=t" cla
籹="wpin/use2 开 id="pg
金莋 extra=page%3D1>612 in/us
注册时间=lass="plin/usfam-ace-uid-1快速发新 g祂>快速发新/tabbla
20祷囟ゲ縜d" /> wdd> .s9&ollTo('/','/')g=c="stati9&olltopaa >祂>0祷囟ゲ/tabbla
> scrip-="ps="plc r
20祷亓斜">祂>0祷亓斜/tb tor.gif"阿波罗STM32F767&F429&>_r="#ffEvent(wdd> 点原子新作c*//tbodyl> tplc l>

癳 cellspacinin/userstatus/images/offline.png"/>  离线 

癳 cellspacing="0" cellpadding="0">

45

主题 2 le ce{'ctrlid':llspaci"imrum':'12!'});arget="_blank" class="xi2">edmunm=space" class="xi2">1156/p>帖子

g_upp80604战舰 STMtipeedp_4> 板 積dp_v cnv id="faton579500">積dp_can金牌会员, ="p_ 2643, 距)">乱患痘剐 357 ="p_poppace-et="_bl嵘>版主

Rank: 7Rank: 7

积分
o=prof30747k"> t="_blank" class="xi2">612金钱
612
注册时间
2013-9-23
在线时间
80 小时
1-1.html" ta "_blank" style="font-size: 15px"><<<<<----【正点原子】劲爆:Min80604>h-si顶&nbs,每个例程都很实用ond width="id=1501 howMenu(th target="_blaforum-249oriptn> 80604> href=" m闹岱尚衅get="_bl岱尚衅髅媸绍rate_髅鎖n80604>h苂et="_bl嵘行苖p;searchs_579500">md width= <<<---/a> max试此得骱m0atarmaxH此得鱅E簃0atar">机器生汇编,汇编生B,B生C,C生crip.... 经过长期对C语言的研究,目前只有nt s按下不懂:这f000懂,那f000懂 "3">h苂th= < dv-开源电子网')" >[复制链接]<
d="ct" cla
籹="wpin/use2 开 id="pg
金莋 in/ush:e612 in/us
注册时间="发新n/onlinalass="plin/us"ay(); d="cmi la
籹="wpt" creellpy"> 金莋 /a> lovat
注册时间= /* Set the font sit>
admo >
h苂ace&uidonlinalass="plin/ussubtra9-1.y(); d="cmi la
籹="wpt" creellpy"> 金莋 /a> lovat
注册时间= /* Set the font sit>
反对 >
h苂ace&uidonlin-lass=>
ame="srhlocality" mgc_span> 80604> 2
le cellspacing=c="static/i="1">> colo谰遪/onliutter: true"> varrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrdbt">
opss=s="wtd/lekeynpu轘TM32F7hidden正namiv>li cextra" valuiv>page%3D1td/lekeynpu轘TM32F7hidden正namiv>page" valuiv>1td/lekenscrm>ml" ta "_blank" stylpgs mtm mbm="Rank: xi2">发消息 返回列表/tabbla 2 le ce{'ctrlid':llspaci})lass="authi nlp版主'}; ret;&gdlink[18] = {'snami':' fun籹="w succeedme.php_lor" >id=(url, msg,uvaluis) { 2px;fObj = $ for" >id=_'+valuis['fet=']); uif(valuis['TM32'] == 'add') { fObjid="authic = '不收听'; fObji = '
c=for" >& c=for" >& 2px;ret_tci:80"dt>金莑; 2px;ret_tc

%BF%AA%B7%A2%B0%E5%BD%E9%C9%DCl; 2px;ret_rettci:80"0l; 2px;ret_p _r="#ffEvent(wdd> n:80fun籹="w() {toGarForbiddenFormulaFIds();}; } } 2px;btn:80docuiptn.body.getEleiptnsByTagNami('kit-sp'); uscr(2px;i:80rei < btn.length;i++){ uif(btn[i].getAttrikite c')) { btn[i].setAttrikite mid n:80fun籹="w() {toGarForbiddenFormulaFIds();}; } } } u点原子新作fif"阿波罗STM32F767&F429&> fun籹="w mw_syntaxhww.lww.oer_sasstgSass'; mtp += 's9a 4">S9a 4'; mtp += 's9sstgScss'; mtp += 'soelltgSoell'; mtp += 'sqltgSQc="ops="w>'; mtp += 'vb">Visual Basic="ops="w>'; mtp += 'vbnet">Visual Basic .NET="ops="w>'; mtp += 'xplc r>Xthic="ops="w>'; mtp += 'xc r>Xic="ops="w>'; mtp += 'xslt">XSLT="ops="w>'; mtp += 'objctgOe celive-C'; mtp += 'asm;>Asm'; mtp += 'a1uto;>AAuto="ops="w>'; mtp += 'go acel>Go ace="ops="w>'; mtp += ''; mtp += ' =) { 2px;mel, selcel="w; 2px;mtp1 = ' i醦;&: 98%">显蕇="50 灏醇nk" style&aptd>< id="fa'; //note 修改了ie下的不兼容问题 uif(BROWSER.i2) { if(wysiwyg) { editdoc.body.focus()equsel = editdoc.selcel="w.ctd>teR="xi()equ} else {qusel = docuiptn.selcel="w.ctd>teR="xi()equ} s:80getCptdt()equ} quselcel="w:80sel ? (wysiwyg ? sel.p7&a : sel.p7&a) : mw_hww.lww.oer_getSel()e//note 修改sel.Hlc T7&a修改为T7&a,编辑器中的可视化用插件实现比较困难 if(menu) { if($ ctrlid).getAttrikite menus=) !== null) { menus:80$ ctrlid).getAttrikite menus=)equ} if($ ctrlid).getAttrikite menui醦;&=) !== null) { menu.板teEleiptn('="f=)equmenu.id = ctrlid + '_menu'; menu.板发消息
关闭/tabbla ' && e.ctrlKey && e.keyC de == 13)) { if($ ctrlid + '_submit=) && tag != 's="xi=) $ ctrlid + '_submit=).="aut()equdoane(2); } else if(e.keyC de == 27) { hidele ce);qudoane(2); } })equ} if($ ctrlid + '_submit=)) $ ctrlid + '_submit=).ss="aut:80fun籹="w() { checkFocus()equif(BROWSER.i2 && wysiwyg) { setCptdt(s[0])equ} if(wysiwyg) { if(!BROWSER.i2) { selcel="w:80selcel="w:?0selcel="w:: ''; } } umtp1 = $ ctrlid + '_param_1') && $ ctrlid + '_param_1').valui ? clctrlid + '_param_1').valui : (selcel="w:?0selcel="w:: ''); qu2px;opentag = '[' + mw_syntaxhww.lww.oer_tag + '=' + $('brush_lace').valui + ',' + ( clabtab_git-er') && $ abtab_git-er').checked) ? 'tpue':: 'falsa=) + ']'; 2px;closetag = '[/' + mw_syntaxhww.lww.oer_tag + ']'; quif(wysiwyg) { stp1 = preg_rep0ace(['<', >'], ['<', >']<=)equ} mtp1 = opentag +;mtp1 +;closetagequinsertT7&a(mtp1 m-rumt || editl2TM32 == 'rumt ) { 2px;mel:80falsa 2px;meditl2key = editl2TM32equif(!isUndefined clmeditl2key +d'me爆:M').癳lcel="wSaptt)) {qusel = clmeditl2key +d'me爆:M').癳lcel="wEnd - clmeditl2key +d'me爆:M').癳lcel="wSaptt; } else if(docuiptn.selcel="w && docuiptn.selcel="w.ctd>teR="xi) { $ meditl2key +d'me爆:M').focus()equ2px;mel:80docuiptn.selcel="w.ctd>teR="xi()equclmeditl2key +d'me爆:M').癳l:80selequsel = sel.p7&a ? tpue:: falsa } 2px;ctrlid = meditl2key +dtag; 2px;menuid = ctrlid + '_menu'; mtp += '<板介绍v 你的2F10:="3>'; mtp += '<67&aptd>樯 i醦;&: 98%">显蕇="50 灏醇nk" style&aptd>< id="fa'; if(!$(menuid)) { 2px;submitmtp = "meditl2_insertunin('" +rmeditl2key +d"', [" + mw_syntaxhww.lww.oer_tag + "=' + $('brush_lace').valui + ',' + ( clabtab_git-er') && $ abtab_git-er').checked) ? 'tpue':: 'falsa=) + ']'+$('" +rctrlid + "_param_1').valui, [/" + mw_syntaxhww.lww.oer_tag + "]', null, 1);hidele ce);"; 2px;menu = docuiptn.ctd>teEleiptn('="f=)equmenu.id = menuid; menu.板发消息
关闭/tabbla 取消?mod=spkit-spi8e_modscrm>id="fa'; }quif(sel) {//note ').板le ce{'ctrlid':ctrlid,'evt':'="aut',mdus=s="w':3,'cache':0,'drag':1})equ} } fun籹="w mw_hww.lww.oer_getSel() { if(wysiwyg) { try { selcel="w:80editwin.getSele籹="w(); ren>teR="xi()equ//sen> N举竤(s="xi.k"oneContptns()teR="xi()equif(s="xi.hlc T7&a && s="xi.p7&a) { ren>teR="xi) { ren>teR="xi().p7&aequ} else if(wdd> .getSele籹="w) { alert editdoc); ren> .getSele籹="w() + ''equ} else {qupan>//apple29& 查看详细资料">fif"阿波罗STM32F767&F429&> (fun籹="w() { 2px;ellps clas:80[]; 2px;copyc de =0[]; if(docuiptn.getEleiptnsByC" stNami) { 2llps clas:80docuiptn.getEleiptnsByC" stNami('2llps clas=)equcopyc de =0docuiptn.getEleiptnsByC" stNami('copyc de')equ} else {qu2px;emli c =0docuiptn.getEleiptnsByTagNami('em'); uscr(2px;i=0;i') .rep0ace(/&2 开/g, '&') equcode =0mw_unont nt(c da); setC py(c de, '2F10已复制到剪贴板')equ} fun籹="w mw_fixynpu辳tring(str) { 2px;bp = /||<br\s*\/?>/gi; if(SyntaxHww.lww.oereconfig.blovverM de == tpue) { stp = mtp.rep0ace(br, '\n'); }quif(SyntaxHww.lww.oereconfig.stripBrs:8= tpue) { stp = mtp.rep0ace(br, ''); }quren> ."><(url, nami, ops="ws); win.focus()equren> 点原子新注板介绍t正k" stylwp="Rank: 板介绍lkd= href="y">>
查看详细pa.qq src=msgrd?V=莋 Uin=38906347莋 Site=O">612edmunmite_qq jpell15013QQa聪晗缸柿xi2">发消息 发消息 d=bilM=yesac>手机版细资義i2">发消息 发消息 新浪微博细资義i2">发消息 d=d=ellp