jinglixixi 发表于 2024-11-16 22:43

【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和风扇模块均会停止。

sujingliang 发表于 2024-11-17 08:12

Data_Received是被谁调起来?在什么情况下被调起来?

jinglixixi 发表于 2024-11-17 08:23

sujingliang 发表于 2024-11-17 08:12
Data_Received是被谁调起来?在什么情况下被调起来?

从程序追溯情况看是由函数BLEEVT_EvtAckStatus_t SERIALPORT_SERVER_EventHandler()来调用的,可以理解为是BLE的接收数据中断服务函数在满足条件的情况下启动了这个服务事件。
页: [1]
查看完整版本: 【STM32WB09KE测评】+蓝牙控制外设