【STM32WB09KE测评】+蓝牙控制外设
本帖最后由 jinglixixi 于 2024-11-17 08:12 编辑在厂家提供的例程中,有进行蓝牙通讯的程序框架,其工程名称为“BLE_SerialPort_Server”。该程序的用途是在蓝牙接收到指定长度的字节数据后,通过串口来输出接收的数据,其输出接收数据的函数为:void Data_Received(uint16_t length, uint8_t *data)
{
for(uint16_t i = 0U; i < length; i++)
{
printf("%c", data);
}
}
为了以蓝牙通讯的方式来控制外观的LED模块和风扇模块,是将LED模块连接到PB1,将风扇模块连接到PB2。图1 引脚接口
图2 引脚变化关系
对所用引脚的初始化函数为:void LED_FAN_Init(void)
{
GPIO_InitTypeDefGPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Mode= GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull= GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_Init);
GPIO_InitStruct.Pin = GPIO_PIN_1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
相应的接收数据控制函数为:void Data_Received(uint16_t length, uint8_t *data)
{
if(data == '1')
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
}
if(data == '2')
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);
}
if(data == '3')
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2, GPIO_PIN_RESET);
}
}
相应的主程序为:int main(void)
{
HAL_Init();
SystemClock_Config();
PeriphCommonClock_Config();
MX_GPIO_Init();
MX_RADIO_Init();
MX_RADIO_TIMER_Init();
MX_PKA_Init();
LED_FAN_Init();
while (1)
{
MX_APPE_Process();
}
}
经程序的编译与下载,由手机上的LightBlue小程序可通过发送字节指令来控制外挂模块。图3发送控制字
在发送字节指令0X31时,LED模块会进行状态转换,见图4和图5所示。图4熄灭状态
图5 点亮状态
在发送字节指令0X32时,风扇模块会进行状态转换,见图6和图7所示。
图6 停止状态
图7 转动状态
在发送字节指令0X33时,则LED和风扇模块均会停止。
Data_Received是被谁调起来?在什么情况下被调起来? sujingliang 发表于 2024-11-17 08:12
Data_Received是被谁调起来?在什么情况下被调起来?
从程序追溯情况看是由函数BLEEVT_EvtAckStatus_t SERIALPORT_SERVER_EventHandler()来调用的,可以理解为是BLE的接收数据中断服务函数在满足条件的情况下启动了这个服务事件。
页:
[1]