╮倾壹伳柔情 发表于 2015-6-3 10:23:21

Nucleo 303 基SmeshStudio(mbed离线开发平台)的程序开发示例

本帖最后由 ╮倾壹伳柔情 于 2015-6-3 13:07 编辑

先简单介绍一下SmeshStudio(官网摘录http://mbed.smeshlink.com/guide),当前物联网开发领域流行着三大可商用的开源软件平台,它们分别是Arduino, mBed和Contiki,它们在各自的应用领域都有着自己的优势,简单来说,Arduino重在简单易用,可以方便地连接各类传感器;mBed重在支持广泛,应用开发通用性强;Contiki重在网络功能强大,应用开发互联方便。但对于开发者来说,这三者都没有提供让开发者满意的本地化IDE开发环境,如Arduino的开发环境过于简单,mBed只提供在线开发环境,Contiki干脆全部用命令行操作,这在一定程度上降低了开发者的开发效率,同时也减缓了这三者的推广进度。当然,从未来的发展来看,mBed将会实现6LowPan等各种通讯协议,同时也将具有Arduino的简单应用性,绝对是未来的主流。SMeshStudio就是在这样的背景下产生的,它基于Eclipse和Arduino Eclipse Plugin开发(感谢他们做出的伟大产品),支持Arduino, mBed和Contiki应用的开发、编译和上载(不支持调试),可以大大加快开发者使用上述开源系统进行应用开发的过程。 个人觉得Mbed挺有意思的,所以想试了玩玩,只是需要网络不太方便,而SmeshStudio正好也支持mbed,就试试了,确实挺方便,整个示例让想玩mbed又没网的朋友试试。
首先当然是下载SmeshStudioIDE(具体下载地址:https://pan.baidu.com/s/1kTgIEof)下载完成就可以使用了,基于eclipse的IDE。打开IDE显示如图:
选择菜单File->new->project,弹出如图对话框:选择mbed(Arduino,Contiki)->new mbed,点击next,填入project name,点击next选择自己的板子和COM口及Nucleo产生的磁盘盘符,我的配置如图:第一个下拉框内要选择mbed的那个txt第二个下拉框选择Nucleo F303,当然其他板子可以选择其他的下面两个分别选择COM口和盘符
设置好后点击finish就ok了,出现project目录。
如图打开project2.cpp里面已经有一个可以运行的led亮灭程序,编译下载,板子就可以运行了。
修改了一下程序,通过nucleo303板子上自带的按钮控制led灯的亮灭。如图:

// Do not remove the include below#include "project1.h" DigitalOutled(LED1);DigitalInbtn(USER_BUTTON);int main() {     while(1)     {      led=!btn;      wait(1);    }}// Auto Added by "SMeshLink SMeshStudio" 编译下载后既可以通过板子上的用户按钮控制灯的亮灭。按下灯亮,不按灯灭。 附:板子的引脚定义在mbed->core->hal->pinmap.h->PinName.h中,如图:
#ifndef MBED_PINNAMES_H#define MBED_PINNAMES_H
#include "cmsis.h"
#ifdef __cplusplusextern "C" {#endif
// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM#define STM_PIN_DATA(MODE, PUPD, AFNUM)((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))#define STM_PIN_MODE(X)   (((X) >> 0) & 0x0F)#define STM_PIN_PUPD(X)   (((X) >> 4) & 0x07)#define STM_PIN_AFNUM(X)(((X) >> 7) & 0x0F)#define STM_MODE_INPUT            (0)#define STM_MODE_OUTPUT_PP          (1)#define STM_MODE_OUTPUT_OD          (2)#define STM_MODE_AF_PP            (3)#define STM_MODE_AF_OD            (4)#define STM_MODE_ANALOG             (5)#define STM_MODE_IT_RISING          (6)#define STM_MODE_IT_FALLING         (7)#define STM_MODE_IT_RISING_FALLING(8)#define STM_MODE_EVT_RISING         (9)#define STM_MODE_EVT_FALLING      (10)#define STM_MODE_EVT_RISING_FALLING (11)#define STM_MODE_IT_EVT_RESET       (12)
// High nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, 7=H)// Low nibble= pin number#define STM_PORT(X) (((uint32_t)(X) >> 4) & 0xF)#define STM_PIN(X)((uint32_t)(X) & 0xF)
typedef enum {    PIN_INPUT,    PIN_OUTPUT} PinDirection;
typedef enum {    PA_0= 0x00,    PA_1= 0x01,    PA_2= 0x02,    PA_3= 0x03,    PA_4= 0x04,    PA_5= 0x05,    PA_6= 0x06,    PA_7= 0x07,    PA_8= 0x08,    PA_9= 0x09,    PA_10 = 0x0A,    PA_11 = 0x0B,    PA_12 = 0x0C,    PA_13 = 0x0D,    PA_14 = 0x0E,    PA_15 = 0x0F,
    PB_0= 0x10,    PB_1= 0x11,    PB_2= 0x12,    PB_3= 0x13,    PB_4= 0x14,    PB_5= 0x15,    PB_6= 0x16,    PB_7= 0x17,    PB_8= 0x18,    PB_9= 0x19,    PB_10 = 0x1A,    PB_11 = 0x1B,    PB_12 = 0x1C,    PB_13 = 0x1D,    PB_14 = 0x1E,    PB_15 = 0x1F,
    PC_0= 0x20,    PC_1= 0x21,    PC_2= 0x22,    PC_3= 0x23,    PC_4= 0x24,    PC_5= 0x25,    PC_6= 0x26,    PC_7= 0x27,    PC_8= 0x28,    PC_9= 0x29,    PC_10 = 0x2A,    PC_11 = 0x2B,    PC_12 = 0x2C,    PC_13 = 0x2D,    PC_14 = 0x2E,    PC_15 = 0x2F,
    PD_2= 0x32,
    PF_0= 0x50,    PF_1= 0x51,
    // Arduino connector namings    A0          = PA_0,    A1          = PA_1,    A2          = PA_4,    A3          = PB_0,    A4          = PC_1,    A5          = PC_0,    D0          = PA_3,    D1          = PA_2,    D2          = PA_10,    D3          = PB_3,    D4          = PB_5,    D5          = PB_4,    D6          = PB_10,    D7          = PA_8,    D8          = PA_9,    D9          = PC_7,    D10         = PB_6,    D11         = PA_7,    D12         = PA_6,    D13         = PA_5,    D14         = PB_9,    D15         = PB_8,
    // Generic signals namings    LED1      = PA_5,    LED2      = PA_5,    LED3      = PA_5,    LED4      = PA_5,    USER_BUTTON = PC_13,    SERIAL_TX   = PA_2,    SERIAL_RX   = PA_3,    USBTX       = PA_2,    USBRX       = PA_3,    I2C_SCL   = PB_8,    I2C_SDA   = PB_9,    SPI_MOSI    = PA_7,    SPI_MISO    = PA_6,    SPI_SCK   = PA_5,    SPI_CS      = PB_6,    PWM_OUT   = PB_4,
    // Not connected    NC = (int)0xFFFFFFFF} PinName;
typedef enum {    PullNone= 0,    PullUp    = 1,    PullDown= 2,    OpenDrain = 3,    PullDefault = PullNone} PinMode;
#ifdef __cplusplus}#endif
#endif




沐紫 发表于 2015-6-3 10:53:21

谢谢楼主:lol

stary666 发表于 2015-6-3 11:17:39

牛人,赞一个

Paderboy 发表于 2015-6-3 11:18:19

多谢分享,

moyanming2013 发表于 2015-6-3 11:49:35

这个既然是离线的,请问是不是得把所有的库、源代码都得下来才行呢?
不是C++吗,看着还是c啊?

风子 发表于 2015-6-3 12:22:28

谢谢分享

╮倾壹伳柔情 发表于 2015-6-3 12:42:37

moyanming2013 发表于 2015-6-3 11:49
这个既然是离线的,请问是不是得把所有的库、源代码都得下来才行呢?
不是C++吗,看着还是c啊? ...

库已经封装在里面了,不用自己下载,看最后一个图左边部分

╮倾壹伳柔情 发表于 2015-6-3 12:44:40

moyanming2013 发表于 2015-6-3 11:49
这个既然是离线的,请问是不是得把所有的库、源代码都得下来才行呢?
不是C++吗,看着还是c啊? ...

是C++,同见图左边部分里面展开有相关api之类

╮倾壹伳柔情 发表于 2015-6-3 12:47:00

本帖最后由 ╮倾壹伳柔情 于 2015-6-3 12:54 编辑

串口字符自发自收只要一下几句。
// Do not remove the include below
#include "project1.h"

DigitalOut led(LED1);
DigitalIn btn(USER_BUTTON);

Serial USART_COM2(SERIAL_TX,SERIAL_RX);

void echouart()

{

      USART_COM2.putc(USART_COM2.getc());

}

int main()
{
      USART_COM2.attach(&echouart,SerialBase::RxIrq);

            while (1)

            {

                led=0;

                wait(1);

                led=1;

                wait(1);

            }
}
//Auto Added by "SMeshLink SMeshStudio"

你好我好大家好! 发表于 2015-6-3 12:50:29

谢楼主分享
页: [1] 2 3
查看完整版本: Nucleo 303 基SmeshStudio(mbed离线开发平台)的程序开发示例