[讨论] 【BLE随身精灵@SensorTile开发大赛】02、跟着littleshrimp玩HID,可是并不行

jofficer   2017-4-20 23:07 楼主
@littleshrimp 版主是在哪个平台下测试的啊(https://bbs.eeworld.com.cn/thread-521965-1-1.html),应该不是sensortile吧,感觉做不出来啊。 想做的东西其实是类似键盘或者鼠标的功能,其实就是HID设备了。一直没有找到合适的例子,直到看到了littleshrimp的帖子(https://bbs.eeworld.com.cn/thread-521965-1-1.html)那就赶紧动手吧 首先需要的是两个东西,一个是STM32CubeExpansion_BLE1,另一个是OSXSmartConnPS。前者还是很容易发现的,可是里面提供的只有一些简单的例子,完全没有HID的影子。这些应该都是自定义的一些profile fd0f3c62-285f-4c9f-b4c7-848f445d55e1.png 还好又发现了OSXSmartConnPS,Bluetooth low energy profiles for the X-CUBE-BLE1 expansion for STM32Cube。名字上看不出来什么区别,但是profiles_lowpower里面就是大量的标准profile 2ee2720d-2a21-4574-9280-cee2d9b9596e.png 但是让人黑线的是,OSXSmartConnPS里面的project是不能直接运行的!!直接打开会报错,缺少一些头文件什么的。和X-CUBE-BLE1相比,少了drivers文件夹,直接copy过来还是不行。看来还是要按照官方的说明来。最简单的就是把OSXSmartConnPS里面的所有内容复制到X-CUBE-BLE1下,文件夹直接合并 7b6d66a8-3a0d-4de0-b0a6-4885a174155b.png 这样呢,就可以了。然后修改MiddlewaresSTSTM32_BlueNRGProf_Periphincludes下的host_config.h文件。84行改为85行,定义为hid 然后就是各种warning。最后把main.c里面的#define LOW_POWER_ENABLED 改成0就ok了,不知道其中的原因啊。 下载之,蓝牙死活找不到。后来想到了,这个这里只支持nucleo的板子,SPI应该和sensorTile不一样吧,查了下,的确不一样 。尝试这就改了SPI引脚的定义,编译出来两个warning 7a0b7677-29f2-416c-aff8-dcae764e6bec.png bfa3a82f-15fc-40e5-9a93-c8c10ebf7c0f.png #include "bluenrg_interface.h"编译通过,然后下载后还是没有蓝牙设备出现!! 本帖最后由 jofficer 于 2017-4-20 23:08 编辑

回复评论 (4)

找一个包含有SensorTile项目的例程,比如BlueMicrosystem2

打开SensorTile_BlueNRG.h

image006.png

 

复制里边SPI部分的宏定义

 

// SPI Instance

#define BNRG_SPI_INSTANCE           SPI1

#define BNRG_SPI_CLK_ENABLE()       __SPI1_CLK_ENABLE()

 

// SPI Configuration

#define BNRG_SPI_MODE               SPI_MODE_MASTER

#define BNRG_SPI_DIRECTION          SPI_DIRECTION_2LINES

#define BNRG_SPI_DATASIZE           SPI_DATASIZE_8BIT

#define BNRG_SPI_CLKPOLARITY        SPI_POLARITY_LOW

#define BNRG_SPI_CLKPHASE           SPI_PHASE_1EDGE

#define BNRG_SPI_NSS                SPI_NSS_SOFT

#define BNRG_SPI_FIRSTBIT           SPI_FIRSTBIT_MSB

#define BNRG_SPI_TIMODE             SPI_TIMODE_DISABLED

#define BNRG_SPI_CRCPOLYNOMIAL      7

#define BNRG_SPI_BAUDRATEPRESCALER  SPI_BAUDRATEPRESCALER_16

#define BNRG_SPI_CRCCALCULATION     SPI_CRCCALCULATION_DISABLED

 

// SPI Reset Pin: PH.0

#define BNRG_SPI_RESET_PIN          GPIO_PIN_0

#define BNRG_SPI_RESET_MODE         GPIO_MODE_OUTPUT_PP

#define BNRG_SPI_RESET_PULL         GPIO_PULLUP

#define BNRG_SPI_RESET_SPEED        GPIO_SPEED_LOW

#define BNRG_SPI_RESET_ALTERNATE    0

#define BNRG_SPI_RESET_PORT         GPIOH

#define BNRG_SPI_RESET_CLK_ENABLE() __GPIOH_CLK_ENABLE()

 

// SCLK: PA.5

#define BNRG_SPI_SCLK_PIN           GPIO_PIN_5

#define BNRG_SPI_SCLK_MODE          GPIO_MODE_AF_PP

#define BNRG_SPI_SCLK_PULL          GPIO_PULLDOWN

#define BNRG_SPI_SCLK_SPEED         GPIO_SPEED_HIGH

#define BNRG_SPI_SCLK_ALTERNATE     GPIO_AF5_SPI1

#define BNRG_SPI_SCLK_PORT          GPIOA

#define BNRG_SPI_SCLK_CLK_ENABLE()  __GPIOA_CLK_ENABLE()

 

// MISO (Master Input Slave Output): PA.6

#define BNRG_SPI_MISO_PIN           GPIO_PIN_6

#define BNRG_SPI_MISO_MODE          GPIO_MODE_AF_PP

#define BNRG_SPI_MISO_PULL          GPIO_NOPULL

#define BNRG_SPI_MISO_SPEED         GPIO_SPEED_HIGH

#define BNRG_SPI_MISO_ALTERNATE     GPIO_AF5_SPI1

#define BNRG_SPI_MISO_PORT          GPIOA

#define BNRG_SPI_MISO_CLK_ENABLE()  __GPIOA_CLK_ENABLE()

 

// MOSI (Master Output Slave Input): PA.7

#define BNRG_SPI_MOSI_PIN           GPIO_PIN_7

#define BNRG_SPI_MOSI_MODE          GPIO_MODE_AF_PP

#define BNRG_SPI_MOSI_PULL          GPIO_NOPULL

#define BNRG_SPI_MOSI_SPEED         GPIO_SPEED_HIGH

#define BNRG_SPI_MOSI_ALTERNATE     GPIO_AF5_SPI1

#define BNRG_SPI_MOSI_PORT          GPIOA

#define BNRG_SPI_MOSI_CLK_ENABLE()  __GPIOA_CLK_ENABLE()

 

// NSS/CSN/CS: PB.2

#define BNRG_SPI_CS_PIN             GPIO_PIN_2

#define BNRG_SPI_CS_MODE            GPIO_MODE_OUTPUT_PP

#define BNRG_SPI_CS_PULL            GPIO_PULLUP

#define BNRG_SPI_CS_SPEED           GPIO_SPEED_HIGH

#define BNRG_SPI_CS_ALTERNATE       0

#define BNRG_SPI_CS_PORT            GPIOB

#define BNRG_SPI_CS_CLK_ENABLE()    __GPIOB_CLK_ENABLE()

 

// IRQ: PC.5

#define BNRG_SPI_IRQ_PIN            GPIO_PIN_5

#define BNRG_SPI_IRQ_MODE           GPIO_MODE_IT_RISING

#define BNRG_SPI_IRQ_PULL           GPIO_NOPULL

#define BNRG_SPI_IRQ_SPEED          GPIO_SPEED_HIGH

#define BNRG_SPI_IRQ_ALTERNATE      0

#define BNRG_SPI_IRQ_PORT           GPIOC

#define BNRG_SPI_IRQ_CLK_ENABLE()   __GPIOC_CLK_ENABLE()

 

// EXTI External Interrupt for SPI

// NOTE: if you change the IRQ pin remember to implement a corresponding handler

// function like EXTI0_IRQHandler() in the user project

#define BNRG_SPI_EXTI_IRQn          EXTI9_5_IRQn

#define BNRG_SPI_EXTI_IRQHandler    EXTI9_5_IRQHandler

#define BNRG_SPI_EXTI_PIN           BNRG_SPI_IRQ_PIN

#define BNRG_SPI_EXTI_PORT          BNRG_SPI_IRQ_PORT

//#define RTC_WAKEUP_IRQHandler       RTC_WKUP_IRQHandler

 

在你的HID项目中找到tm32l4xx_nucleo_bluenrg.h

打开stm32l4xx_nucleo_bluenrg.h文件,用刚才复制的SPI宏定义替换

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-4-21 10:21
引用: littleshrimp 发表于 2017-4-21 10:21
找一个包含有SensorTile项目的例程,比如BlueMicrosystem2打开SensorTile_BlueNRG.h 复制里边SPI部分 ...

最后一条//#define RTC_WAKEUP_IRQHandler       RTC_WKUP_IRQHandler
的注释要去掉
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-4-21 10:32
我重新写了一个操作方法,包括SPI部分
在5楼
https://bbs.eeworld.com.cn/thread-521965-1-1.html
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-4-21 10:46
多谢版主分享
点赞  2017-4-21 13:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复