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
谢谢楼主:lol 牛人,赞一个 多谢分享, 这个既然是离线的,请问是不是得把所有的库、源代码都得下来才行呢?
不是C++吗,看着还是c啊? 谢谢分享 moyanming2013 发表于 2015-6-3 11:49
这个既然是离线的,请问是不是得把所有的库、源代码都得下来才行呢?
不是C++吗,看着还是c啊? ...
库已经封装在里面了,不用自己下载,看最后一个图左边部分 moyanming2013 发表于 2015-6-3 11:49
这个既然是离线的,请问是不是得把所有的库、源代码都得下来才行呢?
不是C++吗,看着还是c啊? ...
是C++,同见图左边部分里面展开有相关api之类 本帖最后由 ╮倾壹伳柔情 于 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"
谢楼主分享