本帖最后由 ypw 于 2015-11-24 22:53 编辑
更新
WRTnode 2R
如果你是内测版的2R,首先需要更新feeds,然后才能使用新版的spi-bridge和
STM32
通信。
如果你还不会编译固件,可以先参考
【WRTnode2R试用体验】WRTnode 2R SDK的搭建,固件的编译以及固件的刷写,构建一个自己的固件,然后利用下面这段代码更新spi-bridge。
- ./scripts/feeds update wrtnode
- ./scripts/feeds install -a
复制代码
更新了之后在make menuconfig中选择WRTnode2r-stm32,编译,刷机。
更新
STM32
如果你是内测版的2R,你的板载STM32也是不带bootloader的,那么你首先需要一个ST-Link,把你的STM32的固件改为新版bootloader,然后再烧写应用程序,不然就没有控制IO口的命令。
烧写固件的教程在这里有:
【WRTnode2R试用体验】通过spi-bridge与STM32通信(一),这里只强调一点,bootloader烧在0x08000000,应用程序烧在0x08001000。
bootloader在官方交流群里已经发过了,应用程序(RT-Thread)在这个帖子里也可以下载到:
【WRTnode2R试用体验】通过spi-bridge与STM32通信(二),我这里不再重复发,下面我教大家怎么样自己编译固件:
编译RT-Thread
操作系统:Ubuntu 15.10。
首先需要安装一些软件包:
- sudo apt-get update
- sudo apt-get -y upgrade
- sudo apt-get -y install python scons gcc-ARM-none-eabi git
复制代码
然后下载源码:
- cd Desktop
- mkdir wrtnode2r-stm32
- cd wrtnode2r-stm32
- git clone https://github.com/WRTnode/wrtnode2r_stm32 wrtnode2r_stm32
- git clone https://git.oschina.net/SchumyHao/rt-thread.git rtt
复制代码
配置gcc路径:
- cd wrtnode2r_stm32
- nano rtconfig.py
复制代码
其中的gcc改为 /usr/share/lin
tian/overrides/ ,这是gcc-arm-none-eabi所在的目录。
然后就可以执行scons命令开始编译了!
编译好的固件被放置在wrtnode2r-stm32/wrtnode2r_stm32/rtthread.bin
使用spi-bridge
当你更新完WRTnode 2R和STM32之后,就可以使用spi-bridge了,输入tab,回车,就可以看到所有的命令和命令的解释说明。个人认为最大的亮点在于,它加入了Arduino的语法,可以使用pinMode,digitalWrite,digitalRead等命令,由于是测试版,还未加入所有的功能,以后肯定会加入诸如analogWrite(PWM),analogRead(ADC)等功能,大大降低
单片机开发难度,让更多人能够跨入这个门槛中。
- spi-bridge # 进入交互模式
- spi-bridge write ps # 执行命令
- spi-bridge read # 读取命令结果
- spi-bridge status # 获取当前状态,通常返回OK
复制代码
通过输入下面的命令,我们可以控制PB5输出高电平:
- spi-bridge write "pinMode 5 0" # 0表示输出
- spi-bridge write "digitalWrite 5 1" # 1表示高电平
复制代码
PB5在左上角第一个脚:
至于各个引脚的定义,在官方的PIN_MAP中可以找到:https://github.com/WRTnode/wrtnode2r_stm32/blob/master/maple/wirish/boards/wrtnode2/board.cpp#L67
- extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
- PMAP_ROW(GPIOB, 0, TIMER3, 3, ADC1, 8), /* D0/PB0 */
- PMAP_ROW(GPIOB, 1, TIMER3, 4, ADC1, 9), /* D1/PB1 */
- PMAP_ROW(GPIOB, 2, NULL, 0, NULL, ADCx), /* D2/PB2 */
- PMAP_ROW(GPIOB, 3, NULL, 0, NULL, ADCx), /* D3/PB3 */
- PMAP_ROW(GPIOB, 4, NULL, 0, NULL, ADCx), /* D4/PB4 */
- PMAP_ROW(GPIOB, 5, NULL, 0, NULL, ADCx), /* D5/PB5 */
- PMAP_ROW(GPIOB, 6, TIMER4, 1, NULL, ADCx), /* D6/PB6 */
- PMAP_ROW(GPIOB, 7, TIMER4, 2, NULL, ADCx), /* D7/PB7 */
- PMAP_ROW(GPIOA, 0, TIMER2, 1, ADC1, 0), /* D8/PA0 */
- PMAP_ROW(GPIOA, 1, TIMER2, 2, ADC1, 1), /* D9/PA1 */
- PMAP_ROW(GPIOA, 2, TIMER2, 3, ADC1, 2), /* D10/PA2 */
- PMAP_ROW(GPIOA, 3, TIMER2, 4, ADC1, 3), /* D11/PA3 */
- PMAP_ROW(GPIOA, 8, TIMER1, 1, NULL, ADCx), /* D12/PA8 */
- PMAP_ROW(GPIOA, 9, TIMER1, 2, NULL, ADCx), /* D13/PA9 */
- PMAP_ROW(GPIOA, 10, TIMER1, 3, NULL, ADCx), /* D14/PA10 */
- PMAP_ROW(GPIOA, 11, TIMER1, 4, NULL, ADCx), /* D15/PA11 */
- PMAP_ROW(GPIOA, 12, NULL, 0, NULL, ADCx), /* D16/PA12 */
- PMAP_ROW(GPIOA, 13, NULL, 0, NULL, ADCx), /* D17/PA13 */
- PMAP_ROW(GPIOA, 14, NULL, 0, NULL, ADCx), /* D18/PA14 */
- PMAP_ROW(GPIOA, 15, NULL, 0, NULL, ADCx), /* D19/PA15 */
- PMAP_ROW(GPIOA, 4, NULL, 0, NULL, ADCx), /* D20/PA4 */
- PMAP_ROW(GPIOA, 5, NULL, 0, NULL, ADCx), /* D21/PA5 */
- PMAP_ROW(GPIOA, 6, NULL, 0, NULL, ADCx), /* D22/PA6 */
- PMAP_ROW(GPIOA, 7, NULL, 0, NULL, ADCx), /* D23/PA7 */
- };
复制代码
0
|