用SensorTile DIY一个无线路由器——软件设计
[复制链接]
SensorTile官方提供了MOTENV1工程和BlueMS
APP
例程里实现了通过手机控制STLCS01V1板子上的LED灯的功能
所以BlueMS APP可以直接拿来用,省去开发APP的过程
MOTENV1工程只需做简单修改
找一个不使用的I/O
在控制I/O的函数添加到MOTENV1工程中控制LED的函数内
先看一下STLCS01V1半孔焊盘的引脚定义
MOTENV1例程里没有麦克风操作所以 MIC_CLK这个引脚应该不会用到
先确认一下
查找到MIC_CLK对应的引脚,看到对应了PC2
在MOTENV1工程里查找GPIO_PIN_2确定工程中没有使用PC2这个引脚
只找到一个使用GPIO_PIN_2的地方
在stm32l4xx_hal_rcc_ex.c里
GPIO_PIN_2对应的端口是GPIOA
所以PC2可以放心使用
在Projects\Multi\Applications\MOTENV1\Src目录下建一个router_power.c文件
将其添加到工程的User文件夹中
在router_power.c里输入下面内容
/*
Includes ------------------------------------------------------------------*/
#include
"stm32l4xx_hal.h"
void BSP_ROUTER_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWREx_EnableVddIO2();
__GPIOC_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void BSP_ROUTER_On(void)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
}
void BSP_ROUTER_Off(void)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
|
再建立一个router_power.h文件
输入下边内容
#ifndef
__ROUTER_POWER_H
#define
__ROUTER_POWER_H
extern void BSP_ROUTER_Init(void);
extern void BSP_ROUTER_On(void);
extern void BSP_ROUTER_Off(void);
#endif
|
在sensor_service.c和TargetPlatform.c文件中引用router_power.h
在sensor_service.c里找到函数static void
ConfigCommandParsing(uint8_t * att_data, uint8_t data_length)
这个函数是用来接收BlueMS APP发来的开关LED指令的
将 BSP_ROUTER_On();添加在LedOnTargetPlatform();后边
将 BSP_ROUTER_Off();添加在LedOffTargetPlatform();后边
这样在开关LED的时候PC2就会跟着变化
在TargetPlatform.c里找到InitTargetPlatform函数
这个函数是用来初始化的
将 BSP_ROUTER_Init();添加进去
编译后下载到SensorTile
使用APP控制switch开关再用万用表测量一下PC2的电平变化
功能正常
码修改完成
|